外部网络通过ssh连接WSL2

外部网络通过ssh连接WSL2

需要配置wsl2网络模式为镜像模式,并打开防火墙。最终可以实现通过局域网访问WSL2容器,同时当宿主机可以访问ipv6时,容器也自动支持。

  1. 升级wsl为最新版

    wsl --update 
    
  2. 修改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
    
  3. 运行管理员权限的Powershell​终端,打开防火墙

    # 开启防火墙
    Set-NetFirewallHyperVVMSetting -Name ‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ -DefaultInboundAction Allow
    
    # 开启特定端口防火墙,比如10022端口
    New-NetFirewallHyperVRule -DisplayName "allow WSL ssh" -Direction Inbound -LocalPorts 10022 -Action Allow
    
  4. 至此可以从外部访问WSL2容器内部

    image

参考资料

WSL 中的高级设置配置#主要WSL设置

WSL文档-概念-网络注意事项#镜像模式网络

Can't ssh into wsl with networking mode mirrored #10597

posted @ 2024-03-10 14:09  biiigwang  阅读(1743)  评论(0编辑  收藏  举报