我在这个网站和其他地方查看了很多不同的页面,但我找不到任何解决这个问题的方法,我花了一个下午的时间。
我想在 VPS CentOS 6.5 机器上设置 OpenVPN 服务器。我已经成功地做到了,我能够建立到服务器的隧道,ping 远程网关 IP 地址等。但是我无法从 VPN 访问 Internet。经过大量时间对 OpenVPN 配置进行故障排除后,我认为问题出在 VPS 本身,因为 tun0 接口本身无法访问 Internet(因此它不能很好地路由它!)。
如果我尝试从 tun0 (OpenVPN) 接口访问 Internet,它不起作用:
[root@vps3580 ~]# ping -I tun0 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 10.44.3.1 tun0: 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5301ms
如果我从默认接口 (venet0:0) ping 它工作正常:
[root@vps3580 ~]# ping -I venet0:0 8.8.8.8
Warning: cannot bind to specified iface, falling back: No such device
PING 8.8.8.8 (8.8.8.8) from 37.187.42.146 venet0:0: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=10.0 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=49 time=10.0 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1793ms
rtt min/avg/max/mdev = 10.038/10.056/10.074/0.018 ms
这就是我的ifconfig
样子(我修改了这篇文章的公共 IP):
[root@vps3580 ~]# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5013190 errors:0 dropped:0 overruns:0 frame:0
TX packets:5013190 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:677461812 (646.0 MiB) TX bytes:677461812 (646.0 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.44.3.1 P-t-P:10.44.3.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:2004 errors:0 dropped:0 overruns:0 frame:0
TX packets:1287 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:223030 (217.8 KiB) TX bytes:329848 (322.1 KiB)
venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: 2001:41d0:52:100::e84/56 Scope:Global
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
RX packets:1027193 errors:0 dropped:0 overruns:0 frame:0
TX packets:878383 errors:0 dropped:318 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:508829024 (485.2 MiB) TX bytes:133008265 (126.8 MiB)
venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:73.83.42.22 P-t-P:73.83.42.22 Bcast:37.187.43.255 Mask:255.255.252.0
UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1
还有我的路线:
[root@vps3580~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.44.3.2 * 255.255.255.255 UH 0 0 0 tun0
10.44.3.0 10.44.3.2 255.255.255.248 UG 0 0 0 tun0
73.83.42.22 * 255.255.252.0 U 0 0 0 venet0
link-local * 255.255.0.0 U 0 0 0 *
link-local * 255.255.0.0 U 1002 0 0 venet0
198.18.0.0 * 255.254.0.0 U 0 0 0 *
172.16.0.0 * 255.240.0.0 U 0 0 0 *
default * 255.0.0.0 U 0 0 0 *
default * 0.0.0.0 U 0 0 0 venet0
我怀疑其中一条路线有问题,但我不知道是什么。当traceroute
我得到这个时:
[root@vps3580~]# traceroute -i tun0 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
10 * * *
[...]
30 * *
我不熟悉“tun”接口,我已经为此苦苦挣扎了几个小时,真的希望有人能帮我解决这个问题!
编辑:防火墙规则:
[root@vps3580~]# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i venet0 -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -i venet0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -i venet0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -i venet0 -p udp -m udp --dport 1194 -m state --state NEW -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.44.3.0/29 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
我找到了答案。事实上,这是一个防火墙问题。OpenVZ 不支持 MASQUERADE,你需要使用 SNAT。
这不起作用:
但这会起作用:
你检查防火墙配置了吗?
iptables -S
在
iptables
中,如果您将 INPUT 或 OUTPUT 默认策略设置为 DROP,您将需要打开端口并允许使用 iptables 规则访问设备。CentOS wiki 有完整的 iptables 演练。
2014-04-16编辑:您想通过 tun0 路由所有流量吗?
在 CentOS 7 上工作