简介
注:Linux实现端口转发需要内核支持,请确保内核参数net.ipv4.ip_forward
值为1
。
一、采用iptables实现
iptables是一个功能丰富的Linux防火墙工具,可以用于配置网络地址转换(NAT)规则,从而实现端口转发。
# 端口映射规则
iptables -t nat -A PREROUTING -p tcp --dport [目标端口] -j DNAT --to-destination [映射地址]:[映射端口]
iptables -t nat -A POSTROUTING -p tcp -d [映射地址] --dport [映射端口] -j SNAT --to-source [本地地址]
# 案例:将远程主机 192.168.1.101 的 80 端口映射到本地的 8080 端口,输入以下命令
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.101:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.101 --dport 80 -j SNAT --to-source [本地IP]
# 注意要将 [本地IP] 替换为本地 IP 地址。
# 查看转发规则
iptables -t nat --list --line-number
参数说明
-
-t nat
:指定转换表(nat 表); -
-A PREROUTING
:指定要添加到哪个链中; -
-p tcp
:指定协议为 TCP; -
--dport [目标端口]
:指定需要映射到的目标端口; -
-j DNAT
:指定使用目标地址转换; -
--to-destination [映射地址]:[映射端口]
:指定目标地址和端口; -
-A POSTROUTING
:指定要添加到哪个链中; -
-d [映射地址]
:指定目标地址; -
--dport [映射端口]
:指定目标端口; -
-j SNAT
:指定使用 源地址转换; -
--to-source [本地地址]
:指定本地地址。
二、采用firewalld实现
firewalld是另一个功能强大的Linux防火墙工具,也可以用于配置网络地址转换(NAT)规则来实现端口转发。
# 规则
firewall-cmd --zone=public --add-forward-port=port=[本机端口]:proto=[协议]:toaddr=[远程主机IP]:toport=[远程主机端口] --permanent
# 案例:将192.168.1.10的80端口转发到本机的8080
firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toaddr=192.168.1.10:toport=80 --permanent
firewall-cmd --reload
# 查看已设置的规则
firewall-cmd --list-all
参数说明
-
--zone=public
:指定了这条规则的生效区域是public -
--add-forward-port
:指定了添加一条端口转发规则,具体规则参数解释如下:-
port
:需要转发的端口 -
proto
:协议类型,支持tcp、udp、icmp -
toport
:目标端口 -
toaddr
:可选参数,转发到指定IP地址
-
三、采用ssh隧道实现
# 规则
ssh -N -L [远程端口]:[本地地址]:[本地端口] root@[远程地址]
# 案例:将服务器 172.20.150.199 上的 8000 端口映射到本地的 8888 端口
ssh -N -L 8000:localhost:8888 root@172.20.148.199
更多高级用法可访问 https://www.lixueduan.com/posts/linux/07-ssh-tunnel/
四、采用nc实现
NC(也称作Netcat)是一个类Unix操作系统中的网络工具,有着强大的端口转发功能。
# 格式
nc -lp [本地映射端口] -c "nc [远程主机地址] [远程主机端口]"
# 案例:将192.168.1.110的3306映射到本机的3000端口
nc -lp 3000 -c "nc 192.168.1.110 3306"
五、采用ncat实现
ncat是一个多功能网络工具,可用于端口转发。它是nc(netcat)的升级版本。
# 规则
ncat --sh-exec "ncat [远程主机地址] [远程主机端口]" -l [本地映射端口] --keep-open
# 案例:将10.100.39.144的80端口转发到本地8000
ncat --sh-exec "ncat 10.100.39.144 80" -l 8000 --keep-open
六、采用socat实现
socat是一款非常强大的网络工具,在实现端口映射时,可以用它来建立TCP连接,将本地端口映射到远程机器上的一个端口。下面是使用socat实现端口映射的步骤:
# 规则
socat TCP-LISTEN:[本地映射端口],reuseaddr,fork TCP:[远程主机地址]:[远程主机端口]
# 案例: 将192.168.199.236的22端口,映射到本机的7777端口
socat TCP-LISTEN:7777,reuseaddr,fork TCP:192.168.199.236:22
七、Windows系统使用netsh实现
在 Windows 操作系统中,可以使用 netsh 命令实现网络端口转发。以下是使用 netsh 实现端口转发的步骤:
# 端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=10.100.38.14 connectport=80
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=10.100.38.14 connectport=443
# 展示
netsh interface portproxy show v4tov4
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 80 10.100.38.14 80
0.0.0.0 443 10.100.38.14 443
# 删除
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=80
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:服务器实现端口转发的N种方式 - Python技术站