จะผลักเซิร์ฟเวอร์ DNS ของฉันเองไปที่ OpenVPN ได้อย่างไร


27

ฉันได้กำหนดเซิร์ฟเวอร์ DNS ที่ไม่ได้ผูกไว้บน VPS ของฉันและดูเหมือนว่าจะใช้งานได้ ฉันต้องใช้เซิร์ฟเวอร์ DNS แทนเซิร์ฟเวอร์ DNS สาธารณะเนื่องจาก ISP บางรายได้บล็อก IP DNS สาธารณะ ไฟล์ openvpn.conf ของฉันคือ:

    dev tun
    proto tcp

    # Notice: here I set the listening port to be 80 to avoid possible port blockage
    port 80

    ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
    cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
    key /etc/openvpn/easy-rsa/2.0/keys/server.key
    dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

    user nobody
    group nogroup
    server 10.8.0.0 255.255.255.0

    persist-key
    persist-tun

    #status openvpn-status.log
    #verb 3
    client-to-client

    push "redirect-gateway def1"

    #pushing public DNS IPs

    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.222.220"

    comp-lzo

ตามที่แนะนำไว้ที่นี่ฉันพยายามใช้ IP ของเซิร์ฟเวอร์ (พูด 11.22.33.44) ดังนั้นแทนที่จะ

    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.222.220"

ฉันแค่ใส่

push "dhcp-option DNS 11.22.33.44"

ใน openvpn.conf ด้านบน อย่างไรก็ตามหลังจากรีสตาร์ท openvpn ฉันเห็นว่าลูกค้าของฉันยังคงสามารถเชื่อมต่อกับเซิร์ฟเวอร์ OpenVPN ได้ แต่ไม่สามารถแสดงหน้าใด ๆ ได้อีก

มีอะไรผิดปกติหรือเปล่า ฉันจะแก้ปัญหานี้ได้อย่างไร

คำตอบ:


31

สำหรับWindows 10ลูกค้าคุณต้องเพิ่มคำสั่งต่อไปนี้ในclient.ovpn:

script-security 2                                                                                                       
dhcp-option DNS 10.0.8.1                                                                                           
dhcp-option DOMAIN example.lan                                                                                   

ไม่จำเป็นต้องมีคำสั่งเพิ่มเติมสำหรับ windows

สำหรับUbuntu 16.04ลูกค้าคุณอาจต้องเพิ่มคำสั่งต่อไปนี้ลงในclient.ovpn:

up /etc/openvpn/update-resolv-conf                                                                                      
down /etc/openvpn/update-resolv-conf  

เวอร์ชันไคลเอนต์ OpenVPN ล่าสุดสำหรับ Windows ไม่รู้จักตัวเลือกDOMAIN-SEARCHอย่างถูกต้องและทำงานDOMAINได้


สิ่งนี้ต้องการเวอร์ชั่นขั้นต่ำของ OpenVPN หรือไม่?
0xC0000022L

ฉันคิดว่าคุณควรใช้ VPN เกตเวย์ IP (10.0.8.1) ไม่ใช่ที่อยู่ IP ในเกตเวย์ของเราเตอร์ (192.168.1.1) นั่นเป็นที่อยู่ IP ทั่วไปของเราเตอร์ซึ่งมีแนวโน้มว่าเราเตอร์เครือข่ายที่ไม่น่าเชื่อถือที่พวกเขาเชื่อมต่อโดยตรงจะอยู่ที่ 192.168.1.1 ที่อยู่
carlin.scott

8

คุณพูดว่า "ดูเหมือนว่าจะทำงาน" คุณยืนยันเรื่องนี้ได้อย่างไร คุณอ้างอิงจากข้อเท็จจริงที่ว่าเซิร์ฟเวอร์เริ่มต้นโดยไม่มีข้อผิดพลาดหรือคุณได้ทำการสืบค้นจริงหรือไม่?

สิ่งแรกที่ฉันจะทำคือใช้ nslookup หรือขุดเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่ไม่ถูกผูกไว้และทำแบบสอบถามบางอย่าง ฉันรู้ว่าขุดเป็นแฟชั่นมากขึ้นในวันนี้ แต่ฉันรู้ว่า nslookup ดีขึ้น


$ nslookup
> server 11.22.33.44
Default server: 11.22.33.44
Address: 11.22.33.44#53
> set type=A
> www.google.com
Server:     11.22.33.44
Address:    11.22.33.44#53

Non-authoritative answer:
www.google.com  canonical name = www.l.google.com.
Name:   www.l.google.com
Address: 74.125.225.52
Name:   www.l.google.com
Address: 74.125.225.48
Name:   www.l.google.com
Address: 74.125.225.49
Name:   www.l.google.com
Address: 74.125.225.50
Name:   www.l.google.com
Address: 74.125.225.51

หากวิธีนี้ใช้ไม่ได้ผลคุณจะต้องดูที่การกำหนดค่า DNS อีกครั้ง

