我正在尝试使用以下命令设置port 12345到port 54321 UDP端口转发:
iptables -t nat -A PREROUTING -p udp -i eth0 -d 192.168.0.1 --dport 12345 -j DNAT --to 192.168.0.1:54321 iptables -A FORWARD -p udp -i eth0 -d 192.168.0.1 --dport 54321 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
这适用于新的连接,但是,它不适用于当前活动的连接。
为了说明我的意思,假设在添加规则之前,存在来自192.168.0.2:55555 <—> 192.168.0.1:12345的活动连接,并且我试图redirect192.168.0.1:12345上的所有传入连接192.168.0.1:12345到192.168.0.1:54321 。
添加上述两条规则之后, 192.168.0.1:12345所有其他报文都将从192.168.0.2:55555接收,但192.168.0.1:12345报文除外。
我猜这个连接的状态起了一个作用。 我怎样才能解决这个问题,并从192.168.0.1:55555到目的地port 12345得到传递到port 54321 port 12345的数据包?
我想出了如何做到这一点!
你需要在NAT上使用REDIRECT! 但在此之前,您必须从conntrack中删除与此连接相对应的条目! 像下面这样
conntrack -D -p udp -d 192.168.0.1 --dport=55555