OpenVPN:stream量redirect不工作

tl; dr (在用@krisFRdebugging几个小时后):至less在Debian 8下,从不使用虚拟接口(eth0:1)用于OpenVPN,而是应用新的debian iproute2方法(手动方法): https:// wiki .debian.org / NetworkConfiguration#iproute2_method 。 它会很好地路由stream量。


我试图在所有客户端stream量应该通过隧道发送的机器上设置OpenVPN,所以这是我的服务器configuration的一部分:

 local xxx243 port 443 proto udp dev tun server 172.31.1.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" 

和我的客户端configuration:

 pull resolv-retry infinite mute-replay-warnings redirect-gateway def1 script-security 1 

客户端能够连接到VPN,它可以在172.31.1.1 ping VPN主机,但是如果我尝试通过域或IP ping google.com Request timeout for icmp_seq 0消息的Request timeout for icmp_seq 0

什么可能导致这个? 注意,我已经卸载了任何防火墙,我目前正在设置IPTables为:

 iptables -A INPUT -i eth0:1 -m state --state NEW -p udp --dport 443 -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -o eth0:1 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0:1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 172.31.1.0/24 -o eth0:1 -j MASQUERADE iptables -A OUTPUT -o tun+ -j ACCEPT 

谢谢。


所以我试图ping客户端213.30.5.46 (谷歌的IP之一),并没有工作,但是我得到了这样的结果:

监听传出的VPN IP(eth0:1): tcpdump -i eth0 -t host xxx243

 IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 113 IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145 IP vpn.exampledomain.com.https > [CLIENT_IP x..].51060: UDP, length 81 IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145 IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145 IP [CLIENT_IP x..].51060 > vpn.exampledomain.com.https: UDP, length 145 

同时,在tun0上监听,我得到了这个: tcpdump -i tun0

 23:40:39.864798 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 0, length 64 23:40:40.925951 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 256, length 64 23:40:41.886679 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 512, length 64 23:40:42.906125 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 17942, seq 768, length 64 

这里是iptables -L -n -v的输出:

 Chain INPUT (policy ACCEPT 34772 packets, 2265K bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- eth0:1 * 0.0.0.0/0 0.0.0.0/0 state NEW udp dpt:443 13 1092 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1437 96985 ACCEPT all -- tun+ * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- tun+ eth0:1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT all -- eth0:1 tun+ 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED Chain OUTPUT (policy ACCEPT 32574 packets, 7919K bytes) pkts bytes target prot opt in out source destination 13 1092 ACCEPT all -- * tun+ 0.0.0.0/0 0.0.0.0/0 

注意: /proc/sys/net/ipv4/ip_forward设置为1


目标tcpdump -i eth0:1 -t host 213.30.5.46同时ping目的地:

 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0:1, link-type EN10MB (Ethernet), capture size 262144 bytes IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 0, length 64 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 256, length 64 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 512, length 64 IP 172.31.1.10 > cache.google.com: ICMP echo request, id 16920, seq 768, length 64 

客户端上没有显示,ping最终超时。


OpenVPN local xxx243使用的IP地址在eth0之后立即在\etc\network\interfaceseth0:1 ,如下所示:

  auto eth0:1 iface eth0:1 inet static address xxx243 gateway xxx129 netmask 255.255.255.128 dns-nameservers xxx4 xxx104 

正如你所说,我们一起花了几个小时来debugging这个…

关于我们所做的所有testing以及我们检索的所有跟踪,最终看来我们正在经历关于虚拟接口eth0:1一些奇怪的行为。

例如: http : //lartc.org/howto/lartc.iproute2.html

大多数Linux发行版和大多数UNIX发行版目前使用的是古老的arp,ifconfig和route命令。 当这些工具工作时,它们在Linux 2.2及更高版本下显示出一些意外的行为。 例如,GRE隧道是当今路由的一个组成部分,但需要完全不同的工具。

使用iproute2,隧道是工具集的一个组成部分。

我们决定切换到iproute2 (至less试一试)修改/etc/network/interfaces文件来改变分配多个IP到eth0接口的方式。

之后,一切都很好,工作!

iproute2例子:

 auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.1.42 netmask 255.255.255.0 gateway 192.168.1.1 iface eth0 inet static address 192.168.1.43 netmask 255.255.255.0 

关于iproute2更多信息在这里: