如何使用 iptables 在接口之间正确转发 TCP 和 UDP 流量?

如何使用 iptables 在接口之间正确转发 TCP 和 UDP 流量?

服务器A

  • eth0 网络接口
  • wg0 vpn接口10.66.66.1

服务器B

  • wg0 vpn接口 10.66.66.2

如何使用 iptables 将流量从 eth0 转发到 wg0 10.66.66.2?我想将以下 TCP 和 UDP 端口转发到服务器B

TCP:2302, 27015-27030, 27036-27037 UDP:2302, 4380, 27000-27031, 27036

我已经尝试过转发所有短信,但无济于事。

sudo iptables -A FORWARD --in-interface eth0 -j ACCEPT
sudo iptables --table nat -A POSTROUTING --out-interface wg0 -j MASQUERADE

编辑:

我是否iptables -L需要介意传统 iptables 与“正常” iptables 之间的歧义

[root@vmd40065 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# Warning: iptables-legacy tables present, use iptables-legacy to see them

[root@vmd40065 ~]# iptables-legacy -L
bash: iptables-legacy: command not found...

答案1

IP 转发

如何使用 iptables 将流量从 eth0 转发到 wg0 10.66.66.2?

您无法使用 iptables (单独) 来执行此操作。使用 iptables,您可以进行过滤和 NAT,但 iptables 不执行数据包转发。

要转发传入的数据包,您需要在内核中启用 IP 转发。sysctl net.ipv4.ip_forward您可以使用该命令检查 IP 转发是否已启用。

引自Linux 内核文档

0 - disabled (default)
not 0 - enabled

Forward Packets between interfaces.

您可以通过执行 来启用此功能sysctl net.ipv4.ip_forward=1,但此更改不是永久性的,它会在重启时重置。要使其永久生效,您需要net.ipv4.ip_forward = 1在 sysctl 配置文件之一(例如/etc/sysctl.conf)中添加配置条目 ( )。请参阅man sysctl.conf了解配置文件的完整列表。

如果你想限制转发的内容,你可以向你的向前规则,例如:

  • --protocol tcp或者--protocol udp
  • --destination-port 27000:27031

如果需要,请参阅man iptablesiptables-extensions了解更多参数。

请注意添加接受规则向前如果连锁政策是接受无论如何,你没有任何降低規則。

NAT

您的 iptables SNAT 规则路由后链条看上去正确。

如果来自 eth0 的流量尚未将其目标地址设置为10.66.66.2,那么您还需要在预路由chain。这是为了修改数据包的目标地址,以便路由可以相应地选择传出接口。这应该是这样的:

iptables --table nat --append PREROUTING --in-interface eth0
--protocol udp --destination-port 27000:27031
--jump DNAT --to-destination 10.66.66.2:27000-27031

调试

对于调试目的来说,以下做法可能会有帮助:

  • tcpdump观察两台服务器上的流量。
  • 列出规则时添加--verbose到 iptables。这样,您可以看到有多少数据包(如果有)受到哪条规则的影响。

相关内容