这个问题有背景信息:如何让 Google Cloud VM 将 Minecraft 流量转发到 OpenVPN 客户端?
我有一个 OpenVPN 网络,目前设置为“tap”模式,以 Google VM 作为服务器,Raspberry Pi 3 客户端运行 Minecraft 服务器。我想通过将 Pi 4 添加为新的 openVPN 客户端来用 Pi 4 替换 Pi 3。
我成功为所有机器设置了 openVPN 配置,并且 Pi 4 可以 ping 云 VM 和其他客户端,反之亦然。
为了从 Pi 3 转移到 Pi 4,我执行了:
# iptables -F
# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
# iptables -A FORWARD -p tcp -d 10.8.0.6 --dport 25565 -j ACCEPT
# iptables -A POSTROUTING -t nat -s 10.8.0.6 -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -d 10.8.0.6 -o tap0 -j MASQUERADE
请注意,Pi 3 的本地 IP 是10.8.0.3
,Pi 4 的本地 IP 是10.8.0.6
我使用 保存了设置iptables-save
并重新启动。但是,nmap 显示端口 25565 对于虚拟机而言“已关闭”,并且我无法连接 minecraft 客户端。
10.8.0.3
当我用而不是重做上述步骤10.8.0.6
并使用 Pi 4 的 Pi 3 配置文件时,我能够连接。
以下是输出iptables-save
:
# Generated by iptables-save v1.6.0 on Sun Dec 1 08:08:18 2019
*filter
:INPUT ACCEPT [269:342903]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [246:49036]
-A FORWARD -d 10.8.0.6/32 -p tcp -m tcp --dport 25565 -j ACCEPT
COMMIT
# Completed on Sun Dec 1 08:08:18 2019
# Generated by iptables-save v1.6.0 on Sun Dec 1 08:08:18 2019
*nat
:PREROUTING ACCEPT [26:6833]
:INPUT ACCEPT [7:482]
:OUTPUT ACCEPT [22:1420]
:POSTROUTING ACCEPT [22:1420]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.6:25565
-A POSTROUTING -s 10.8.0.3/32 -o eth0 -j MASQUERADE
-A POSTROUTING -d 10.8.0.3/32 -o tap0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.6/32 -o eth0 -j MASQUERADE
-A POSTROUTING -d 10.8.0.6/32 -o tap0 -j MASQUERADE
COMMIT
# Completed on Sun Dec 1 08:08:18 2019
diff
除了私钥和时间戳之外,两个配置文件还包括:
216c216
< DNS:rpi4
---
> DNS:picraft
答案1
因为您还没有刷新nat
表,并且规则的匹配部分DNAT
是相同的,所以较早附加的规则 ( --to-destination 10.8.0.3:25565
) 将有效,而较晚附加的规则 ( --to-destination 10.8.0.6:25565
) 将被忽略。
因此,不仅仅是iptables -F
(-t filter
),还有iptables -F -t nat
(或iptables-restore
来自/usr/share/iptables/empty-filter.rules
和/usr/share/iptables/empty-nat.rules
)。