目录
- WSL2
- 安装 NFS 相关服务
- 创建共享文件夹
- 修改文件夹权限
- 编辑/etc/exports以挂载文件夹
- 调整防火墙
- 重启NFS服务并开启rpcbind
- Windows
- PowerShell 自定义配置
- 监听端口
- 开启防火墙
- 外部设备
- 挂载文件系统
- 测试
- 尾声和补充
WSL2
安装 NFS 相关服务
安装nfs-kernel-server和rpcbind
sudo apt-get install nfs-kernel-server rpcbind
检查服务启动状态
systemctl status nfs-kernel-server
创建共享文件夹
sudo mkdir /mnt/nfs
修改文件夹权限
修改拥有者和组
sudo chown nobody:nogroup /mnt/nfs
运行任何人访问
sudo chmod 777 /mnt/nfs
编辑/etc/exports以挂载文件夹
添加内容:
/mnt/nfs *(rw,sync,no_root_squash,no_subtree_check)
检查配置文件/etc/export是否有错误
sudo exportfs -ar
使启动立即生效
sudo exportfs -rv
检查是否挂载成功
showmount -e
调整防火墙
指定信任的IP
sudo ufw allow from [Client IP] to any port nfs
指定网段
比如:
sudo ufw allow from 192.168.1.0/24 to any port nfs
允许任何人
sudo ufw allow from any to any port nfs
或者
sudo ufw allow to any port nfs
重启NFS服务并开启rpcbind
sudo /etc/init.d/nfs-kernel-server restart
sudo service rpcbind start
Windows
PowerShell 自定义配置
启动用powershell运行以下命令查看文件配置文件所在路径
$PROFILE
在该位置新建任意名字的.ps1文件
并写入如下
# 获取 WSL 的 IP 地址
$WSLIP = $(wsl hostname -I).Split(" ")[0].Trim()# 添加 WSL 端口转发和防火墙规则
function Add-WSLPort ($Port = '23333', $Protocol = 'TCP') {netsh interface portproxy add v4tov4 listenport=$Port connectaddress=$WSLIP connectport=$Port protocol=$ProtocolNew-NetFirewallRule -DisplayName "Allow ${Protocol} Inbound Port ${Port}" -Direction Inbound -Action Allow -Protocol $Protocol -LocalPort $Port
}# 移除 WSL 端口转发和防火墙规则
function Remove-WSLPort ($Port = '23333', $Protocol = 'TCP') {netsh interface portproxy delete v4tov4 listenport=$Port protocol=$ProtocolGet-NetFirewallRule -DisplayName "Allow ${Protocol} Inbound Port ${Port}" | Remove-NetFirewallRule
}
监听端口
用管理员权限启动powershell
运行命令开启监听
Add-WSLPortForwarding 2049
Add-WSLPortForwarding 443
查看状态
netsh interface portproxy show v4tov4
开启防火墙
依然在之前的窗口
添加入站规则:允许443,2049端口
New-NetFirewallRule -DisplayName "WSL NFS TCP" -Direction Inbound -LocalPort 443,2049 -Protocol TCP -Action Allow
外部设备
挂载文件系统
创建文件夹用于挂载远程文件系统
sudo mkdir ~/nfs_share
挂载
sudo mount <IP>:/mnt/nfs ~/nfs_share
命令原型:
sudo mount [Server IP]:[Path to shared] [mount point]
测试
- 外部设备
cd ~/nfs_share
touch test.txt
echo "Hi" > ./test.txt
sync
- WSL
ls /mnt/nfs/test.txt # 如果没有文件可能需要sync同步试试
cat /mnt/nfs/test.txt
Hi
尾声和补充
关于删除防火墙规则
先检查是否存在
Get-NetFirewallRule -DisplayName "WSL NFS *"
删除
Remove-NetFirewallRule -DisplayName "WSL NFS TCP"
参考资料:
WSL2:实现客户端和服务端之间的NFS服务
WSL 2 网络配置