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

2021-01-27 16:45:10 +08:00
 szq8014

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

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

已知

组合一下

# 拿到 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 文件中运行即可。

结果: 成功

开心。

补充

再次补充

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

2156 次点击
所在节点    程序员
5 条回复
vone
2021-01-27 17:12:52 +08:00
通过访问 localhost 不是会自动转发吗
szq8014
2021-01-27 17:21:56 +08:00
@vone 哦,艹,原来 localhost 还给转发了。。哈哈哈哈哈哈,解决了一个不存在的问题,一直只使用 IP 的。。原来 WSL 还有魔法
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
2021-01-27 17:35:22 +08:00
@CuriousBull 哈哈,你这个是反过来用
cymanbu
2021-01-28 17:59:04 +08:00
我是通过主动设置 ip 的方式来实现的固定 ip 地址。https://blog.csdn.net/manbu_cy/article/details/108476859

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748966

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX