กำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่าน OpenVPN


39

ใช่คำถามนี้ได้รับการถามร้อยครั้งและฉันได้ค้นหาทุกที่ไม่มีประโยชน์

ชื่อกล่าวมันทั้งหมดจริง ๆ

ฉันมีเซิร์ฟเวอร์ OpenVPN (บน Ubuntu) และฉันสามารถเชื่อมต่อผ่านไคลเอนต์ของฉัน (Windows 8) ...

ปัญหาเริ่มต้นขึ้นเมื่อฉันพยายามกำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่าน VPN

ฉันได้เพิ่มpushธงใน server.conf:

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"

เมื่อฉันเชื่อมต่อจากไคลเอนต์ลูกค้าส่งออก:

Wed May 07 21:38:40 2014 SENT CONTROL [StretchVPN-CA]: 'PUSH_REQUEST' (status=1)
Wed May 07 21:38:41 2014 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 8.8.8.8,route-gateway <Remote Router IP>,ping 10,ping-restart 120,ifconfig 192.168.0.201 255.255.255.0'
Wed May 07 21:38:41 2014 OPTIONS IMPORT: timers and/or timeouts modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ifconfig/up options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route-related options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed May 07 21:38:41 2014 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed May 07 21:38:41 2014 open_tun, tt->ipv6=0
Wed May 07 21:38:41 2014 TAP-WIN32 device [Local Area Connection 4] opened: \\.\Global\{1F145805-92FC-454E-8FD9-0A6017DD4AD1}.tap
Wed May 07 21:38:41 2014 TAP-Windows Driver Version 9.9
Wed May 07 21:38:41 2014 Notified TAP-Windows driver to set a DHCP IP/netmask of 192.168.0.201/255.255.255.0 on interface {1F145805-92FC-454E-8FD9-0A6017DD4AD1} [DHCP-serv: 192.168.0.0, lease-time: 31536000]
Wed May 07 21:38:41 2014 Successful ARP Flush on interface [35] {1F145805-92FC-454E-8FD9-0A6017DD4AD1}
Wed May 07 21:38:46 2014 TEST ROUTES: 1/1 succeeded len=0 ret=1 a=0 u/d=up
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD <Remote Router IP> MASK 255.255.255.255 172.20.10.1
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 Initialization Sequence Completed

ฉันได้ลองใช้การตั้งค่าสถานะด้านลูกค้าเมื่อเปิดการเชื่อมต่อ:

openvpn --config "C:\Program Files\OpenVPN\config\client.ovpn" --redirect-gateway def1 --route-method exe

แต่ถึงกระนั้นเมื่อฉันไปที่ whatsmyip.org มันก็ยังบอกว่าลูกค้าของฉัน ip

มีใครมีปัญหานี้และจัดการเพื่อแก้ไขหรือไม่

ขอบคุณมาก


คุณลองpush "route 0.0.0.0 0.0.0.0"หรือคุ้นเคยเพื่อผลักดันเส้นทางหรือไม่ อย่าลืมเส้นทางกลับใน VPN!
lub

ใช่สิ่งนี้ทำโดยอัตโนมัติเมื่อมีการใช้การพุช "redirect-gateway def1" โดยอัตโนมัติ ... มันเพิ่ม 0.0.0.0 mask 127.0.0.0 และ 127.0.0.0 mask 127.0.0.0 (แซงเส้นทางเริ่มต้นโดยไม่ต้องลบเส้นทางที่มีอยู่แล้ว)
เพียงแค่ โชคดีจริงๆ

ฉันกังวลว่าคุณกำลังเรียกใช้ไคลเอนต์ในฐานะ "Run As Administrator" ใน windows! ปัญหานี้อาจเกิดขึ้นหากคุณเรียกใช้ไคลเอนต์ OVPN Windows โดยไม่ต้องเรียกใช้จากผู้ดูแลระบบ
Kousha

คำตอบ:


34

