内网ssh访问WSL

局域网内网 ssh 访问WSL

背景

我本地Windows11 使用 WSL 部署了一个测试项目,同事想通过ssh,访问我的WSL环境,查看服务日志和调试 Windows 和 WSL 网络模式是 NAT

最佳实践

WSL(Ubuntu 20.04) 启动ssh服务

sudo service ssh start


ss -ntlp | grep :22

查看WSL IP(172.23.109.102)

laihz@zyh:~$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:12:26:3b brd ff:ff:ff:ff:ff:ff
    inet 172.23.109.102/20 brd 172.23.111.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe12:263b/64 scope link
       valid_lft forever preferred_lft forever

Windows

在宿主机(Windows)配置端口转发 2222 - >22

netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.23.109.102

放行 Windows 防火墙,允许外部访问2222端口

netsh advfirewall firewall add rule name="WSL SSH" dir=in action=allow protocol=TCP localport=2222

登录

ssh laihz@192.168.1.111 -p 2222

备注: WSL IP每次会发生变化,需要手动先删除代理2222转发的ip,再重新添加

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

# 添加新规则(使用最新的 WSL IP)
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=<最新WSL_IP>

# 检查当前的转发规则
netsh interface portproxy show all