设置固定 IP

每次重启电脑后给 wsl2 分配的 IP 一般都会变动,我们要连接子系统内部的应用频繁换 IP 会很麻烦,参照别人的解决方法,可以给 Ubuntu 子系统中添加一个新的网卡来给宿主机连接用。

wsl -l 命令看下你的子系统分发版列表,要设置的是哪个

PS C:\Users\uu> wsl -l
适用于 Linux 的 Windows 子系统分发版:
Ubuntu (默认)
# 指定发行版子系统,添加一个 eth0:1 网卡,IP 为 192.168.50.28(网段内自己随便设个 IP)
wsl -d Ubuntu -u root ip addr add 192.168.50.28/24 broadcast 192.168.50.255 dev eth0 label eth0:1

# 在Win10中添加IP地址 192.168.50.39
netsh interface ip add address "vEthernet (WSL)" 192.168.50.39 255.255.255.0

将这两个命令保存为 bat 脚本,创建一个快捷方式放桌面,设置管理员运行在这里插入图片描述
启动 wsl2 子系统直接运行就行了,要开机启动就加到启动项就行了

与子系统开机启动程序整合

子系统我们一般会设置一些服务开机自启,比如 ssh 、MySQL 或 Nginx 等等。
但 wsl 中无法直接使用systemd系统,用 /etc/init.d/xxx start 启动和 /etc/rc.loacl 启动的方法也都不能用了,可以换一种方式来间接启动,将需要启动的服务写在一个脚本中,参照别人的做法,在 Ubuntu 下创建并编辑文件:sudo vi /etc/init.wsl (名称后缀随便取,都行),可以把设置固定 IP 的那部分也加进来,后面自己还有其他服务需要自启往这里面加就是

#ssh
/etc/init.d/ssh start
#network static ip
ip addr add 192.168.50.28/24 broadcast 192.168.50.255 dev eth0 label eth0:1
#mysql
service mysql start

sudo chmod +x /etc/init.wsl 授权。然后改下上面的 bat 脚本

wsl -d Ubuntu -u root /etc/init.wsl
netsh interface ip add address "vEthernet (WSL)" 192.168.50.93 255.255.255.0

wsl --shutdown 关掉系统,运行 bat 脚本,ssh 进入看下,可以看到 eth0:1 网卡,进程树有 mysql 和 sshd

nathan@DESKTOP-A6TDDCF:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether b2:49:fe:6b:64:c3 brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 9a:c1:8a:80:cd:b2 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:48:2a:cd brd ff:ff:ff:ff:ff:ff
    inet 172.22.30.22/20 brd 172.22.31.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.50.28/24 brd 192.168.50.255 scope global eth0:1
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe48:2acd/64 scope link
       valid_lft forever preferred_lft forever
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
nathan@DESKTOP-A6TDDCF:~$ pstree
init─┬─init─┬─mysqld_safe───mysqld───38*[{mysqld}]
     │      └─sshd
     ├─init───wslconnect───bash───pstree
     └─{init}

参考

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