V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
szq8014
V2EX  ›  程序员

WSL2 的 IP 不固定好烦啊,提供一个临时方案

  •  
  •   szq8014 · 2021-01-27 16:45:10 +08:00 · 1942 次点击
    这是一个创建于 1184 天前的主题,其中的信息可能已经有所发展或是发生改变。

    尝试绑定 IP 结果一重启就回到解放前,只能是想一个其它办法来绕过,毕竟 IP 可变,但是 hostname 可以固定不变。

    每次在 wsl 启动后把 ip 更新到 windows 的 etc/hosts 文件里面不就行了? 就按这个思路来。

    已知

    • powershell 中的命令可以实现 windows hosts 内容修改
    • wsl --exec 可以直接执行 wsl 中的命令
    • 整篇无图

    组合一下

    # 拿到 wsl 的 ip 地址
    $ipLine = wsl --exec ip -a a | findStr inet | findStr eth0
    $wslIP = $ipLine.trim().split(" |/")[1]
    echo "WSL new ip is: " $wslIP
    
    # 写入 etc\hosts 文件中
    $hostsPath = "$env:windir\System32\drivers\etc\hosts"
    if($wslIP) {
        $newHosts = Get-Content $hostsPath | Foreach {if ($_ -match '^\s*([^#].*?\d{1,3}.*?wsl.*)') { $wslIP + " wsl"} else {$_}} 
        echo $newHosts
        $newHosts | Out-File $hostsPath -enc ascii
    }
    

    保存到 test.ps1 文件中运行即可。

    结果: 成功

    开心。

    补充

    • 上面脚本中假定我的 hosts 中 wsl 的 hostname 就是 wsl 。
    • wsl 中网卡是 eth0 。
    • wsl --exec 使用的是默认发行版,如果其它发行版则需要 -d 指定
    • 想直接在 wsl 中写脚本来修改 /mnt/c/Windows/System32/drivers/etc/hosts 会 Permission Denied. ps: sudo 也不行
    • test.ps1 右键默认没有 "以管理员身份运行" ,所以得再想个办法。。
    • 办法就是再写一个 .bat 文件。。。
    • 文件内容就一行 powershell.exe $your_ps1_file_path 保存文件,右击运行就行了
    • 有点遗憾,需要每次手动运行一个脚本才行,但是楼主自己已经挺满意了

    再次补充

    此脚本仅提供一个思路,如果能运行是最让人开心的,如果不能需要调整一下脚本中具体的关键词,如 eth0, wsl 等等

    vone
        1
    vone  
       2021-01-27 17:12:52 +08:00
    通过访问 localhost 不是会自动转发吗
    szq8014
        2
    szq8014  
    OP
       2021-01-27 17:21:56 +08:00
    @vone 哦,艹,原来 localhost 还给转发了。。哈哈哈哈哈哈,解决了一个不存在的问题,一直只使用 IP 的。。原来 WSL 还有魔法
    CuriousBull
        3
    CuriousBull  
       2021-01-27 17:29:50 +08:00
    在别的地方看到设置 wsl2 图形界面设置,有使用以下语句
    `export DISPLAY=$(ip route | awk '{print $3; exit}'):0`

    仿照类似的句式,配合 clash,同样可以设置代理端口设置,譬如
    `export https_proxy=$(ip route | awk '{print $3; exit}'):7890`
    szq8014
        4
    szq8014  
    OP
       2021-01-27 17:35:22 +08:00
    @CuriousBull 哈哈,你这个是反过来用
    cymanbu
        5
    cymanbu  
       2021-01-28 17:59:04 +08:00
    我是通过主动设置 ip 的方式来实现的固定 ip 地址。https://blog.csdn.net/manbu_cy/article/details/108476859
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1145 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:58 · PVG 06:58 · LAX 15:58 · JFK 18:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.