我有两台服务器,我可以通过 wireguard 访问其中一台。我有一个服务在第二台服务器上监听 4559 端口。我如何通过 iptables 将端口转发到第二台服务器。
[laptop] [server1] [server2]
10.10.0.1 (wireguard) -------> 10.10.0.2:4559 --------> 192.168.1.20:4559
答案1
要将 TCP 端口 4559 从服务器 1 上的 WireGuard 接口转发到服务器 2,请将其添加到[Interface]
服务器 1 的 WireGuard 配置部分:
PreUp = sysctl -w net.ipv4.ip_forward=1
PreUp = iptables -t nat -A PREROUTING -i %i -p tcp --dport 4559 -j DNAT --to-destination 192.168.1.20
PreUp = iptables -t nat -A POSTROUTING ! -o %i -j MASQUERADE
PostDown = iptables -t nat -D PREROUTING -i %i -p tcp --dport 4559 -j DNAT --to-destination 192.168.1.20
PostDown = iptables -t nat -D POSTROUTING ! -o %i -j MASQUERADE
如果您尝试转发的是 UDP 端口 4559,则替换-p tcp
为。-p udp
这样就可以从笔记本电脑以 的身份访问 server2 10.10.0.2:4559
;但您的特定场景听起来很像常见的“点到站点”访问模式——笔记本电脑是远程“点”,而 server1 提供对更大“站点”的访问。使用这种模式,您通常会在站点配置路由器以10.10.0.0/24
直接通过 server1(无 NAT)路由您的 WireGuard 子网(如 ),或者在 server1 上设置 SNAT 以伪装来自 WireGuard 到站点的数据包。
使用上述任何一种点到站点方法,您都可以从笔记本电脑访问 server2 上的端口 4559,如下所示192.168.1.20:4559
(就像笔记本电脑物理上位于站点的 LAN 上一样)。以下是您的WireGuard 点到站点路由选项,如果您想进一步探索这些选项,请参阅分步指南的链接。