ฉันได้ทดสอบสิ่งนี้โดยใช้เซิร์ฟเวอร์ OpenVPN และตั้งค่าตัวเลือก redirect-gateway def1 ในไคลเอนต์และการกำหนดค่าเซิร์ฟเวอร์ทำงานได้ดี เมื่อฉันเข้าถึงwhatismyip.orgฉันจะเห็น IP ของเซิร์ฟเวอร์ OpenVPN ของฉัน ด้านล่างนี้เป็นค่าที่ลูกค้าใช้:

client
dev tun
proto udp
# THE IP OF THE REMOTE OPENVPN SERVER:
remote ip_address port
resolv-retry infinite
nobind
persist-key
persist-tun
# THE CSR FILE:
pkcs12 certificate.p12
ns-cert-type server
cipher AES-256-CBC
comp-lzo
redirect-gateway def1
verb 3

ฉันได้ทดสอบด้วยการต่อท้ายตัวเลือกการเปลี่ยนเส้นทาง - เกตเวย์ def1 ไปยังคำสั่ง openvpn และบรรลุผลลัพธ์เดียวกัน การกำหนดค่าเซิร์ฟเวอร์คือ:

port 1194
proto udp
dev tun

dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
# ENSURE THE DOMAIN NAME/FILENAME IS CORRECT:
cert /etc/openvpn/easy-rsa/keys/cert.crt
key /etc/openvpn/easy-rsa/keys/cert.key

server 10.5.3.0  255.255.255.0
# YOUR LOCAL SERVER IP HERE:
client-config-dir ccd
route 10.5.3.0 255.255.255.0
ifconfig-pool-persist ipp.txt
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun

status log/openvpn-status.log 5
status-version 2
log-append log/openvpn.log
verb 3  # verbose mode
management localhost port /etc/openvpn/management-password

# ROUTE THE CLIENT'S INTERNET ACCESS THROUGH THIS SERVER:
push "redirect-gateway def1"
push "remote-gateway vpn_server_ip"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 60

พยายามวันนี้ ... ยังไม่มีโชค ฉันสังเกตเห็นว่าคุณกำลังใช้อะแดปเตอร์ TUN แทนอะแดปเตอร์ TAP ... ฉันจะให้มันแทนและรายงานกลับมา: D
Just Lucky จริงๆ

1
Okie ดูเหมือนว่าการใช้อะแดปเตอร์ TUN จะทำงานได้ ... แม้ว่าฉันจะมีปัญหาเล็กน้อยกับเส้นทางที่ฉันต้องกำหนด ... ฉันใช้ 192.168.1.0/24 สำหรับเครือข่าย VPN และ 192.168.0.0/ 24 คือ LAN เซิร์ฟเวอร์ของฉัน ดังนั้นในการกำหนดค่าเซิร์ฟเวอร์ของฉันฉันได้เพิ่มroute 192.168.1.0 255.255.255.0และpush "route 192.168.0.0 255.255.255.0"แต่ลูกค้าของฉันไม่ได้รับการเข้าถึงเครือข่ายย่อยอื่น ๆ นอกเหนือจากมันเป็น 192.168.1.0/24 สุทธิ ... ฉันจะกระตุ้นรอบเล็กน้อยเพิ่มเติม
แค่โชคดีจริง ๆ

19

บางทีคุณลืมที่จะแก้ไข NAT ของคุณ? รันทั้ง 3 คำสั่งในฐานะรูท

คำสั่ง:

iptables -I FORWARD -i tun0 -o eth0 \
         -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT

iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
         -j ACCEPT

iptables -t nat -I POSTROUTING -o eth0 \
          -s 10.8.0.0/24 -j MASQUERADE

คำบรรยายภาพ:

  • tun0: การ์ดเครือข่าย VPN เสมือนของคุณ
  • eth0: การ์ดเครือข่ายปกติของคุณ
  • 10.8.0.0: บล็อกไอพีเครือข่าย VPN ของคุณ

1
ขั้นตอนการดัดแปลง NAT นี้สำคัญมาก ฉันไม่สามารถทำงานได้โดยไม่ต้องใช้คำสั่ง 3 ข้อ
Nitesh Kumar Anand

6
โปรดทราบว่าคำสั่งเหล่านี้จำเป็นต้องเรียกใช้บนเซิร์ฟเวอร์ openvpn ไม่ใช่ไคลเอนต์
Kem Mason

