使用 iptables 将所有流量转发到内部网络上的主机

使用 iptables 将所有流量转发到内部网络上的主机

此规则将端口 80 转发到内部网络上的主机:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.3.222:80

我要转发全部无论端口如何(带n:n映射),流量都会到达内部主机。我尝试过

iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination 10.0.3.222

但这不起作用:连接超时。

此规则是更复杂链的一部分。我的目标是允许连接到路由器上的某些服务(ssh、dns),并将所有其他连接转发到内部主机。完整的链设置如下所示:

iptables -t nat -A PREROUTING -m addrtype --dst-type local -j dnat-chain

iptables -t nat -A dnat-chain -p tcp --dport 22 RETURN
iptables -t nat -A dnat-chain -p udp --dport 53 RETURN
...
iptables -t nat -A dnat-chain -p tcp -j DNAT --to-destination ...

我添加了相同的链以便OUTPUT能够启动从路由器到内部服务的连接:

iptables -t nat -A OUTPUT -m addrtype --dst-type local -j dnat-chain

编辑

nat这是和表的初始状态filter

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT

$ sudo iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE

lxcbr0连接到10.0.3.0/24

答案1

我通过在链中添加以下规则解决了该问题:

iptables -t nat -I dnat-chain -i lxcbr0 -j RETURN

相关内容