Ubuntu 远程访问 Win11 WSL2 并固定访问教程

本文介绍如何在局域网内从另一台 Ubuntu 远程访问 Windows 11 的 WSL2,并解决 WSL2 IP 动态变化导致的端口转发失效问题。


1. 确认 WSL2 的 SSH 服务

在 Win11 中打开 WSL2(Ubuntu),执行:

bash 复制代码
sudo service ssh status

如果显示:

复制代码
* sshd is running

说明 SSH 服务已启动。

如果未启动,请执行:

bash 复制代码
sudo service ssh start

然后检查端口是否监听:

bash 复制代码
sudo netstat -tlnp | grep ssh

输出示例:

复制代码
tcp   0   0 0.0.0.0:22    0.0.0.0:*   LISTEN   6792/sshd
tcp6  0   0 :::22         :::*        LISTEN   6792/sshd

表示 SSH 服务在 WSL2 正常运行。


2. 获取 WSL2 的 IP 地址

执行:

bash 复制代码
ip addr show eth0

输出示例:

复制代码
inet 172.28.145.147/20 brd 172.28.159.255 scope global eth0

这里 172.28.145.147 即为 WSL2 的当前 IP。

⚠️ 注意:WSL2 IP 每次重启可能变化,不能固定。


3. 测试从 Win11 本机 SSH 到 WSL2

在 Win11 CMD 中执行:

cmd 复制代码
ssh name@172.28.145.147

如果能登录,说明 WSL2 SSH 正常。


4. 配置 Win11 端口转发,供外部 Ubuntu 访问

由于 WSL2 位于 NAT 内部,外部 Ubuntu 需要访问 Win11 的 LAN IP 并通过端口转发访问 WSL2。

假设 Win11 局域网 IP 为 192.168.0.51,WSL2 IP 为 172.28.145.147

4.1 添加端口转发

管理员权限打开 PowerShell,执行:

powershell 复制代码
netsh interface portproxy add v4tov4 `
    listenport=2222 listenaddress=0.0.0.0 `
    connectport=22 connectaddress=172.28.145.147

4.2 开放防火墙端口

powershell 复制代码
New-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow

4.3 验证端口转发规则

powershell 复制代码
netsh interface portproxy show all

输出示例:

复制代码
Listen on ipv4:             Connect to ipv4:

Address         Port        Address             Port
--------------- ----------  ------------------  ----------
0.0.0.0         2222        172.28.145.147      22

5. 从 Ubuntu 外部 SSH 访问 WSL2

在 Ubuntu 上执行:

bash 复制代码
ssh name@192.168.x.xxx -p 2222

成功登录即表示远程访问配置完成。


6. 解决 WSL2 IP 动态变化问题(自动更新端口转发)

6.1 创建自动更新脚本

在 Win11 中创建文件 C:\wsl_portproxy.ps1,内容如下:

powershell 复制代码
# 获取 WSL2 当前 IP
$wsl_ip = wsl.exe hostname -I
$wsl_ip = $wsl_ip.Trim()

# 删除旧规则
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0

# 添加新规则
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=$wsl_ip

Write-Host "WSL2 SSH portproxy updated to $wsl_ip"

6.2 允许 PowerShell 脚本执行

以管理员 PowerShell 执行:

powershell 复制代码
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

6.3 创建开机自动任务

在管理员 PowerShell 中执行:

powershell 复制代码
schtasks /create /sc onlogon /tn "UpdateWSL2Proxy" /tr "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\wsl_portproxy.ps1" /RL HIGHEST /F

6.4 验证任务创建成功

powershell 复制代码
schtasks /query | findstr UpdateWSL2Proxy

7. 最终效果

  1. 每次 Win11 登录时,自动更新 WSL2 的端口转发。
  2. 外部 Ubuntu 永远可通过:
bash 复制代码
ssh name@192.168.x.xxx -p 2222
  1. 无需手动修改 WSL2 IP 或 portproxy。

8. 拓展(可选)

如果 WSL2 中有其他服务(Flask、TensorBoard、ROS 等),可在 C:\wsl_portproxy.ps1 中添加更多端口转发,例如:

powershell 复制代码
# Flask 默认 5000
netsh interface portproxy add v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5000 connectaddress=$wsl_ip

# TensorBoard 默认 6006
netsh interface portproxy add v4tov4 listenport=6006 listenaddress=0.0.0.0 connectport=6006 connectaddress=$wsl_ip

这样就可以一键访问所有常用服务。


参考

相关推荐
SPC的存折15 分钟前
8、Ansible之Playbook---Roles
linux·服务器·ansible
Kira Skyler18 分钟前
BPF KPROBE编程中的ctx是什么?
linux
珠海西格电力26 分钟前
鄂尔多斯零碳产业园管理系统的核心功能解析
大数据·运维·人工智能·物联网·能源
春日见1 小时前
Tool文件夹:瑞士军刀库
运维·服务器·windows·深度学习·自动驾驶
AC赳赳老秦1 小时前
Windows 系统 OpenClaw 执行策略报错及管理员权限设置深度解析与实操指南
运维·人工智能·python·django·自动化·媒体·openclaw
arron88992 小时前
RK3588 Ubuntu 22.04 静态 IP 真实配置文件位置 + 最稳修改方法
tcp/ip·ubuntu·php
Gofarlic_OMS2 小时前
SolidEdge专业许可证管理工具选型关键评估标准
java·大数据·运维·服务器·人工智能
三万棵雪松2 小时前
【Linux 物联网网关主控系统-Linux主控部分(三)】
linux·物联网·嵌入式linux
萝卜白菜。2 小时前
TongWeb7.0 集中管理heimdall配置文件说明
linux·运维·服务器
bingHHB2 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习