1
ฉันพบว่าการแก้ไขnatตารางเท่านั้นก็ทำงานบนเซิร์ฟเวอร์ของฉันด้วย
Ginhing

1
เราจำเป็นต้องคงกฎ iptables ไว้ในกรณีที่เซิร์ฟเวอร์ openVPN รีบูทหรือไม่
DWils

@DWils ใช่คุณต้องใส่ไว้ในสคริปต์เริ่มต้นบางส่วน ตรวจสอบคำถามและคำตอบนี้: askubuntu.com/questions/270693/…
Arne

1

หลังจากมองหาคำตอบอย่างหนักดูเหมือนว่าฉันจะแก้ปัญหานี้ได้บางส่วน แต่อย่างน้อยก็ง่ายมาก:

ฉันใช้แพ็คเกจ Xubuntu 14.04 และ OpenVPN จากแหล่งหลัก ในการตั้งค่า> ระบบ> เครือข่ายฉันแทนที่ที่อยู่ DNS ที่ติดตั้งไว้ล่วงหน้า127.0.1.1ด้วย Google 8.8.8.8และตอนนี้ฉันสามารถเห็นทราฟฟิกทั้งหมดที่ไหลผ่านเซิร์ฟเวอร์ VPN ได้

ในตารางของ Wireshark สตริงเช่น DNS ไม่อยู่: ข้อมูลทั้งหมดจะเหมือน TCP ผ่านช่องสัญญาณที่เข้ารหัส ฉันเห็นปริมาณการใช้ DHCP และ DNS เมื่อดูที่tun0(ภายในของโน้ตบุ๊ก) เมื่อฉันสำรวจwlan0ปริมาณการใช้งาน (ภายนอกระหว่างโน้ตบุ๊กและเราเตอร์ WiFi) ฉันได้รับแพ็คเกจ TCP สีเทาเท่านั้น

ฉันคิดว่ามันเกิดขึ้นเพราะ DNS-query ไม่จำเป็นในการถอดรหัสตัวอักษรต่อตัวเลขและมันจะอยู่ในกระแสข้อมูลทั่วไปเหมือนแพ็คเกจข้อมูลทั่วไป

ฉันจะดีใจที่ได้ทราบการพิจารณาของคุณมันจะไม่แปลกใจถ้าฉันผิดอย่างสมบูรณ์


ฉันลืม: วิธีนี้มีข้อดีอย่างหนึ่งที่ปฏิเสธไม่ได้ - ทำงานได้แม้ว่าเซิร์ฟเวอร์ VPN จะไม่สนับสนุนการเปลี่ยนเส้นทาง DNS
xrobot

โดยวิธีการที่เราสามารถทำได้หนึ่งเคล็ดลับ: ถ้าเราจะส่ง DNS- แบบสอบถาม DNS ผู้บริสุทธิ์ที่มองเห็นได้ผิดพลาดในบางครั้งทางอ้อมอาจเป็นการยืนยันความภักดีของเราต่อพี่ใหญ่
xrobot

1

เพิ่มคำสั่งต่อไปนี้ไปยังไฟล์การกำหนดค่าเซิร์ฟเวอร์:

push "redirect-gateway def1"

หากการตั้งค่า VPN ของคุณอยู่ในเครือข่ายไร้สายที่ซึ่งไคลเอนต์และเซิร์ฟเวอร์ทั้งหมดอยู่ในเครือข่ายย่อยไร้สายเดียวกันให้เพิ่มการตั้งค่าท้องถิ่น:

push "redirect-gateway local def1"

การกดตัวเลือกเปลี่ยนเส้นทางเกตเวย์ไปยังไคลเอนต์จะทำให้ปริมาณการรับส่งข้อมูลเครือข่าย IP ทั้งหมดที่เกิดขึ้นบนเครื่องไคลเอ็นต์ผ่านเซิร์ฟเวอร์ OpenVPN เซิร์ฟเวอร์จะต้องได้รับการกำหนดค่าให้จัดการกับทราฟฟิกนี้อย่างใดอย่างหนึ่งเช่นโดยการทำ NAT กับอินเทอร์เน็ตหรือการกำหนดเส้นทางผ่านพร็อกซี HTTP ของไซต์เซิร์ฟเวอร์

