通过OpenVPN路由所有流量

是的,这个问题已被问了一百遍,我到处搜索,都无济于事。

标题说明了一切。

我有一个OpenVPN服务器(在ubuntu上),我可以通过我的客户端连接到它(Windows 8)…

当我尝试通过VPN路由所有流量时,问题就开始了。

我在server.conf中添加了push标志:

 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 ,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  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。

有没有人有这个问题并设法解决它?

非常感谢

我已经使用OpenVPN服务器对此进行了测试,并在客户端和服务器配置中设置了redirect-gateway def1选项。 当我访问whatismyip.org时,我看到了我的OpenVPN服务器的IP。 以下是我使用的客户端配置:

 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 

我还测试了将openirect-gateway 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 

也许你忘了修改你的NAT? 以root身份运行这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网络IP块

在努力寻找答案之后,似乎我已经解决了这个问题,可能是部分问题,但至少非常简单:

我从主要来源使用Xubuntu 14.04和OpenVPN包。 在设置>系统>网络中 ,我用Google的8.8.8.8替换了预安装的DNS地址127.0.1.1 ,现在我可以看到通过VPN服务器的所有流量。

在Wireshark的表中,不存在DNS这样的字符串:所有数据都像TCP一样通过加密通道。 当我查看tun0 (笔记本电脑的内部)时,我可以看到DHCP和DNS流量。 当我探索wlan0流量(笔记本和WiFi路由器之间的外部)时,我只得到灰色TCP包。

我认为这种情况正在发生,因为在字符到数字解码中不需要DNS查询,并且它像通常的数据包一样进入公共流。

我很高兴知道你的考虑因素,如果我完全错了就不会感到惊讶

如果您的OpenVPN客户端在Windows 10(或类似)上,则需要注意另一个问题,即NIC的绑定顺序。 LAN或Wifi适配器上的现有DNS服务器设置可能优先于隧道接口的DNS服务器设置,因此即使从OpenVPN的角度来看,所有内容都是核心设置,Windows仍继续使用原始DNS服务器。

您可以按照此Microsoft论坛post中的说明修复此问题。

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-适配器不是最的dnsserver从-他们?论坛= winserverNIS

将以下指令添加到服务器配置文件:

 push "redirect-gateway def1" 

如果您的VPN设置是通过无线网络,所有客户端和服务器位于同一无线子网上,请添加本地标志:

 push "redirect-gateway local def1" 

将redirect-gateway选项推送到客户端将导致源自客户端计算机的所有IP网络流量通过OpenVPN服务器。 服务器需要配置为以某种方式处理此流量,例如通过将其NAT连接到Internet,或通过服务器站点的HTTP代理路由它。

在Linux上,您可以使用诸如此类的命令来NAT VPN到Internet的客户端流量:

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

此命令假定VPN子网为10.8.0.0/24(取自OpenVPN服务器配置中的server指令),并且本地以太网接口为eth0。

当使用重定向网关时,OpenVPN客户端将通过VPN路由DNS查询,VPN服务器将需要处理它们。 这可以通过将DNS服务器地址推送到连接客户端来实现,这些客户端将在VPN处于活动状态期间替换其正常的DNS服务器设置。 例如:

 push "dhcp-option DNS 10.8.0.1" 

将Windows客户端(或具有一些额外客户端脚本的非Windows客户端)配置为使用10.8.0.1作为其DNS服务器。 可以从客户端访问的任何地址都可以用作DNS服务器地址。