此规则将端口 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