![IP 表转发问题](https://linux22.com/image/771865/IP%20%E8%A1%A8%E8%BD%AC%E5%8F%91%E9%97%AE%E9%A2%98.png)
提前感谢您的帮助。
我曾尝试在这里阅读和搜索,但似乎无法让它发挥作用。
计算机A:192.168.1.2 计算机B:192.168.1.3
我正在尝试从 .2 向 .3 发送一条 UDP 消息并更改端口。.2 将在 1003 上发送一条消息,而我希望 .3 在 1004 上接受该消息。
下面的代码放在.3电脑上
iptables -t nat -A PREROUTING -p udp -i eth0 -d 192.168.1.2 --dport 1003 -j DNAT --to-destination 192.168.1.3:1004
iptables -t nat -A PREROUTING -i eth0 -d 192.168.1.2 -p udp --dport 1003 -j REDIRECT --to-ports 1004
iptables -A FORWARD -i eth0 -p udp -d 192.168.1.2 --dport 1004 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
答案1
你的火柴错了。如果目的地是192.168.1.2
。就你的情况而言,来源是192.168.1.2
,目的地是192.168.1.3
。
此外,似乎你只需要DNAT
规则或者规则REDIRECT
是,并非两者兼而有之。
过滤规则应该在INPUT
链中,因为目标是本地机器。我认为state
在这个规则中使用模块是没有意义的,但可能需要添加其他连接跟踪相关规则;目前还不清楚是否需要这些规则。这取决于防火墙的其余部分。如果防火墙中没有任何东西,则不需要过滤规则,因为无论如何一切都会启用。
顺便说一句,state
已经过时了,你应该使用conntrack
模块、ctstate
匹配来代替。
因此,您似乎需要以下两条规则:
iptables -t nat -A PREROUTING -s 192.168.1.2 -d 192.169.1.3 -p udp --dport 1003 -j REDIRECT --to-ports 1004
iptables -t filter -A INPUT -s 192.168.1.2 -p udp --dport 1004 -j ACCEPT
第一条规则将传入数据包重定向到 1003 端口和 1004 端口(传出数据包则返回)。第二条规则实际上允许此转换后的数据包到达本地进程。