Невозможно смонтировать NFS из WSL2 Ubuntu 22.04
Я пытаюсь подключить общий ресурс NFS из WSL2 под управлением Ubuntu 22.04. Это отлично работает на родной Ubuntu. Я редактирую /etc/fstab, добавляя:
172.16.0.113:/mnt/share/yocto-cache /home/tom/cache nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
Но я получаю:
$ sudo mount -vvv /home/tom/cache
mount.nfs: timeout set for Thu Mar 9 07:57:54 2023
mount.nfs: trying text-based options 'nolock,intr,tcp,actimeo=1800,vers=4.2,addr=172.16.0.113,clientaddr=172.23.196.48'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'nolock,intr,tcp,actimeo=1800,vers=4,minorversion=1,addr=172.16.0.113,clientaddr=172.23.196.48'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'nolock,intr,tcp,actimeo=1800,addr=172.16.0.113'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 172.16.0.113 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying 172.16.0.113 prog 100005 vers 3 prot TCP port 56713
mount.nfs: mount(2): Permission denied
mount.nfs: Operation not permitted
Я попробовал решение из режима NIC Bridge [WSL 2] (есть обходной путь TCP) (найдено в разделе «Отказано в разрешении NFS при монтировании из WSL »), но с измененными портами и добавленной поддержкой UDP, но все равно безуспешно:
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
if( $found ){
$remoteport = $matches[0];
echo "IP address of WSL 2 = " $remoteport;
} else{
echo "The Script exited, the IP address of WSL 2 cannot be found";
exit;
}
# [Ports]
# All the ports you want to forward separated by comma
$ports=@(111,2049);
# [Static ip]
# You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";
# Remove Firewall Exception Rules
# iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Outbound TCP' ";
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Inbound TCP' ";
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Outbound UDP' ";
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Inbound UDP' ";
# adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Outbound TCP' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Inbound TCP' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Outbound UDP' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol UDP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock Inbound UDP' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol UDP";
for( $i = 0; $i -lt $ports.length; $i++ ){
$port = $ports[$i];
iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}
1 ответ
Наконец я получил доступ к серверу и проверил системный журнал после попытки подключения:
Jun 21 02:36:33 fileserver rpc.mountd[470]: refused mount request from 172.16.2.202 for /mnt/share/yocto-cache (/mnt/share): illegal port 53942
Порт 53942 не соответствует тому, что показал журнал WSL2, поэтому я предполагаю, что происходит какая-то трансляция портов. Коллега предложил мне попробовать /questions/46339/alternativyi-ispolzovaniyu-elektronnoj-pochtyi-v-chastnosti-outlook-v-kachestve/46348#46348 , поэтому я добавилinsecure
к/etc/exports
и это сработало.