我正在尝试通过 OpenVPN 将两个网络连接在一起。
网关可以相互 ping 通,但它们无法访问其所加入网络上的其他计算机。日志未显示任何错误,并且连接已建立。
我遗漏了什么?似乎很多人因为各种原因遇到了这个问题,但尝试了 50 多次后,我放弃了,决定问一下 :)
网络 1:
dev tun port 1194 ifconfig 10.8.222.40 10.8.222.41 route 10.2.1.0 255.255.255.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun user nobody group nobody secret /etc/openvpn/static.key
ip route default via 10.0.1.1 dev eth0 10.0.1.0/27 dev eth0 proto kernel scope link src 10.0.1.9 10.2.1.0/24 via 10.8.222.41 dev tun0 10.3.0.0/24 via 10.3.0.2 dev tun2 10.3.0.2 dev tun2 proto kernel scope link src 10.3.0.1 10.8.222.41 dev tun0 proto kernel scope link src 10.8.222.40 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
网络 2
dev tun port 1194 remote my_ext_ip 1194 ifconfig 10.8.222.41 10.8.222.40 route 10.0.0.0 255.254.0.0 vpn_gateway comp-lzo keepalive 10 60 persist-key persist-tun user nobody group nobody secret /etc/openvpn/static.key
ip route default via 10.2.1.1 dev eth0 10.0.0.0/15 via 10.8.222.40 dev tun0 10.2.1.0/24 dev eth0 proto kernel scope link src 10.2.1.9 10.8.222.40 dev tun0 proto kernel scope link src 10.8.222.41 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1 172.27.224.0/22 dev as0t0 proto kernel scope link src 172.27.224.1 172.27.228.0/22 dev as0t1 proto kernel scope link src 172.27.228.1 172.27.232.0/22 dev as0t2 proto kernel scope link src 172.27.232.1 172.27.236.0/22 dev as0t3 proto kernel scope link src 172.27.236.1
更新:
以下是我所拥有的 iptables 内容:
两个网络:
iptables -I FORWARD -i eth0 -o tun0 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD -i tun0 -o eth0 -m conntrack --ctstate NEW -j ACCEPT
网络 1:
iptables -t nat -A POSTROUTING -s "10.0.0.0/15" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.0.0.0/15 -d 0.0.0.0/0 -j ACCEPT
网络 2:
iptables -t nat -A POSTROUTING -s "10.2.1.0/24" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.2.1.0/24 -d 0.0.0.0/0 -j ACCEPT
\
更新 2:
进入隧道: # tcpdump -i tun0 listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 01:01:15.181262 IP ip-10-8-222-41.ec2.internal > ip-10-0-1-5.ec2.internal: ICMP echo request, id 28767, seq 1, length 64
退出隧道: # tcpdump -i tun0 listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 01:03:44.304930 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28784, seq 1, length 64
交换接口 # tcpdump -i eth0 01:08:56.093291 IP 10.8.222.41 > 10.0.1.5: ICMP echo request, id 28785, seq 3, length 64
答案1
解决了!
tcpdump 让我看到 iptables 转发的数据包来源是 10.8.222.41/32
因此添加
iptables -t nat -A POSTROUTING -s "10.8.222.41/32" -o "eth0" -j MASQUERADE iptables -A FORWARD -p tcp -s 10.8.222.41/32 -d 0.0.0.0/0 -j ACCEPT
问题解决了!
现在两个网关都可以 ping 对方网络中的服务器。现在我需要弄清楚如何允许两个网络中的所有计算机都这样做,但这是另一个问题...
答案2
因此从你的 ip route 输出来看,你的
eth0 at Network 1 is 10.0.1.0 with mask 255.255.255.224
eth0 at Network 2 is 10.2.1.0 with mask 255.255.255.0
因此,我将编辑网络 1 机器上的 openvpn conf 以使其内容如下:
route 10.2.1.0 255.255.255.0 #this is the remote network I want to see
网络 2 机器上的 openvpn conf 内容如下:
route 10.0.1.0 255.255.255.224 #this is the remote network I want to see
这应该会显示正确的路由。另外,不必担心在路由行末尾添加 vpn_gateway 参数,因为没有必要。默认情况下,它会将隧道的另一端添加为网关。