通过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的路由!
2014年

是的,当使用推“ redirect-gateway def1”时,这是自动完成的...它添加了0.0.0.0掩码127.0.0.0和127.0.0.0掩码127.0.0.0(超越默认路由而不删除已经存在的路由)
仅真幸运

我担心您是否在Windows中以“以管理员身份运行”身份运行客户端!如果您在没有管理员运行的情况下运行OVPN Windows客户端,则会发生此问题。
沙2014年

Answers:


35

我已经使用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

我还通过将redirect-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

今天尝试过...仍然没有运气。我注意到您使用的是TUN适配器,而不是TAP适配器...我会去做,然后回报:D
真幸运2014年

1
好的,使用TUN适配器似乎可以正常工作...尽管我对需要分配的路由感到有些困扰...我为VPN网络使用的是192.168.1.0/24,为192.168.0.0/ 24是我的服务器局域网。因此,在我的服务器配置中,我已经添加了route 192.168.1.0 255.255.255.0push "route 192.168.0.0 255.255.255.0"但是我的客户端无法访问除192.168.1.0/24网之外的任何其他子网……我还会再戳一点
真是幸运,真正的

19

也许您忘了修改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阻止

1
NAT修改步骤非常关键。如果不执行上述3条命令,我将无法正常工作。
Nitesh Kumar Anand

6
请注意,这些命令需要在openvpn服务器而不是客户端上运行。
凯姆·梅森

1
我发现只有修改nat表才能在我的服务器上运行。

1
如果重启openVPN服务器,我们是否需要坚持iptables规则?
DWils

@DWils是的,您需要将它们放入一些启动脚本中。检查这个Q&A:askubuntu.com/questions/270693/...
阿恩

1

经过一番苦苦寻找答案之后,看来我已经解决了这一问题,也许是部分解决了,但至少非常简单:

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

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

我认为这是因为字符到数字的解码不需要DNS查询,它像通常的数据包一样在公共流中传输。

我很高兴知道您的考虑,如果我完全错了也就不足为奇了


我忘记了:这种方法有一个无可争辩的优势-即使VPN服务器不支持DNS路由也可以使用。
xrobot 2014年

顺便说一句,我们可以做一个技巧:如果我们不时发送虚假的,无辜的DNS查询,那么间接证明了我们对“老大哥”的忠诚。
xrobot 2014年

1

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

push "redirect-gateway def1"

如果您的VPN设置是通过无线网络进行的,其中所有客户端和服务器都在同一无线子网中,请添加本地标志:

push "redirect-gateway local def1"

将重定向网关选项推送给客户端将导致源自客户端计算机的所有IP网络流量都通过O​​penVPN服务器。服务器将需要配置为以某种方式处理此流量,例如通过将其NAT到Internet或通过服务器站点的HTTP代理进行路由。

在Linux上,您可以使用以下命令将VPN客户端流量NAT到互联网:

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服务器地址。


0

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

您可以按照此Microsoft论坛帖子中的说明解决此问题。

https://social.technet.microsoft.com/Forums/windowsserver/zh-CN/1cc5b647-6e51-482b-8998-ac5c3900938c/how-to-force-vpn-clients-to-use-the-dnsserver-from-他们的VPN适配器不是他们的DNS服务器吗?论坛= winserverNIS


不是问题的答案
pim

0

我遇到了同样的问题,并发现将PiVPN安装脚本用于Open VPN时,服务器配置包含以下行:

推送“重定向网关def1旁路dhcp”

已经。在IOS客户端上,所有内容都会自动通过隧道进行路由(这就是日志所说的)。

在Tunnelblick客户端上,您需要在client.ovpn中添加以下行:

重定向网关def1旁路dhcp

它应该可以正常工作。至少在我的Mac上是这样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.