Невозможно смонтировать 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и это сработало.

Другие вопросы по тегам