NFS+SSH隧道实现VPS挂载本地外部硬盘失败求助
NFS+SSH隧道实现VPS挂载本地外部硬盘失败求助
各位大佬好!我最近在折腾让VPS挂载本地电脑的外部硬盘,参考了一篇对比NFS/SMB/SSHFS的指南后,最终选择了NFS+SSH隧道的方案,但卡在挂载环节一直失败,折腾了好久都没找到问题所在,把我的操作步骤、报错信息和排查内容都贴出来,求帮忙分析下!
本地电脑操作步骤
- 安装NFS相关依赖:
apt-get install nfs-kernel-server nfs-common portmap
- 编辑NFS导出配置文件:
nano /etc/exports
添加以下导出规则(指定VPS的IP访问权限):
/mnt/mn1 102.254.243.168(insecure,rw,sync,no_subtree_check,no_root_squash)
- 重启NFS服务使配置生效:
systemctl restart nfs-kernel-server.service
- 配置防火墙规则,允许VPS访问SSH和NFS相关端口:
iptables -A INPUT -i enp4s0f0 -p tcp --dport 22 -s 102.254.275.167 -j ACCEPT iptables -A INPUT -i enp4s0f0 -p tcp --dport 3049 -s 102.254.275.167 -j ACCEPT ufw allow from 102.254.275.167 to any port nfs
VPS操作步骤
- 安装NFS客户端依赖:
apt-get install nfs-common portmap
- 创建本地挂载目录:
mkdir /mnt/mn1
- 建立SSH隧道,将VPS的3049端口转发到本地电脑的NFS默认端口2049:
ssh -fNv -L 3049:localhost:2049 root@164.238.71.109 -i nas
这条隧道命令执行后,用
lsof -i :3049能看到SSH进程正在监听3049端口,看起来隧道是正常建立的
挂载失败的报错信息
尝试NFS通用挂载命令
mount -v -t nfs -o proto=tcp,port=3049 164.238.71.109:/mnt/mn1 /mnt/mn1
报错内容:
mount.nfs: timeout set for Sat Oct 28 18:19:00 2023 mount.nfs: trying text-based options 'proto=tcp,port=3049,vers=4.2,addr=164.238.71.109,clientaddr=102.254.275.167' mount.nfs: mount(2): Connection timed out mount.nfs: Connection timed out
尝试NFSv4挂载命令
mount -v -t nfs4 -o verproto=tcp,port=3049 164.238.71.109:/mnt/mn1 /mnt/mn1
报错内容(核心错误重复出现):
mount.nfs4: timeout set for Sat Oct 28 18:06:15 2023 mount.nfs4: trying text-based options 'verproto=tcp,port=3049,vers=4.2,addr=164.238.71.109,clientaddr=102.254.275.167' mount.nfs4: mount(2): Invalid argument mount.nfs4: trying text-based options 'verproto=tcp,port=3049,vers=4.1,addr=164.238.71.109,clientaddr=102.254.275.167' mount.nfs4: mount(2): Invalid argument mount.nfs4: trying text-based options 'verproto=tcp,port=3049,addr=164.238.71.109' mount.nfs4: prog 100003, trying vers=3, prot=6 mount.nfs4: portmap query retrying: RPC: Program not registered mount.nfs4: prog 100003, trying vers=3, prot=17 mount.nfs4: portmap query failed: RPC: Unable to receive - Connection refused
额外排查信息
本地电脑侧
- 检查NFS端口状态:
rpcinfo -p | grep nfs
输出:
100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs
- 扫描VPS端口(本地执行):
nmap -Pn 102.254.275.167
输出:
Starting Nmap 7.80 at 2023-10-28 16:58 WEST Nmap scan report for hostname.com (102.254.275.167) Host is up (0.16s latency). Not shown: 969 filtered ports, 30 closed ports PORT STATE SERVICE 22/tcp open ssh
- 完整RPC服务列表:
rpcinfo -p
输出:
program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 60788 status 100024 1 tcp 34639 status 100005 1 udp 42895 mountd 100005 1 tcp 46313 mountd 100005 2 udp 55483 mountd 100005 2 tcp 38869 mountd 100005 3 udp 47377 mountd 100005 3 tcp 44549 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 100021 1 udp 60048 nlockmgr 100021 3 udp 60048 nlockmgr 100021 4 udp 60048 nlockmgr 100021 1 tcp 45775 nlockmgr 100021 3 tcp 45775 nlockmgr 100021 4 tcp 45775 nlockmgr
- NFS服务状态:
systemctl status nfs-server.service
输出:
● nfs-server.service - NFS server and services Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled) Drop-In: /run/systemd/generator/nfs-server.service.d └─order-with-mounts.conf Active: active (exited) since Sat 2023-10-28 16:54:42 WEST; 31min ago Process: 6470 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Process: 6471 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Main PID: 6471 (code=exited, status=0/SUCCESS) CPU: 5ms oct 28 16:54:42 benz systemd[1]: Starting NFS server and services... oct 28 16:54:42 benz systemd[1]: Finished NFS server and services.
VPS侧
- 检查SSH隧道监听状态:
lsof -i :3049
输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 1578 root 4u IPv4 37815 0t0 TCP localhost.localdomain:3049 (LISTEN) ssh 1578 root 5u IPv6 37816 0t0 TCP localhost:3049 (LISTEN)
- VPS的RPC服务列表:
rpcinfo -p
输出:
program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 47567 status 100024 1 tcp 33615 status
现在实在搞不清楚哪里出问题了,是隧道转发的配置有问题?还是NFS导出规则或者防火墙限制了?有没有大佬能帮忙指点下!
备注:内容来源于stack exchange,提问作者Ben Muircroft
相关产品推荐
相关产品推荐

