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

本文介绍了在Linux和Windows系统中实现端口转发的不同方法,包括使用iptables、firewalld、ssh隧道、nc、ncat、socat以及Windows的netsh命令。这些工具和技术允许用户绕过网络限制,实现端口映射和网络访问控制。

简介

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

更多高级用法可访问 SSH 隧道简明教程 -

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

### VSCode 端口转发实现原理 #### 远程开发环境中的端口转发需求 在现代开发环境中,远程工作跨平台开发变得越来越普遍。对于需要频繁访问远程服务器上的特定服务或应用的场景,直接在网络中开放这些服务可能带来安全风险。因此,在不影响安全性的情况下提供一种简便的方法来访问远程服务成为必要。VSCode 提供了端口转发的功能,允许开发者轻松地将本地端口映射到远程机器上的指定端口[^1]。 #### 基于SSH的端口转发技术基础 为了理解 VSCode 如何实现端口转发,首先要了解 SSH 协议支持的一种称为“隧道”的特性。通过 SSH 隧道,可以从一台计算机的安全通道传输数据至另一台计算机。具体来说,`ssh -L`命令用于设置本地端口转发,它会创建一条从客户端(即运行 VSCode 的设备)指向目标主机(通常是远程Linux/Ubuntu服务器)的安全路径。这条路径可以让来自本机某个端口的数据被重定向并发送给远端对应的监听地址与端口号组合的服务实例[^5]。 #### VSCode 中的具体操作流程 当用户希望使用 VSCode 对远程服务器上的某项服务进行端口转发时,实际过程如下: - 用户发起请求后,VSCode 调用内置或者外部安装好的 OpenSSH 客户端工具执行相应的 `ssh -L`指令; - 此指令包含了必要的参数定义,比如要绑定的本地端口、目的IP以及远程端口等信息; - 成功建立连接之后,任何发往该本地端口的数据包都会经由已构建完成的安全隧道传送到目的地,并在那里得到处理;反之亦然——如果远程程序尝试向其自身的某一端口写入响应,则此流量也会沿相同路线返回给用户的电脑。 ```bash ssh -N -f -L LocalPort:RemoteHost:RemotePort YourUsername@RemoteServerAddress ``` 这段脚本展示了如何配置基本形式的端口转发规则。其中 `-N` 参数指示仅建立隧道而不启动交互式shell;`-f` 则让进程转入后台继续运行直到显式终止为止;最后是具体的转发设定部分,指明了三个关键要素之间的对应关系:本地待占用端口、远程目标位置及其对外开放接口编号[^4]。 #### 技术细节深入探讨 除了上述高层次描述外,更深层次的技术要点涉及到了 WebSockets 其他通信协议的应用。一旦建立了稳定的 SSH 会话作为底层支撑结构,更高层次的消息交换便可通过 WebSocket 来承载。WebSocket 是一种全双工通讯协定,非常适合用来实现实时更新等功能。在这种情况下,IDE 及其所加载的各种插件能够借助 WebSocket 同步状态变化并与远程资源保持紧密联系。此外,考虑到性能优化方面的需求,VSCode Server 设计了一套完善的架构体系,其中包括但不限于插件进程管理调度策略等内容,从而确保整个系统的稳定性高效运作[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值