Skip to main content

第 8 课:端口映射和端口转发

(一)端口映射和端口转发

1. 端口映射(Port Mapping)

端口映射(Port Mapping):端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。

比如 我们在内网中有一台Web服务器,但是外网中的用户是没有办法直接访问该服务器的。于是我们可以在路由器上设置一个端口映射,只要外网用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全

img

端口映射分为两种类型:

1. 本地端口映射(Local Port Forwarding)

  • 应用:将本地某端口映射到远程目标主机端口
  • 举例:SSH 时使用 ssh -L 8080:target.com:80,本地访问 localhost:8080 会转发到 target.com:80

2. 远程端口映射(Remote Port Forwarding)

  • 应用:将远程服务器的某端口映射到本地端口
  • 举例:使用 FRP、Ngrok 等,把远程服务器的 6000 映射到你本地的 22 端口,就可以远程 SSH 到你家电脑了。

总而言之:端口映射就是把某个“入口端口”的访问请求,重定向到别处的某个“目标端口”上,不管是不是局域网都可以做到,只是方式不同。


2. 端口转发(Port forwarding)

端口转发:端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。

比如,我们现在在内网中,是没有办法直接访问外网的。但是我们可以通过路由器的NAT方式访问外网。假如我们内网现在有100台主机,那么我们现在都是通过路由器的这一个公网IP和外网通信的。那么,当互联网上的消息发送回来时,路由器是怎么知道这个消息是给他的,而另外消息是给你的呢?这就要我们的ip地址和路由器的端口进行绑定了,这时,在路由器中就会有一个内网ip和路由器端口对应的一张表。当路由器的10000端口收到消息时,就知道把消息发送给他,而当20000端口收到消息时,就知道把消息发送给你。这就是端口转发,其转发一个端口收到的流量,给另一个主机。

img

3. 端口映射与端口转发的区别

端口转发:转发的重点在“转”上面。送快递的过来,把所有快递都交给门口保安,保安再根据每件快递上的收件人来分发。

端口映射:就是在大门口给每个人装个柜子,送快递的直接按收件人名字,把快递放到对应的柜子里面。


(二)实验

本章要实现的目标: 在 局域网 内,直接使用 SSH 登录到另一台 Windows 设备上的 WSL 服务器

先前,连接WSL的方式是 使用 FRP 穿透直接可以从公网地址访问WSL,但是这种方法受到 FRP 服务商的限制。

由于WSL不直接拥有外部网络的IP,而是和宿主机由 内部虚拟局域网 通信,因此其实可以把 WSL Ubuntu24 的 SSH 端口 映射到宿主机的 6510 端口上,使得可以实现 ssh [WSL用户名]@[宿主机IP] -p 6510 就直接SSH 访问WSL


第一步:端口转发

打开 Windows 的 PowerShell(以管理员身份运行)。

添加端口转发规则

将 本地的 172.23.224.1:6510 接收到的 TCP 请求,转发到 172.23.237.91:22 上去。

netsh interface portproxy add v4tov4 listenaddress=172.23.224.1 listenport=6510 connectaddress=172.23.237.91 connectport=22

解释:

含义

  • netsh:Windows 网络配置工具,用于管理网络设置。

  • interface portproxy:管理端口代理(port proxy)功能,即端口转发。

  • add v4tov4:添加一条 IPv4 → IPv4 的端口转发规则。

  • listenport=6510:宿主机监听的端口。

  • listenaddress=0.0.0.0:接受任何外部 IP 的连接。

  • listenaddress=172.23.224.1:宿主机的 vEthernet (WSL) 地址。

  • connectport=22:WSL 内 SSH 服务的端口。

  • connectaddress=172.23.237.91:WSL 的默认地址。

查看端口转发规则

netsh interface portproxy show v4tov4

应当有如下输出

侦听 ipv4:                 连接到 ipv4:

地址 端口 地址 端口
--------------- ---------- --------------- ----------
172.23.224.1 6510 172.23.237.91 22
tip

如果需要删除规则

netsh interface portproxy delete v4tov4 listenport=6510 listenaddress=0.0.0.0

注意在 Windows 防火墙中允许 6510 端口的入站规则。如果宿主机使用 NAT 或防火墙,确保 6510 端口可以被外网访问。

在宿主机中测试:

ssh heihe@172.23.224.1 -p 6510

