我们正在为运行在云中的一些服务器设置一个OpenVPN服务器。 我们被困在一个连接问题,VPN服务器的局域网上的主机可以ping VPN客户端,但事实并非如此。
VPN客户端可以在其VPN地址上ping VPN服务器,但不能在其LAN地址上。
tcpdump显示来自客户端的ping数据包到达主机并发出回复的证据,但由于某种原因,回复永远不会到达VPN服务器或客户端上的tun0接口。 相反,根据tcpdump,在所有预期的接口上可以看到从VPN服务器的LAN到VPN客户端的ping请求stream量。
下面给出了我们的configuration和故障排除的详细描述。
问题似乎与从服务器networking上的地址转发回客户端networking有关。 对我来说真的很奇怪的是,局域网发起的ping可以完成往返,但是客户端发起的ping似乎在VPN服务器的tun0和eth1接口之间的某处丢失。
我们缺less什么?
3主机:
这两台服务器都是运行RHEL 5.7的虚拟机。 我认为(但我不完全确定)虚拟主机环境是VMWare。
但:
对于10.11.11.7和10.8.0.22之间的pingtesting:
对于10.11.11.2到10.8.0.22之间的pingtesting:
对于10.8.0.22到10.11.11.2之间的pingtesting:
对于10.8.0.22到10.11.11.7之间的pingtesting:
在VPN服务器上启用了ip_fowarding在VPN服务器上,除了面向互联网的接口eth0以外的所有接口都禁用了rp_filter。
为了debugging潜在的问题,iptables已经在客户端禁用了(默认的ACCEPT)规则。
我已经在每个主机上包含了相关接口的路由-n和ifconfig转储。
$ /sbin/route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.11.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0 xxxx 0.0.0.0 255.255.248.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 xxxx 0.0.0.0 UG 0 0 0 eth0 $ find /proc/sys/net -name 'rp_filter' | while read f > do echo $f $(cat $f) > done /proc/sys/net/ipv4/conf/tun0/rp_filter 0 /proc/sys/net/ipv4/conf/eth1/rp_filter 0 /proc/sys/net/ipv4/conf/eth0/rp_filter 1 /proc/sys/net/ipv4/conf/lo/rp_filter 0 /proc/sys/net/ipv4/conf/default/rp_filter 0 /proc/sys/net/ipv4/conf/all/rp_filter 0 $ cat /proc/sys/net/ipv4/ip_forward 1 $ sudo /sbin/iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination $ /sbin/ifconfig -a eth0 Link encap:Ethernet HWaddr DE:AD:BE:A6:28:21 inet addr:xxxx Bcast:xxxx Mask:255.255.248.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:233929 errors:0 dropped:0 overruns:0 frame:0 TX packets:24776 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27881415 (26.5 MiB) TX bytes:30534780 (29.1 MiB) eth1 Link encap:Ethernet HWaddr DE:AD:BE:3B:24:48 inet addr:10.11.11.2 Bcast:10.11.11.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4929 errors:0 dropped:0 overruns:0 frame:0 TX packets:10209 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:423658 (413.7 KiB) TX bytes:863546 (843.3 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:11992 errors:0 dropped:0 overruns:0 frame:0 TX packets:11992 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:34820967 (33.2 MiB) TX bytes:34820967 (33.2 MiB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 PtP:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:69 errors:0 dropped:0 overruns:0 frame:0 TX packets:57 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:5796 (5.6 KiB) TX bytes:4788 (4.6 KiB) $ uname -a Linux vhost0273 2.6.18-274.el5 #1 SMP Fri Jul 8 17:36:59 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux $ ping -c1 10.8.0.22 -w 1 PING 10.8.0.22 (10.8.0.22) 56(84) bytes of data. 64 bytes from 10.8.0.22: icmp_seq=1 ttl=64 time=145 ms --- 10.8.0.22 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 145.676/145.676/145.676/0.000 ms $ ping -c1 10.11.11.7 -w 1 PING 10.11.11.7 (10.11.11.7) 56(84) bytes of data. 64 bytes from 10.11.11.7: icmp_seq=1 ttl=64 time=0.794 ms --- 10.11.11.7 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.794/0.794/0.794/0.000 ms
$ /sbin/ifconfig -a eth0 Link encap:Ethernet HWaddr DE:AD:BE:7F:45:72 inet addr:10.11.11.7 Bcast:10.11.11.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:33897 errors:0 dropped:0 overruns:0 frame:0 TX packets:38294 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2536157 (2.4 MiB) TX bytes:8910725 (8.4 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:77779 errors:0 dropped:0 overruns:0 frame:0 TX packets:77779 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 $ /sbin/route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.11.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.8.0.0 10.11.11.2 255.255.255.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 10.11.11.2 0.0.0.0 UG 0 0 0 eth0 $ ping -c1 10.8.0.1 -w 1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=0.516 ms --- 10.8.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.516/0.516/0.516/0.000 ms $ ping -c1 10.8.0.22 -w 1 PING 10.8.0.22 (10.8.0.22) 56(84) bytes of data. 64 bytes from 10.8.0.22: icmp_seq=1 ttl=63 time=146 ms --- 10.8.0.22 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 146.913/146.913/146.913/0.000 ms $ ping -c1 10.11.11.2 -w 1 PING 10.11.11.2 (10.11.11.2) 56(84) bytes of data. 64 bytes from 10.11.11.2: icmp_seq=1 ttl=64 time=0.775 ms --- 10.11.11.2 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.775/0.775/0.775/0.000 ms
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.22 PtP:10.8.0.21 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) $ /sbin/route -n | grep ^10 10.8.0.21 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.8.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 10.0.1.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan0 10.1.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 10.11.11.0 10.8.0.1 255.255.255.0 UG 0 0 0 tun0 $ ping 10.8.0.1 PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data. 64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=145 ms $ ping 10.8.0.2 -w 1 PING 10.8.0.2 (10.8.0.2) 56(84) bytes of data. --- 10.8.0.2 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms $ ping 10.11.11.2 -w 1 PING 10.11.11.2 (10.11.11.2) 56(84) bytes of data. --- 10.11.11.2 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms $ ping 10.11.11.7 -w 1 PING 10.11.11.7 (10.11.11.7) 56(84) bytes of data. --- 10.11.11.7 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 999ms
这个问题的根本原因是一些隐含的默认路由,在/ sbin / route显示的表中不可见,但在/ sbin / ip route和/ sbin / ip规则显示的表中可见。
然后这些表格显示出这样一个规则:
default table route_eth0 via 10.11.11.1 dev eth0
压倒了这个规则:
10.8.0.0 10.11.11.2 255.255.255.0 UG 0 0 0 eth0
通过编辑/ etc / sysconfig / network-scripts / route-eth0(推测是使用/ sbin / ip route,尽pipe在这种情况下手动完成),我能够解决这个问题。
所以,我从中得到的教训是,不能依赖/ sbin / route来给你一个Linux有效路由规则的准确画面,为此目的最好使用/ sbin / ip。
感谢ptman,对这个问题的回答帮助我看到了光明。 谢谢ptman!
你的iptables规则呢? 他们看起来很空虚。
我使用以下规则,但我不确定它是否能够解决您确切的问题:
#允许TUN接口连接到OpenVPN服务器 iptables -A INPUT -i tun + -j ACCEPT #允许TUN接口连接通过其他接口转发 iptables -A FORWARD -i tun + -j ACCEPT iptables -A FORWARD -o tun + -j ACCEPT #允许TUN接口连接退出 iptables -A OUTPUT -o tun + -j ACCEPT #我们希望允许从OpenVPN隧道进行路由 $ IPTABLES -t nat -A POSTROUTING -o eth1 -s 10.8.1.0/255.255.255.0 -j MASQUERADE $ IPTABLES -A FORWARD -i tun + -o eth1 -s 10.8.1.0/255.255.255.0 -j ACCEPT
在网关上,您需要一个路由条目来将10.8.1.0/24的stream量引导到openvpn服务器。
在10.8.1.0/24子网的openvpn服务器stream量上使用openvpn服务器tun接口的IP地址,例如10.8.1.2。 这虽然应该已经由openvpn本身configuration。
更新:我不得不编辑一些东西,我在这里使用2个openvpn服务器,也与海誓山盟沟通的设置。 所以我混淆了一些与你的情况无关的东西。