端口转发及使用场景

我在WINDOWS10的安装了VM虚拟机,虚拟机通过NAT网络模式里又装了一个WIN10系统,在虚拟机的WIN10系统里又通过WSL2安装了一个UBUNTU子系统,安装VM虚拟机的IP为192.168.2.14,虚拟机里的WIN10系统的IP为192.168.60.30,虚拟机里WIN10的UBUNTU子系统IP为172.21.229.20。然后我在UBUNTU子系统里安装了一些服务,我要怎么通过同局域网的手机访问到UBUNTU子系统上的服务?

端口转发及使用场景

要实现手机访问嵌套在VM虚拟机内WSL2 Ubuntu子系统的服务,需配置三层端口转发和防火墙规则。

整体路径为:‌手机 → 物理机 → VM虚拟机Win10 → WSL2 Ubuntu‌。以下是具体步骤:


🔧 一、配置WSL2到虚拟机Win10的端口转发

在‌虚拟机内的Win10系统‌中操作:

  1. 以管理员身份打开PowerShell
  2. ‌执行端口转发命令 ‌(以Ubuntu服务端口80为例):
   powershell
   netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=172.21.229.20
  • 8080:虚拟机Win10的监听端口
  • 80:Ubuntu服务的实际端口(按需替换)
  1. ##### ‌开放防火墙端口‌:
  • 进入高级安全Windows防火墙 → 入站规则 → 新建规则 → 端口
  • 允许TCP协议,端口填写8080(与转发端口一致)

⚙️ 二、配置物理机到VM虚拟机的端口转发

在‌物理机(192.168.2.14)‌ 中操作:

  1. ##### ‌打开VMware虚拟网络编辑器‌:
  • 选择VMnet8(NAT模式)→ NAT设置 → 添加端口转发
  1. ‌添加转发规则‌: 字段 值 主机端口 9090(物理机端口) 虚拟机IP地址 192.168.60.30(虚拟机Win10的IP) 虚拟机端口 8080(上一步设置的端口)

🔒 三、配置物理机防火墙

在物理机中开放端口:

  • 允许物理机的9090端口(与VMware转发端口一致),方法同步骤一.

📱 四、手机访问服务

手机通过浏览器或工具访问:

http://192.168.2.14:9090  # 物理机IP + 端口
  • 192.168.2.14:物理机IP(宿主机)
  • 9090:物理机映射端口

⚠️ 注意事项

  1. ##### ‌IP变动问题‌:
  • WSL2的IP(172.21.229.20)重启后会变化,需在虚拟机Win10中定时更新转发命令(可通过开机脚本自动获取WSL2 IP并重置转发)4。
  1. ##### ‌多层端口一致性‌:
  • 物理机端口(9090)→ 虚拟机端口(8080)→ Ubuntu服务端口(如80)需逐层对应。
  1. ##### ‌服务协议支持‌:
  • 若服务使用UDP(如游戏服务),需在防火墙规则中切换协议类型。
最终路径:手机 → 物理机IP:9090虚拟机IP:8080WSL2 IP:服务端口
若连接失败,逐层检查端口转发规则和防火墙状态。

Windows 系统

端口转发命令‌(管理员权限运行):

cmd
netsh interface portproxy add v4tov4 listenport=<外部端口> listenaddress=0.0.0.0 connectport=<内部端口> connectaddress=<内部IP>

如虚拟机内WSL2的UBUNTU子系统IP为172.21.229.160内部服务端口为22,我要通过WIN10虚拟机的监听的端口为22222,

示例
netsh interface portproxy add v4tov4 listenport=22222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.21.229.160
或者最妥当的是
netsh interface portproxy add v4tov4 listenport=22222 listenaddress=0.0.0.0 connectport=22 connectaddress=127.0.0.1

示例:将本机8080端口转发到内网服务器 192.168.1.100:80:

cmd
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.1.100

查看端口转发规则‌:

cmd
netsh interface portproxy show all

删除端口转发规则‌:

cmd
netsh interface portproxy delete v4tov4 listenaddress=<监听地址> listenport=<监听端口>

示例:
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0