我在 pi 上设置了 openvpn,但遇到了一个小问题。我可以连接到 VPN 服务器并正常 ping 通它,也可以连接到本地网络上的其他机器。但是,当连接到 VPN 时,我无法访问外部世界(通过名称查找或 IP)。
详细信息如下:
在服务器上的tun0接口:
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.8.0.1 netmask 255.255.255.255 destination 10.8.0.2
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我可以 ping 通它:
# ping -c 3 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=0.159 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=0.155 ms
64 bytes from 10.8.0.1: icmp_seq=3 ttl=64 time=0.156 ms
--- 10.8.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
路由表
# ip route show
default via 192.168.1.1 dev eth0 metric 204
10.8.0.0/24 via 10.8.0.2 dev tun0
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.6 metric 204
我也有 IP 流量转发:
net.ipv4.ip_forward = 1
我没有任何自定义 iptables 规则(据我所知)。
在客户端上,我可以连接到 VPN。这是我的 tun0:
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.8.0.6 netmask 255.255.255.255 destination 10.8.0.5
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21 bytes 1527 (1.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
在客户端上我可以 ping 它:
sudo ping -c 3 10.8.0.6
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=64 time=0.035 ms
64 bytes from 10.8.0.6: icmp_seq=2 ttl=64 time=0.026 ms
64 bytes from 10.8.0.6: icmp_seq=3 ttl=64 time=0.032 ms
--- 10.8.0.6 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.026/0.031/0.035/0.003 ms
我可以从客户端 ssh 到我的 LAN(192.168.1.x)上的另一台服务器,但是我无法访问 LAN 之外的任何东西。
以下是此要点底部的一些服务器日志:https://gist.github.com/coleifer/6ef95c3008f130249933/edit
说实话,我没主意了!我不认为是我的客户端出了问题,因为我的笔记本电脑和手机(有 openvpn 客户端)都表现出同样的行为。
在使用 debian 之前,我已经在这个 pi 上安装了 OpenVPN,并且它可以工作,所以我不认为这是我的路由器,但当然一切皆有可能。
答案1
我通过添加两个 iptables 规则解决了这个问题:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -a FORWARD -i tun0 -j ACCEPT