所以我有一个 VPS 和 Dedi 服务器,都运行 Debian 9.9。
139.99.x.x: VPS
139.89.x.x: DEDI
Dedi 服务器运行游戏服务器但不能直接访问,我想首先通过我的 VPS 路由所有流量(obv 以掩盖游戏服务器的 IP)。
我想使用 GRE 隧道来实现这一点。因此,我在 dedi 上执行了以下操作:
ip tunnel add gre1 mode gre remote 139.99.x.x local 139.89.x.x ttl 255
ip link set gre1 up
ip addr add 10.10.10.1/24 dev gre1
在 VPS 上:
ip tunnel add gre1 mode gre remote 139.89.x.x local 139.99.x.x ttl 255
ip link set gre1 up
ip addr add 10.10.10.2/24 dev gre1
这有效,我可以双向 ping。我还在 sysctl.conf 中启用了 ip 转发。
现在我想让到达 139.99.xx:27015 的 VPS 的外部流量通过隧道并到达 DEDI 上的 10.10.0.1:27015。
所以我的尝试是这样的,这是我从这里的另一个问题中得到的,在 VPS 上:
iptables -t nat -A PREROUTING -p tcp -m tcp -m multiport -d 139.99.x.x --dports 27015 -j DNAT --to-destination 10.10.10.1
iptables -t nat -A POSTROUTING -o gre1 -p tcp -m tcp -m multiport -d 10.10.10.1 --dports 27015 -j SNAT --to-source 10.10.10.2
有人能给我提供一个可行的示例吗?
谢谢!
答案1
您的设置正确,一切正常。遇到任何问题,您都应使用以下步骤来解决问题:
使用命令检查 nat 表中的 iptables 规则计数器
iptables-save -c -t nat
。规则的计数器应为非零。如果 nat 表中还有其他规则,则规则的顺序很重要。如果计数器为零,请运行
tcpdump
以确保有传入流量。另外,您应该在防火墙中允许转发数据包。执行此操作的通用规则是:
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT
。在 DEDI 服务器上运行 tcpdump(
tcpdump -ni gre1
)以确保有来自 VPS 的重定向数据包。在 VPS 上您应该允许传入数据包:
iptables -A INPUT -i gre1 -p tcp --dport 27015
。
附言确保您的游戏服务器使用 tcp。大多数游戏使用 udp,因为它最适合游戏。
答案2
我遇到了同样的问题。我可以在隧道位置之间 ping 通,端口显示为打开状态。我仍然无法接受从互联网到隧道服务器的入站流量。当我尝试从我的个人计算机 ping IP 时,tcpdump -i tun0 没有显示任何流量。我尝试添加任意数量的 iptables 和防火墙规则,但无济于事。任何帮助都是好主意。
这是我刚刚添加的 IP 表规则:
iptables -A 输入 -i tun0 -p tcp --dport 25
并且端口 25 没有来自外部源的响应:主机已启动。
港口国服务 25/tcp 过滤 smtp