我在不可配置的 NAT 后面有一个 Synology 服务器,在可配置的 NAT 后面有一个 Linux 机器。我想建立一个 autossh 隧道,以便在 Linux 机器上安装 NFS 驱动器(由 Synology 机器共享)。
从 synology 框中,我执行以下操作:
autossh -v -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -i /path/id_rsa -NL 2049:localhost:20049 [email protected] -p <forwarded_ssh_port>
但是,我收到以下错误:
debug1: Local connections to LOCALHOST:2049 forwarded to remote address localhost:20049
debug1: Local forwarding listening on ::1 port 2049.
bind [::1]:2049: Address already in use
debug1: Local forwarding listening on 127.0.0.1 port 2049.
bind [127.0.0.1]:2049: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 2049
Could not request local forwarding.
确实(当然),NFS 正在 synology 服务器上监听 2049:
user@synology:~$ netstat -plant|grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
关于如何建立该隧道同时避免监听端口冲突,您有什么想法吗?
提前致谢...
答案1
你的隧道是倒着的:如果 Linux 服务器想要挂载文件系统,那么 Synology 上的 ssh 不需要监听任何端口(为什么会这样,如果真实的NFS 服务已经这样做了)。
相反,隧道的“监听”端需要位于 Linux 服务器上(即您需要一个 SSH-R
隧道),然后它将连接到 Synology 上的真实 NFS 监听器。
ssh -R 22049:localhost:2049 [email protected]
(您也可以反向指定端口——监听端口首先出现,连接目标最后出现。)
答案2
好的,我想我解决了。我需要使用 -R,而不是 -L:
autossh -v -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -i /path/id_rsa -NR 2049:localhost:20049 [email protected] -p <forwarded_ssh_port>