服务器实现端口转发的N种方式

535 阅读5分钟

简介

在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。下文为大家总结了linux系统和windows系统端口转发常用的一些方法。

注: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为TCP链接提供的隧道功能实现端口转发。

	# 规则

	ssh -N -L [远程端口]:[本地地址]:[本地端口] root@[远程地址]

	 

	# 案例:将服务器 172.20.150.199 上的 8000 端口映射到本地的 8888 端口

	ssh -N -L 8000:localhost:8888 root@172.20.148.199

更多高级用法可访问 www.lixueduan.com/posts/linux…

四、采用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

相关领域拓展:(技术前沿)

扯个嗓子!关于目前低代码在技术领域很活跃!

低代码是什么?一组数字技术工具平台,能基于图形化拖拽、参数化配置等更为高效的方式,实现快速构建、数据编排、连接生态、中台服务等。通过少量代码或不用代码实现数字化转型中的场景应用创新。它能缓解甚至解决庞大的市场需求与传统的开发生产力引发的供需关系矛盾问题,是数字化转型过程中降本增效趋势下的产物。

这边介绍一款好用的低代码平台——JNPF快速开发平台。近年在市场表现和产品竞争力方面表现较为突出,采用的是最新主流前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue3)。代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发。

以JNPF为代表的企业级低代码平台为了支撑更高技术要求的应用开发,从数据库建模、Web API构建到页面设计,与传统软件开发几乎没有差异,只是通过低代码可视化模式,减少了构建“增删改查”功能的重复劳动,还没有了解过低代码的伙伴可以尝试了解一下。

应用:www.jnpfsoft.com/?juejin

有了它,开发人员在开发过程中就可以轻松上手,充分利用传统开发模式下积累的经验。所以低代码平台对于程序员来说,有着很大帮助。

dcf82163855933cac9a261bc0e3f1dd2.jpg