泪流满面,每次重启电脑就会给 wsl2 分配一个随机的 ip 段,这导致了非常多问题
然后搜过之后,大部分方法全是清一色编辑 win10 的 hosts 文件自定义个域名(如 wsl.net 之类的),然后每次重启后更新这个域名的 ip 。但问题是我需要的固定 ip,而不是 DDNS,这类解决方法对于解决问题于事无补
这几天重翻 wsl 的 issue,终于找到了梦寐以求的解决办法。cmd/powershell 管理员权限执行这两行命令( ip 和 wsl 发行版名称根据自己的实际情况做出更改):
wsl -d Ubuntu -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
唯一不足是重启后会失效,所以把这两行命令保存为 bat 文件加入系统自启项,每次重启后让它自动设置就行了。这样你的 wsl2 终于有了个固定 ip 。泪流满面
出处: https://github.com/microsoft/WSL/issues/4210#issuecomment-648570493
1
interim 2021-01-14 16:43:44 +08:00
我都不关机,没这个问题....
这里有个项目关于 wsl2 自动更新 host 的项目 https://github.com/shayne/go-wsl2-host |
2
interim 2021-01-14 16:46:29 +08:00
我一直用 localhost 访问的 wsl2 下开放的端口,想了解使用固定 ip 的原因是什么?
我很久以前只遇到过一次 idea 用 localhost 连接 wsl2 docker 下的 mysql 连接失败的问题,改成 wsl2 的 ip 就好了 |
3
BeautifulSoap OP @chnyuwen 就随便举个例子,我想把 wsl2 中的文件,通过 samba 共享给我的局域网,或者贡献给同一台电脑中另外的虚拟机,没有固定 ip 的话根本做不到
|
4
baobao1270 2021-01-14 18:01:35 +08:00
个人感觉这个方法十分 Dirty,因此放弃了 WSL2 转回了 WSL1+需要时用 VM……
搞不懂为啥每次重启 vEthernet (WSL) 和 vEthernet (Default) 都会重置…… |
5
BeautifulSoap OP @baobao1270 可能微软不希望 wsl2 的 ip 过于固定,导致影响到同类业务的市场吧,只能这么想了。因为怎么想固定 ip 都不是个技术问题
至于 dirty 不 dirty,wsl 无法运行 docker,想跑 wsl backend 的 docker 也只能用 wsl2 了 |
6
Jisxu 2021-01-14 22:31:53 +08:00
有一个比较曲折的方法:
windows 端,用 nssm 将 frps 注册为服务并随开机启动 wsl 端,安装并启动 frpc,注册到 frps 上,然后 frpc 开机启动,我用的 archwsl,支持 stystemd,直接 enable 即可 这样一搞,无论 wsl 的 ip 怎么变,都和我无关,唯一需要固定是应该就是 windows 端网卡的 ip 了 |
7
BeautifulSoap OP @Jisxu 额,不知道你有没有用过 wsl2,你说的这功能 wsl2 早就已经自带了,而且还根本不用配置 frp
win10 端想要访问 wsl2 的端口的话,直接通过 localhost:xxx 就能访问到 wsl2 中对应的 xxx 端口,会自动进行转发。 局域网的话则可以通过 win10 局域网 ip:xxx 的方式访问到 wsl2 中的端口。 你谈到的配置 frp 和 wsl2 自带的流量转发从功能上讲是一模一样的,对于需要固定 ip 的人来说依旧是没有解决根本问题 |
8
forbxy 2021-01-15 11:32:10 +08:00
最近用虚拟机完全替代了 wsl 了,主要是 systemd 用习惯了,还有子系统想迁移到另外一台机器太麻烦了
0 、虚拟机从路由器分配固定 ip 1 、windows terminal 新增一个 tab,内容为 ssh.exe 远程登录虚拟机 2 、虚拟机挂载所有磁盘到 /mnt/hgfs/{c,d,e,f} 3 、RaiDrive 将虚拟机磁盘映射为 windows 网络磁盘 I 4 、windows 上 pycharm 打开网络磁盘上的项目,设置虚拟机的 python 解释器。设置 deployment 文件映射,关闭自动上传 丝滑体验 |
9
BeautifulSoap OP @forbxy wsl 不太清楚(似乎需要把整个系统打包成 tar ),但是 wsl2 迁移的话倒是真的简单,直接把 vhdx 文件复制到别的电脑里改下设置就行了(和虚拟机的迁移一样)
以前我也是跑完整的 linux 虚拟机的,但是 wsl2 backend 的 docker 体验太好了,之后就直接全迁移到 wsl2 了 |
10
baobao1270 2021-01-15 13:34:48 +08:00 via Android
@BeautifulSoap 算半个技术问题,因为 Hyper-V 的交换机是在系统启动后才初始化的,为了防止 IP 冲突就得每次自动随机出一个 IP 来。但是手动创建的虚拟交换机不受影响
|
11
BeautifulSoap OP @baobao1270 这不是技术问题,wsl2 初始化的时候随机一个未使用 ip 段确保不出现冲突然后不变就行了。为了不出现 ip 冲突就每次重启都删了 wsl 的虚拟交换机然后重新创建实在太因噎废食了
|
12
fengwn 2021-01-24 17:55:03 +08:00
都用了 192.168 私有网段,那还不如上虚拟机或者直接用 Docker for window(虽然挺操蛋的).一劳永逸的话,直接 Linux 平台走起.
|
13
BeautifulSoap OP @fengwn 都说了根据自己情况更改配置,不想用 192.168 那就用其他 ip 段,没人限制你用其他 ip 段
我就是为了更好体验地使用 Docker for windows 才从虚拟机迁移到 wsl2 的,你竟然说干嘛不用回虚拟机或用 Docker for Windows 至于直接用 Linux,明显就是一逸永劳 |
14
petshop 2021-01-25 19:43:17 +08:00
请问如何讲 bat 设置开机启动 我吧 bat 放到了 \Start Menu\Programs\Startup 文件夹下但好像不会自己运行 还有自动启动的脚本要如何设置管理员运行
|
17
bearboss 2021-04-16 14:58:26 +08:00
里面的 ip 之类的得根据现有的 ip 替换吗 比如现有的是 172 开头的 子网段也不一样
|
18
BeautifulSoap OP @bearboss 有点没理解,如果是想固定 ip 的话,两行命令中的 ip 只要和现有 ip 段之类的冲突,是可以随意设置的
|
19
bearboss 2021-04-16 16:30:13 +08:00
@BeautifulSoap 这样设置后局域网内其他电脑用这个 ip 能远程访问到 wsl 吗 如果不设置成同个网段的话 计网不好请见谅
|
20
BeautifulSoap OP @bearboss 只要这个 ip 的流量被转发到运行 wsl2 的宿主机就能访问到 wsl2
这时候分两种情况: 1. 同一台电脑上的多个局域网(比如不同虚拟机),一般不需要特别设置就能直接访问到(因为虚拟机一般都默认把宿主机设置为网络的网关,如果没有设置的话设置下网关就行了) 2. 同一个物理局域网中的其他电脑的话,需要简单设置下路由表(因为你 wsl2 的独立 ip 其他电脑是不可能知道这 ip 是拿来干嘛的)把 wsl2 的 ip 路由到你运行 wsl2 的宿主机上。或者觉得麻烦,可以在路由器里设置下路由规则,这样所有接入局域网的设备都能访问到你的 wsl2 了 |
21
smallthing 2021-04-30 18:05:59 +08:00
其实微软完全可以做一个 GUI,喜欢现有设定的选 default,希望固定 ip 的自己定一个.
|
22
UN2758 2021-12-07 04:16:36 +08:00
@BeautifulSoap #20 大佬,在无法设置路由器路由表的情况下,怎么设置其他电脑的路由表啊?比如我有 mac 和 winpc 处于同一局域网,mac 想访问 winpc 上的 wsl2 ,winpc 和 wsl2 设置了新子网 192.168.120.100 和 199 ,mac 上应该如何设置呢
|
23
BeautifulSoap OP @UN2758 没法碰路由器的话那就只能给 mac 单独设路由表了,mac 具体怎么配置路由表我没 mac 所以不清楚,应该一搜一大把
至于怎么个思路,就是设置 mac 路由表,让 mac 把 192.168.120.199 流量给路由到 winpc 的 192.168.120.100 上就行了,winpc 接收到流量后会自动处理 这方法我在同一台电脑上不同虚拟机上试过没问题 |
24
UN2758 2021-12-07 22:59:10 +08:00
@BeautifulSoap #23 忘了说了,mac 和 winpc 的局域网网址是 192.168.1.107 和 111 ,这算是属于另一个子网吧,这种情况下设置路由表也能路由到吗
|
25
BeautifulSoap OP @UN2758 啊,不好意思我理解错了。想了下和我之前同一台电脑不同虚拟机情况不太一样。这情况应该是没法通过指定路由表来转发流量的
|
26
davelm 2022-11-25 09:59:18 +08:00
不知道能不能固定 ipv6 ,这样就能直接公网访问了
|