当前使用主机的其他IP不能连接到WSL,只有和WSL的内网IP可以



第二步:端口映射

WSL 通过 vEthernet (WSL) 适配器与宿主机通信,WSL 的网络接口(eth0)使用的是私有内网 IP(例如 172.23.237.91),而宿主机(Windows)的其他网络接口可能并没有直接暴露到 WSL 所在的网络。

因此宿主机的其他 IP 地址(比如 10.107.143.91)并未配置为能够直接访问 WSL 网络。因为 WSL 网络栈与宿主机的其他网络适配器之间可能没有直接的路由关系。

如果当前只有 172.23.224.1 的转发,尝试添加一个从宿主机 10.107.143.91 到 WSL 的端口转发规则:

netsh interface portproxy add v4tov4 listenaddress=10.107.143.91 listenport=6510 connectaddress=172.23.237.91 connectport=22

这样可以确保从 10.107.143.91 连接时也会转发到 WSL 的 22 端口。


检查规则是否被添加

netsh interface portproxy show v4tov4

在 Windows 防火墙中添加一条入站规则,允许 来自 IP 地址 10.107.143.91 的客户端通过 TCP 协议访问本机的端口 6510(通常用于你设置了端口转发到 SSH 的场景)。

New-NetFirewallRule -DisplayName "Allow SSH from 10.107.143.91" -Direction Inbound -Protocol TCP -Action Allow -LocalPort 6510 -RemoteAddress 10.107.143.91
参数说明
New-NetFirewallRulePowerShell 命令,用于创建一个新的防火墙规则。
-DisplayName "Allow SSH from 10.107.143.91"给这条规则起一个名字(可用于后续管理)。
-Direction Inbound规则方向是入站,即来自其他主机的连接。
-Protocol TCP规则仅作用于 TCP 协议。
-Action Allow表示允许该连接(而不是阻止)。
-LocalPort 6510作用于本地的 6510 端口(你配置的 SSH 转发监听端口)。
-RemoteAddress 10.107.143.91只允许来自这个 远程 IP 地址 的访问。

远程测试

ssh heihe@10.107.143.91 -p 6510


第三步:带宽测试

iPerf 是一个强大的网络性能测试工具,支持测量带宽、延迟和抖动等。安装步骤如下:

  1. 在这个网站下载适合 Windows 的二进制文件: https://files.budman.pw/

  2. 将下载的文件解压到两个主机上的某个目录,例如 C:\Program Files\iperf3.1.1_32

  3. 把这个路径添加到系统环境变量中


服务器端:

在 10.107.143.91 上作为服务器启动 iPerf

iperf3 -s -p 6511

将 10.107.143.91 设置为 iPerf 服务器,监听端口6511(默认 5201)

(记得打开防火墙的6511端口)

客户端:

在 10.107.131.120 上作为客户端启动 iPerf

iperf3 -c 10.107.143.91 -p 6511

启动测试,客户端将发送数据到服务器,并测量连接的带宽。


使用 UDP 测试可以更接近理论最大带宽

iperf3 -c 10.107.143.91 -p 6511 -u -b 100M

-u 表示使用 UDP,-b 用于设置目标带宽(如 100 Mbps)。


通过增加并发流测试性能

iperf3 -c 10.107.143.91 -p 6511 -P 5

-P 参数设置并发流数量(如 5 个流)

tip

在使用 iperf3 -c 10.107.143.91 -p 6511 测试时,带宽有35M。

而在使用 iperf3 -c 10.107.143.91 -p 6511 -P 5 测试时,带宽有100M,这是为什么?


TCP 协议在单流模式下,会受到以下因素的限制:

  1. 窗口大小限制:

TCP 使用窗口机制(TCP Window Size)来控制数据发送。默认窗口大小较小时,带宽利用率可能不足。在高延迟或带宽较高的情况下(即高带宽-延迟积场景),窗口大小会限制传输速率。iperf3 默认使用自动调整的 TCP 窗口大小,但对于单流可能没有充分利用可用带宽。

  1. 拥塞控制算法:

TCP 使用算法(如 Cubic)避免网络拥塞。单流测试时,TCP 的拥塞窗口增长较慢,从而限制带宽。

因此单流测试中,TCP 的窗口大小和拥塞控制机制可能未能充分发挥网络的最大带宽