linux上端口重定向及端口映射
0. 查看匹配规则
sudo iptables -t nat -nvL --line-numbers
-n:不显示hostname,减少dns等待时间;
-v: verbose
-L:--list,列举规则
--line-numbers:带上规则排号,越靠前越先被匹配
1. 端口映射
将10.6.0.4:6666 映射到 172.17.0.1:7777,注意:目标ip不能是127.0.0.1
如果10.6.0.4和172.17.0.1两个网卡同属于一个SoC,则只需要配置DNAT即可
user@user-OptiPlex-7090:~$ # sudo iptables -t nat -A PREROUTING -p tcp -d 10.6.0.42 --dport 6666 -j DNAT --to-destination 172.17.0.1:7777
user@user-OptiPlex-7090:~$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d 10.6.0.42/32 -i enp0s31f6 --dport 6666 -j DNAT --to-destination 172.17.0.1:7777
user@user-OptiPlex-7090:~$ # sudo iptables -t nat -A POSTROUTING -p tcp -d 172.17.0.1 --dport 7777 -j SNAT --to-source 10.6.0.42
user@user-OptiPlex-7090:~$ sudo iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.17.0.1/32 --dport 7777 -j SNAT --to-source 10.6.0.42
测试
本机起监听
user@user-OptiPlex-7090:~$ nc -l 7777
其他机器访问,注意:不可以在同机内做测试,否则会直接报失败
# 另外一台机器 zjr@hd:~$ nc -v 10.6.0.42 6667 Connection to 10.6.0.42 6666 port [tcp/*] succeeded! # 同一台机器 user@user-OptiPlex-7090:~$ nc -v 10.6.0.42 6667 nc: connect to 10.6.0.42 port 6667 (tcp) failed: Connection refused
2 端口重定向
需要源IP和目标IP一致
iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666
参考:
https://zhuanlan.zhihu.com/p/441089738
https://www.cnblogs.com/paul8339/p/14688156.html#:~:text=%E8%80%8C%20iptables%20%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%99%E6%98%AF%E5%9C%A8%E5%86%85%E6%A0%B8%E8%BF%9B%E8%A1%8C%E3%80%82%201%E3%80%81%E5%B0%86%E6%9C%AC%E5%9C%B0%E7%9A%84%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%B0%E6%9C%AC%E6%9C%BA%E7%AB%AF%E5%8F%A3%20%E5%B0%86%E6%9C%AC%E6%9C%BA%E7%9A%84%207777%20%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%B0%206666,6666%201.242%20%E6%9C%BA%E5%99%A8%E4%B8%8A%E5%B0%86%207777%20%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%B0%206666%EF%BC%8C%E5%B9%B6%E4%BE%A6%E5%90%AC%206666%20%E7%AB%AF%E5%8F%A3%E3%80%82