นี่เป็นเซิร์ฟเวอร์ DNS หลักหรือเซิร์ฟเวอร์ DNS แคชหรือไม่ คุณกำลังพยายามสืบค้นทรัพยากรในท้องถิ่นหรือแหล่งข้อมูลอินเทอร์เน็ตหรือไม่ มันทำงานได้อย่างที่คาดไว้ถ้าคุณไม่ผลักเซิร์ฟเวอร์ DNS ของคุณไปยังลูกค้า

หากคุณส่งการรับส่งข้อมูลทั้งหมดผ่านเซิร์ฟเวอร์ OpenVPN ของคุณคุณไม่จำเป็นต้องกังวลเกี่ยวกับ ISP ของคุณที่บล็อกเซิร์ฟเวอร์ DNS สาธารณะอีกต่อไปเนื่องจากตราบใดที่ ISP ของคุณกังวลว่าคุณกำลังสร้างปริมาณการใช้งาน VPS นอกเสียจาก VPS จะอยู่เบื้องหลัง ISP เดียวกัน


ubound สามารถผ่านการทดสอบทั้งหมดที่คุณพูดถึงและอื่น ๆ ได้ดังนั้นฉันค่อนข้างแน่ใจว่าไม่ใช่ปัญหา สำหรับเหตุผลที่ฉันต้องใช้เซิร์ฟเวอร์ DNS ของตัวเองฉันพบว่าเมื่อฉันใช้ DNS สาธารณะข้างต้นลูกค้าในอิหร่าน (ที่มีไซต์ถูกบล็อกนับล้าน) ไม่สามารถรับหน้าใด ๆ ผ่านการเชื่อมต่อ openvpn ของพวกเขาได้ พวกเขาสามารถเชื่อมต่อกับเซิร์ฟเวอร์ openvpn ดังนั้นความพยายาม ขอบคุณ
hbp

1
คุณยืนยันว่าพวกเขาสามารถรับเว็บเพจผ่านที่อยู่ IP ได้เมื่อเชื่อมต่อแล้วหรือยัง นี่จะทำให้แน่ใจว่าเป็นปัญหา DNS จริง ๆ และไม่ใช่ปัญหาการกำหนดเส้นทาง เป็นเรื่องปกติมากเมื่อตั้งค่า OpenVPN เพื่อให้สามารถเชื่อมต่อกับเซิร์ฟเวอร์ แต่ไม่ได้รับการรับส่งข้อมูลกลับเนื่องจากเส้นทางการส่งคืนที่ขาดหายไป
digitaladdictions

3

ปรากฎว่าถ้าคุณพยายามเชื่อมต่อจากไคลเอนต์ที่ไม่ใช่ Windows คุณต้องทำสองขั้นตอนเพิ่มเติม:

บน Linux

วางบรรทัดนี้ในการกำหนดค่าไคลเอนต์ของคุณ ( client.confหรือxxxx.ovpnไฟล์)

dhcp-option DNS 11.22.33.44

โทรหาลูกค้า OpenVPN ด้วยวิธีนี้:

$ openvpn --script-security 2 --config xxxx.ovpn

ที่ทำงานให้ฉัน


Unrecognized option or missing or extra parameter(s) in [CMD-LINE]:1: script-security
Javier Buzzi

1

ทดสอบกับ Ubuntu 18.04 เมื่อวันที่ 13 Sep 2018

มีอีกคำสั่งที่มีประโยชน์ในการตั้งค่าสิ่งที่คุณต้องการผ่านทางบรรทัดคำสั่ง แต่ในกรณีของฉันคุณสามารถควบคุมการเชื่อมต่อ VPN ของคุณได้ทั้งในบรรทัดคำสั่งและ GUI

sudo nmcli connection add type vpn vpn-type openvpn con-name la.vpn.contoso.com ifname --

ifname -- เป็นสิ่งจำเป็นโดยค่าเริ่มต้น แต่ไม่มีผลอะไร

sudo nmcli connection modify la.vpn.contoso.com ipv4.dns 172.16.27.1 sudo nmcli connection modify la.vpn.contoso.com ipv4.dns-search int.contoso.com sudo nmcli connection modify la.vpn.contoso.com ipv4.never-default yes

never-default ไม่ควรใช้เกตเวย์ระยะไกลเป็นเส้นทางเริ่มต้น

และสัมผัสสุดท้ายที่น่าสนใจอีกมากมาย:

nmcli connection modify la.vpn.contoso.com vpn.data 'ca = /tmp/la.vpn.contoso.com/you/ca.crt, key = /tmp/you.key, dev = tun, cert = /tmp/you.crt, cert-pass-flags = 1, comp-lzo = adaptive, remote = la.vpn.contoso.com:1194, connection-type = tls'

หลังจากนั้นคุณสามารถควบคุม vpn ด้วย GUI หรือใช้คำสั่งต่อไปนี้:

sudo nmcli --ask connection up la.vpn.contoso.com sudo nmcli connection down la.vpn.contoso.com

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.