我家里的局域网上有两个 Raspberries Pi -rasrho
和rasnu
。rasrho
我的路由器将一个 ssh 端口转发给它,这样我就可以从局域网外部 ssh 到它。 rasnu
正在运行 NFS 服务器。我的最终目标是允许外部用户(具有 ssh 访问权限rasrho
)能够挂载托管在 上的 NFS 服务器rasnu
- 但到目前为止,我甚至无法通过 ssh 隧道连接内部。
NFS 服务器rasnu
已配置,以便我的 LAN 上的其他机器可以成功连接:
pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ sudo mount -t nfs rasnu.local:/media /mnt/NFSDirectory
pi@rasrho:~ $ ls /mnt/NFSDirectory
[listing of the directories from the NFS Server]
但是,当我设置从rasrho
到 的ssh 隧道时rasnu
,挂载失败(端口引用来自这里):
pi@rasrho:~ $ ssh -fN -L 2049:localhost:2049 [email protected]
pi@rasrho:~ $ ssh -fN -L 32323:localhost:32323 [email protected]
pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ sudo mount -vvv -t nfs4 localhost:/media /mnt/NFSDirectory
mount.nfs: timeout set for Thu Apr 9 06:36:19 2020
mount.nfs: trying text-based options 'vers=4.2,addr=::1,clientaddr=::1'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'vers=4.1,addr=::1,clientaddr=::1'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'vers=4.1,addr=127.0.0.1,clientaddr=127.0.0.1'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting localhost:/media
尽管服务器/etc/exports
允许从以下位置安装127.0.0.1
:
pi@rasnu:~ $ cat /etc/exports
/media 192.168.42.0/255.255.255.0(ro,no_subtree_check,insecure)
/media 127.0.0.1(ro,no_subtree_check,insecure,no_root_squash)
这个配置有什么问题?并且,在我的计划中,我是否可能遇到其他隐藏的“陷阱”,允许单独网络上的主机通过执行ssh -fN -L *:2049:rasnu.local:2049 <external_address_of_rasrho>
(和类似的32323
)来挂载此 NFS 服务器“就像它是本地的”?
(特别是,尽管按照以下说明执行,但我无法生成/var/log/messages
与这些权限失败相关的任何日志rpcdebug -m nfsd -s all
这里)
编辑:阅读后本文,我尝试将我rasnu
的改为/etc/exports
:
/mnt/drive *(ro,sync,insecure,hide,no_root_squash,fsid=0,no_subtree_check)
/mnt/drive/media *(ro,sync,insecure,hide,no_root_squash,fsid=1,no_subtree_check)
(并继续跑sudo exportfs -r
)rasnu
,然后:
pi@rasrho:~ $ ls /mnt/NFSDirectory
[null]
pi@rasrho:~ $ ssh -fN -R :3049:rasnu.local:2049 rasrho.local
pi@rasrho:~ $ sudo mount -t nfs -o port=3049 localhost:/media /mnt/NFSDirectory
pi@rasrho:~ $ ls /mnt/NFSDirectory
[...results...]
但是,我无法从我的 Mac 上执行等效操作(仍然与这两个 Raspberries Pi 在同一个 LAN 上 - 使用-L
而不是-R
因为我正在尝试转发本地端口):
me@macbook:~ $ ls /mnt/NFSDirectory
[null]
me@macbook:~ $ ssh -fN -L :3049:rasnu.local:2049 rasrho.local
me@macbook:~ $ sudo mount -t nfs -o port=3049 localhost:/media /mnt/NFSDirectory
mount_nfs: can't mount /media from localhost onto /mnt/NFSDirectory: Connection refused
我将继续进行实验,看看这是否只是我的 Mac 的一些异常行为,以及我是否可以通过公共互联网成功隧道传输此 NFS 挂载。
答案1
还请尝试为 mountd 端口创建一个 ssh 隧道,然后使用 mount 选项进行挂载mountport=$MOUNTD_PORT_ID
。
sudo netstat -l
您可以在 nfs 服务器上运行来找到 mountd 端口,并查看 mountd 正在监听什么。
因此,如果 mountd 正在监听 939,则创建到它的隧道。
ssh -L 3333:127.0.0.1:939 -N $NAS_SERVER
那么 mount 命令将会像这样
sudo mount -t nfs -o port=3049,mountport=3333 localhost:/media /mnt/NFSDirectory