终于找到给 wsl2 分配固定 ip 的方法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
BeautifulSoap

终于找到给 wsl2 分配固定 ip 的方法

  •  2
     
  •   BeautifulSoap Jan 14, 2021 20470 views
    This topic created in 1929 days ago, the information mentioned may be changed or developed.

    泪流满面,每次重启电脑就会给 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

    Supplement 1    Apr 16, 2021
    补充一下:
    上面第一行命令中的 ip 192.168.50.16 是分配给 wsl2 的固定 ip

    第二行的 ip 192.168.50.88 是分配给宿主机的固定 ip,用来在 wsl2 中访问宿主机,这样不光 wsl2 有固定 ip,连从 wsl2 中访问宿主机也都用固定 ip 了

    如果没有 wsl2 访问宿主机的需要的话,第二行命令可以不用
    Supplement 2    Apr 22, 2021
    不好意思,搞错了一点,第二行命令也是必须的,没有第二行命令给宿主机分配一个 ip 的话,宿主机就无法在指定的 ip 段与 wsl2 交互
    27 replies    2023-03-16 20:21:18 +08:00
    interim
        1
    interim  
       Jan 14, 2021
    我都不关机,没这个问题....
    这里有个项目关于 wsl2 自动更新 host 的项目 https://github.com/shayne/go-wsl2-host
    interim
        2
    interim  
       Jan 14, 2021
    我一直用 localhost 访问的 wsl2 下开放的端口,想了解使用固定 ip 的原因是什么?
    我很久以前只遇到过一次 idea 用 localhost 连接 wsl2 docker 下的 mysql 连接失败的问题,改成 wsl2 的 ip 就好了
    BeautifulSoap
        3
    BeautifulSoap  
    OP
       Jan 14, 2021
    @chnyuwen 就随便举个例子,我想把 wsl2 中的文件,通过 samba 共享给我的局域网,或者贡献给同一台电脑中另外的虚拟机,没有固定 ip 的话根本做不到
    baobao1270
        4
    baobao1270  
       Jan 14, 2021
    个人感觉这个方法十分 Dirty,因此放弃了 WSL2 转回了 WSL1+需要时用 VM……

    搞不懂为啥每次重启 vEthernet (WSL) 和 vEthernet (Default) 都会重置……
    BeautifulSoap
        5
    BeautifulSoap  
    OP
       Jan 14, 2021 via Android
    @baobao1270 可能微软不希望 wsl2 的 ip 过于固定,导致影响到同类业务的市场吧,只能这么想了。因为怎么想固定 ip 都不是个技术问题

    至于 dirty 不 dirty,wsl 无法运行 docker,想跑 wsl backend 的 docker 也只能用 wsl2 了
    jisxu
        6
    jisxu  
       Jan 14, 2021
    有一个比较曲折的方法:
    windows 端,用 nssm 将 frps 注册为服务并随开机启动
    wsl 端,安装并启动 frpc,注册到 frps 上,然后 frpc 开机启动,我用的 archwsl,支持 stystemd,直接 enable 即可
    这样一搞,无论 wsl 的 ip 怎么变,都和我无关,唯一需要固定是应该就是 windows 端网卡的 ip 了
    BeautifulSoap
        7
    BeautifulSoap  
    OP
       Jan 15, 2021 via Android
    @Jisxu 额,不知道你有没有用过 wsl2,你说的这功能 wsl2 早就已经自带了,而且还根本不用配置 frp

    win10 端想要访问 wsl2 的端口的话,直接通过 localhost:xxx 就能访问到 wsl2 中对应的 xxx 端口,会自动进行转发。
    局域网的话则可以通过 win10 局域网 ip:xxx 的方式访问到 wsl2 中的端口。


    你谈到的配置 frp 和 wsl2 自带的流量转发从功能上讲是一模一样的,对于需要固定 ip 的人来说依旧是没有解决根本问题
    forbxy
        8
    forbxy  
       Jan 15, 2021
    最近用虚拟机完全替代了 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 文件映射,关闭自动上传

    丝滑体验
    BeautifulSoap
        9
    BeautifulSoap  
    OP
       Jan 15, 2021
    @forbxy wsl 不太清楚(似乎需要把整个系统打包成 tar ),但是 wsl2 迁移的话倒是真的简单,直接把 vhdx 文件复制到别的电脑里改下设置就行了(和虚拟机的迁移一样)

    以前我也是跑完整的 linux 虚拟机的,但是 wsl2 backend 的 docker 体验太好了,之后就直接全迁移到 wsl2 了
    baobao1270
        10
    baobao1270  
       Jan 15, 2021 via Android
    @BeautifulSoap 算半个技术问题,因为 Hyper-V 的交换机是在系统启动后才初始化的,为了防止 IP 冲突就得每次自动随机出一个 IP 来。但是手动创建的虚拟交换机不受影响
    BeautifulSoap
        11
    BeautifulSoap  
    OP
       Jan 15, 2021
    @baobao1270 这不是技术问题,wsl2 初始化的时候随机一个未使用 ip 段确保不出现冲突然后不变就行了。为了不出现 ip 冲突就每次重启都删了 wsl 的虚拟交换机然后重新创建实在太因噎废食了
    fengwn
        12
    fengwn  
       Jan 24, 2021
    都用了 192.168 私有网段,那还不如上虚拟机或者直接用 Docker for window(虽然挺操蛋的).一劳永逸的话,直接 Linux 平台走起.
    BeautifulSoap
        13
    BeautifulSoap  
    OP
       Jan 24, 2021
    @fengwn 都说了根据自己情况更改配置,不想用 192.168 那就用其他 ip 段,没人限制你用其他 ip 段

    我就是为了更好体验地使用 Docker for windows 才从虚拟机迁移到 wsl2 的,你竟然说干嘛不用回虚拟机或用 Docker for Windows

    至于直接用 Linux,明显就是一逸永劳
    petshop
        14
    petshop  
       Jan 25, 2021
    请问如何讲 bat 设置开机启动 我吧 bat 放到了 \Start Menu\Programs\Startup 文件夹下但好像不会自己运行 还有自动启动的脚本要如何设置管理员运行
    EdwinHui
        15
    EdwinHui  
       Feb 26, 2021
    @forbxy 请问你这样做的话,开发用的文件是放在宿主机上,虚拟机通过 /mnt 访问,还是直接放在虚拟机内部?
    xiecanmy
        16
    xiecanmy  
       Mar 12, 2021
    @petshop 计划任务, 记得设置为最高权限
    bearboss
        17
    bearboss  
       Apr 16, 2021
    里面的 ip 之类的得根据现有的 ip 替换吗 比如现有的是 172 开头的 子网段也不一样
    BeautifulSoap
        18
    BeautifulSoap  
    OP
       Apr 16, 2021
    @bearboss 有点没理解,如果是想固定 ip 的话,两行命令中的 ip 只要和现有 ip 段之类的冲突,是可以随意设置的
    bearboss
        19
    bearboss  
       Apr 16, 2021
    @BeautifulSoap 这样设置后局域网内其他电脑用这个 ip 能远程访问到 wsl 吗 如果不设置成同个网段的话 计网不好请见谅
    BeautifulSoap
        20
    BeautifulSoap  
    OP
       Apr 16, 2021   1
    @bearboss 只要这个 ip 的流量被转发到运行 wsl2 的宿主机就能访问到 wsl2

    这时候分两种情况:
    1. 同一台电脑上的多个局域网(比如不同虚拟机),一般不需要特别设置就能直接访问到(因为虚拟机一般都默认把宿主机设置为网络的网关,如果没有设置的话设置下网关就行了)

    2. 同一个物理局域网中的其他电脑的话,需要简单设置下路由表(因为你 wsl2 的独立 ip 其他电脑是不可能知道这 ip 是拿来干嘛的)把 wsl2 的 ip 路由到你运行 wsl2 的宿主机上。或者觉得麻烦,可以在路由器里设置下路由规则,这样所有接入局域网的设备都能访问到你的 wsl2 了
    smallthing
        21
    smallthing  
       Apr 30, 2021
    其实微软完全可以做一个 GUI,喜欢现有设定的选 default,希望固定 ip 的自己定一个.
    UN2758
        22
    UN2758  
       Dec 7, 2021
    @BeautifulSoap #20 大佬,在无法设置路由器路由表的情况下,怎么设置其他电脑的路由表啊?比如我有 mac 和 winpc 处于同一局域网,mac 想访问 winpc 上的 wsl2 ,winpc 和 wsl2 设置了新子网 192.168.120.100 和 199 ,mac 上应该如何设置呢
    BeautifulSoap
        23
    BeautifulSoap  
    OP
       Dec 7, 2021
    @UN2758 没法碰路由器的话那就只能给 mac 单独设路由表了,mac 具体怎么配置路由表我没 mac 所以不清楚,应该一搜一大把

    至于怎么个思路,就是设置 mac 路由表,让 mac 把 192.168.120.199 流量给路由到 winpc 的 192.168.120.100 上就行了,winpc 接收到流量后会自动处理

    这方法我在同一台电脑上不同虚拟机上试过没问题
    UN2758
        24
    UN2758  
       Dec 7, 2021
    @BeautifulSoap #23 忘了说了,mac 和 winpc 的局域网网址是 192.168.1.107 和 111 ,这算是属于另一个子网吧,这种情况下设置路由表也能路由到吗
    BeautifulSoap
        span class="no">25
    BeautifulSoap  
    OP
       Dec 7, 2021
    @UN2758 啊,不好意思我理解错了。想了下和我之前同一台电脑不同虚拟机情况不太一样。这情况应该是没法通过指定路由表来转发流量的
    davelm
        26
    davelm  
       Nov 25, 2022
    不知道能不能固定 ipv6 ,这样就能直接公网访问了
    gkdgkd
        27
    gkdgkd  
       Mar 16, 2023
    @interim 这个好,学到了
    About     Help     Advertise     Blog     API     FAQ     Solana     4873 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 74ms UTC 10:01 PVG 18:01 LAX 03:01 JFK 06:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86