外部网络通过ssh连接WSL2
需要配置wsl2网络模式为镜像模式,并打开防火墙。最终可以实现通过局域网访问WSL2容器,同时当宿主机可以访问ipv6时,容器也自动支持。
-
修改wsl位置文件
.wslconfig
,主要有以下两点关键步骤- 设置网络模式为镜像模式
networkingMode=mirrored
- 打开防火墙
firewall=true
[wsl2] # 限制容器内存上限, 根据各自机器及需求设置 memory=24GB # 配置网络模式为镜像模式,网络将于宿主机相同 networkingMode=mirrored # 更改将 DNS 请求从 WSL 代理到 Windows 的方式 dnsTunneling=true # 如果设置为 true,则 Windows 防火墙规则以及特定于 Hyper-V 流量的规则可以筛选 WSL 网络流量 firewall=true # 强制 WSL 使用 Windows 的 HTTP 代理信息, 默认为false 是否打开看个人的需要 #autoProxy=false # 实验性功能配置 [experimental] # 检测空闲 CPU 使用率后,自动释放缓存的内存。 设置为 gradual 以慢速释放,设置为 dropcache 以立即释放缓存的内存。默认值为disable autoMemoryReclaim=gradual # 仅当 wsl2.networkingMode 设置为 mirrored 时才适用。 如果设置为 True,将会允许容器通过分配给主机的 IP 地址连接到主机,或允许主机通过此方式连接到容器。 请注意,始终可以使用 127.0.0.1 环回地址 - 此选项也允许使用所有额外分配的本地 IP 地址。 # 意味着局域网内别的设备可以通过宿主机ip访问容器 hostAddressLoopback=true # 仅当 wsl2.networkingMode 设置为 mirrored 时才适用。 指定 Linux 应用程序可以绑定到哪些端口(即使该端口已在 Windows 中使用)。 通过此设置,应用程序能够仅侦听 Linux 中的流量端口,因此即使该端口在 Windows 上用于其他用途,这些应用程序也不会被阻止。 例如,WSL 将允许绑定到 Linux for Docker Desktop 中的端口 53,因为它只侦听来自 Linux 容器中的请求。 应在逗号分隔列表中设置格式,例如:3000,9000,9090 # 默认为Null ignoredPorts=22 # 如果设置为 true,则任何新创建的 VHD 将自动设置为稀疏。 sparseVhd=true
- 设置网络模式为镜像模式
-
运行管理员权限的
Powershell
终端,打开防火墙# 开启防火墙 Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow # 开启特定端口防火墙,比如10022端口 New-NetFirewallHyperVRule -DisplayName "allow WSL ssh" -Direction Inbound -LocalPorts 10022 -Action Allow
-
至此可以从外部访问WSL2容器内部
参考资料
Can't ssh into wsl with networking mode mirrored #10597
标签:容器,外部,WSL2,端口,WSL,防火墙,ssh,设置,true From: https://www.cnblogs.com/Biiigwang/p/18064134/external-network-connects-wsl2-via-ssh-zy7ktp