配置目标

将WSL2默认的NAT网络改成桥接模式,使得外部设备可直接ping通WSL2下的Linux虚拟机ip,并在此基础上,搭建可供外部设备挂载的NFS服务器。

测试平台:Win10+WSL2+Ubuntu20.04

参考链接:

  1. WSL2开启桥接网络 | 逸思杂陈
  2. Linux Tips - NFS Server on Windows using WSL (2022) - YouTube

WSL2设置桥接网络

修改Hyper-V虚拟交换机配置

首先关闭wsl,以管理员身份运行PowerShell,输入wsl --shutdown,然后在Win10任务栏搜索并启动“Hyper-V管理器”,点击右侧“虚拟机交换机管理器”,进入配置页面,将WSL的交换机连接类型改为外部网络即可,注意选择正确的外部网卡。

设置WSL2虚拟机静态IP和域名解析

将WSL2虚拟机修改为桥接网络后,原本基于NAT映射的IP地址将不能使用,所以需要手动配置虚拟机的IP地址和域名解析。

首先是IP地址和默认路由,按照实际网络环境,使用ifconfig和route命令进行配置即可,示例如下:

ifconfig eth0 192.168.0.110 netmask 255.255.255.0
route add default gateway 192.168.0.1

接下来是配置域名解析,首先创建/etc/wsl.conf文件,写入以下内容,这段内容是防止WSL自动生成resolv.conf文件,在原版的/etc/resolv.conf注释中有描述:

/etc/wsl.conf
[network]
generateResolvConf = false

然后就是修改默认的域名解析,备份并删除/etc/resolv.conf,创建新的/etc/resolv.conf文件,写入以下内容:

/etc/resolv.conf
nameserver 192.168.0.1

最后通过chattr将/etc/resolv.conf设置为不可修改和删除,以防止某此应用自动修改这个文件(实测启动vscode会导致这个文件被还原,所以增加这步操作):

chattr +i /etc/resolv.conf

如果后续想修改/etc/resolv.conf,需要先执行chattr -i /etc/resolv.conf,以解除对/etc/resolv.conf的保护。

关于重启后主机网络不可用问题

主机重启后以太网可能不可用,需要在外网网口的网络设置里取消“Hyper-V可扩展的虚拟交换机”选项,并重新配置WSL2的交换机桥接类型为外部网络。

搭建NFS服务器

经过上面的步骤,外部设备已经可以ping通WSL2虚拟机了,接下来在WSL2虚拟机上搭建NFS服务器,以实现挂载服务,这里使用Ubuntu20.04进行演示。

首先安装NFS相关的软件包,有以下包要安装:

apt install nfs-common nfs-kernel-server rpcbind

其中nfs-common提供了作为客户端进行挂载所需的工具,而nfs-kernel-server和rpcbind则提供了搭建NFS服务所需的工具。

接下来创建挂载目录以及修改目录的属性,这里以/root/hisi作为挂载目录进行设置:

mkdir /root/hisi
chown nobody:nogroup /root/hisi
chmod 777 /root/hisi

然后是修改/etc/exports文件,指定NFS的导出目录以及访问者属性:

/etc/exports
/root/hisi *(rw,sync,no_subtree_check,no_root_squash,insecure)

no_root_squash选项表示如果客户端以root身份访问共享路径时自动具有root权限,不加这项的话root用户会被映射为匿名用户,导致无写入权限。


最后启动NFS相关的服务:

service rpcbind start
service nfs-kernel-server start
exportfs -a

至此NFS服务已顺利启动了,可以在其他设备上进行挂载测试,以下是一个测试命令:

mount -t nfs -o nolock 192.168.0.110:/root/hisi /mnt























  • 无标签