当前位置:   article > 正文

WSL实现桥接网络并固定IP地址_wsl 固定ip

wsl 固定ip

        WSL在Linux开发过程中给开发人员提供了极大的便利,但同时存在一定的问题,就是IP地址不固定。对嵌入式开发人员来说,要求在固定的网络环境下对开发板进行调试,不太友好。因此笔者尝试对WSL实现桥接网络直连外部交换机,并关闭DHCP固定它的IP地址。

        要实现上述功能有两种方式,一种是临时对WSL的虚拟交换机进行修改,每次重启计算机后会重置;另一种是新建一个虚拟网络交换机,用来实现桥接网络,做好配置则可以保证其永久生效。

临时生效方案

        使用管理员权限运行powershell,运行“Get-NetAdapter | fl”获得网卡列表,从中选择需要桥接到的网卡(必须是物理网卡),笔者电脑上的物理网卡名叫WLAN。

Get-NetAdapter | fl

        在Windows系统下创建文本文档WSL2.bat,并填入以下内容(注意网卡名要填自己电脑上的,Ubuntu要改为自己主机上的子系统名称,且IP地址要和桥接的外部网卡在同一网段,路由地址应为外部网卡的网关地址)

  1. powershell -c "Set-VMSwitch WSL -NetAdapterName WLAN"
  2. wsl -d Ubuntu -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
  3. wsl -d Ubuntu -u root ip addr add 192.168.0.205/24 broadcast 192.168.0.255 dev eth0
  4. wsl -d Ubuntu -u root ip route add 0.0.0.0/0 via 192.168.0.1 dev eth0
  5. wsl -d Ubuntu -u root echo nameserver 192.168.0.1 ^> /etc/resolv.conf
  6. wsl -d Ubuntu -u root service ssh start

保存后,使用管理员身份运行WSL2.bat,运行结束后,进入WSL子系统,运行ifconfig查看是否修改成功。

        如果修改成功则显示如上图,但这种修改是临时的,意味着下次重启计算机后,设置又会被复位,因此每次重启都需要以管理员身份运行上述脚本。如果嫌麻烦,可以将脚本配置进开机启动项,这样就不需要人为操作了。

永久生效方案

        上述临时生效方案虽然可以将脚本配置成开机启动解决,但终归有些不太方便。出于追求完美的考虑,笔者还是尝试桥接网络的永久生效方案。(注意,永久生效方案需要Hyper-V管理器的支持,配置不高的电脑慎用,会卡到怀疑人生,如果实在想尝试,建议在装好虚拟交换机后卸载Hyper-V管理器)

安装Hyper-V管理器

        如果是专业版Windows操作系统,可以直接在“控制面板->程序和功能->启用或关闭Windows功能”界面选中Hyper-V后,确定退出并重启计算机。

        如果是家庭版Windows系统,则需要通过脚本进行安装,创建如下脚本"Hyper-V.bat"

  1. pushd "%~dp0"
  2. dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hv.txt
  3. for /f %%i in ('findstr /i . hv.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
  4. del hv.txt
  5. Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
  6. Pause

        保存后以管理员身份运行Hyper-V.bat,安装Hyper-V管理器,安装完成后重启计算机。

        安装完成后,可在Windows搜索栏内搜索Hyper-V管理器,打开后界面如上图所示。

创建桥接网络虚拟交换机

        按照下图标示的步骤创建虚拟交换机,将其命名为WSLBridge。

修改配置文件

        使用快捷键Win+R唤出运行窗口,在打开栏内填入%USERPROFILE%并在打开的文件夹内创建配置文件".wslconfig",并在该配置文件内输入以下内容。

  1. [wsl2]
  2. vmIdleTimeout=-1
  3. networkingMode=bridged
  4. vmSwitch=WSLBridge
  5. ipv6=true
  6. dhcp=false

        进入wsl的Ubuntu子系统,打开/etc/wsl.conf,若文件不存在则创建

sudo vim /etc/wsl.conf

        在wsl.conf配置文件内填入以下内容

  1. [boot]
  2. systemd = true
  3. [network]
  4. generateHosts = false
  5. generateResolvConf = false

        检查/etc/systemd/network/,若文件夹下没有文件则创建一个配置文件my-network.conf,若文件夹下有文件则忽略此步骤。

sudo vim /etc/systemd/network/my-network.conf

        在my-network.conf文件内填入以下内容

  1. [Match]
  2. Name=en*
  3. [Network]
  4. DHCP=ipv4

        重启networkd

sudo systemctl restart systemd-networkd.service

        打开配置文件/etc/netplan/00-wsl2.yaml,如果不存在就创建。

sudo vim /etc/netplan/00-wsl2.yaml

        在00-wsl2.yaml文件内填入以下格式的内容

  1. network:
  2. version: 2
  3. ethernets:
  4. eth0:
  5. dhcp4: no
  6. addresses: [静态IP地址/子网掩码]
  7. gateway4: 网关IP地址
  8. nameservers:
  9. addresses: [DNS服务器IP地址1, DNS服务器IP地址2]

举例如下:

  1. network:
  2. version: 2
  3. ethernets:
  4. eth0:
  5. dhcp4: no
  6. addresses: [192.168.0.205/24]
  7. gateway4: 192.168.0.1
  8. nameservers:
  9. addresses: [8.8.8.8, 114.114.114.114]

        然后使用sudo netplan apply应用新的网络设置,重启WSL2子系统即可。(出现类似以下报错可忽略)

        重启后,wsl子系统的IP地址将不再随机变化,且直接桥接到外部局域网,可更方便地用于进行网络调试以及嵌入式开发。(用这个方案可永久生效,只需配置一次)

卸载Hyper-V管理器

        由于Hyper-V管理器给笔者的笔记本电脑造成了较大的负荷,所以笔者决定将其卸载,以释放一定的计算资源。卸载Hyper-V后,之前创建的虚拟交换机仍然会正常工作,不受影响。

        在“控制面板->程序和功能->启用或关闭Windows功能”界面取消选中Hyper-V后,确定退出并重启计算机即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/547751
推荐阅读
相关标签
  

闽ICP备14008679号