บน Linux คุณสามารถใช้คำสั่งเช่นนี้เพื่อ NAT การรับส่งข้อมูลไคลเอนต์ VPN ไปยังอินเทอร์เน็ต:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

คำสั่งนี้อนุมานว่า VPN subnet คือ 10.8.0.0/24 (นำมาจากคำสั่งเซิร์ฟเวอร์ในการกำหนดค่าเซิร์ฟเวอร์ OpenVPN) และอินเตอร์เฟสอีเทอร์เน็ตโลคัลคือ eth0

เมื่อใช้ redirect-gateway ลูกค้า OpenVPN จะกำหนดเส้นทางการสืบค้น DNS ผ่าน VPN และเซิร์ฟเวอร์ VPN จะต้องจัดการ สิ่งนี้สามารถทำได้โดยการผลักที่อยู่เซิร์ฟเวอร์ DNS ไปยังการเชื่อมต่อลูกค้าซึ่งจะแทนที่การตั้งค่าเซิร์ฟเวอร์ DNS ปกติของพวกเขาในช่วงเวลาที่ VPN ใช้งานอยู่ ตัวอย่างเช่น:

push "dhcp-option DNS 10.8.0.1"

จะกำหนดค่าไคลเอนต์ Windows (หรือไคลเอนต์ที่ไม่ใช่ Windows ด้วยสคริปต์พิเศษฝั่งไคลเอ็นต์) เพื่อใช้ 10.8.0.1 เป็นเซิร์ฟเวอร์ DNS ของพวกเขา ที่อยู่ใด ๆ ที่เข้าถึงได้จากลูกค้าสามารถใช้เป็นที่อยู่เซิร์ฟเวอร์ DNS


0

หากไคลเอนต์ OpenVPN ของคุณอยู่บน Windows 10 (หรือคล้ายกัน) มีปัญหาอื่นที่ต้องระวังลำดับการเชื่อมโยงของ NIC การตั้งค่าเซิร์ฟเวอร์ DNS ที่มีอยู่ในอะแดปเตอร์ LAN หรือ Wifi อาจมีความสำคัญมากกว่าการตั้งค่าเซิร์ฟเวอร์ DNS สำหรับช่องสัญญาณอินเทอร์เฟซดังนั้นแม้ว่าทุกอย่างจะถูกตั้งค่าอย่างถูกต้องจากมุมมอง OpenVPN Windows ยังคงใช้เซิร์ฟเวอร์ DNS ดั้งเดิม

คุณสามารถแก้ไขได้ตามที่อธิบายไว้ในโพสต์ฟอรัม Microsoft นี้

https://social.technet.microsoft.com/Forums/windowsserver/en-US/1cc5b647-6e51-482b-8998-ac5c3900938c/how-to-force-vpn-clients-to-use-the-dnsserver-from- พวกเขา-VPN อะแดปเตอร์ไม่-the-dnsserver จากที่พวกเขา? ฟอรั่ม = winserverNIS


ไม่ใช่คำตอบสำหรับคำถาม
pim

0

ฉันประสบปัญหาเดียวกันและพบว่าเมื่อใช้สคริปต์การตั้งค่า PiVPN สำหรับ Open VPN, การกำหนดค่าเซิร์ฟเวอร์มีบรรทัด:

กด "redirect-gateway def1 bypass-dhcp"

แล้ว. บนไคลเอ็นต์ IOS ทุกอย่างจะถูกส่งผ่านอุโมงค์โดยอัตโนมัติ (นั่นคือสิ่งที่บันทึกไว้)

บนไคลเอ็นต์ Tunnelblick คุณต้องเพิ่มบรรทัดนี้ใน client.ovpn บรรทัด:

redirect-gateway def1 bypass-dhcp

และมันควรจะทำงานได้อย่างสมบูรณ์แบบ อย่างน้อยก็ใน Mac ของฉัน

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