利用iptables实现端口转发

本文最后更新于:2023年1月3日 早上

1 、本地端口转发

外网访问本地的4444端口的流量转发到本地的22端口:

iptables -t nat -A PREROUTING -p tcp –dport 4444 -j REDIRECT –to-ports 22

删除规则用-D参数
iptables -t nat -D PREROUTING -p tcp –dport 4444 -j REDIRECT –to-ports 22

本地访问本地的4444端口的流量转发到本地的22端口:

iptables -t nat -A OUTPUT -p tcp –dport 4444 -j REDIRECT –to-ports 22

删除规则用-D参数
iptables -t nat -D OUTPUT -p tcp –dport 4444 -j REDIRECT –to-ports 22

2、分流

通过PREROUTING链,将172.16.250.1网段访问4444端口的包转发到本机22端口,其他网段则正常访问4444端口,MASQUERADE类似于SNAT,只是不用写源地址。

iptables -t nat -A PREROUTING –source 172.16.250.1 -p tcp –dport 4444 -j DNAT –to-destination 172.16.250.3:22
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE
iptables -t nat -A POSTROUTING –dst 172.16.250.3 -p tcp –dport 22 -j MASQUERADE

3、远程端口转发

假如我们想使用192.168.5.104:32001去访问192.168.49.2:32001端口,那么需要在192.168.5.104的机器上执行下面的命令:

注意:该两个ip地址为同一台机器的两个ip,由于某种原因,该机器上只能使用192.168.49.2:32001可以访问,无法通过192.168.5.104:32001访问,因此可以使用iptables 处理,或者使用nginx实现端口转发

使用场景:比如minikube 的集群ip,无法对外访问,是一个虚拟ip

sudo iptables -t nat -A PREROUTING –dst 192.168.5.104 -p tcp –dport 32001 -j DNAT –to-destination 192.168.49.2:32001
sudo iptables -t nat -A POSTROUTING –dst 192.168.49.2 -p tcp –dport 32001 -j SNAT –to-source 192.168.5.104

查看已有规则

iptables -t nat -nL –line

删除第二条规则

iptables -t nat -D PREROUTING 2

删除所有规则

iptables -F -t nat

References


利用iptables实现端口转发
https://baymax55.github.io/2023/01/03/network/利用iptables实现端口转发/
作者
baymax55
发布于
2023年1月3日
许可协议