我想通过以下方式在本地网络上访问 Raspberry Pi Zero WNAT 遍历.我关注的是本教程(中文),但遇到了下面描述的问题。
这个想法是将本地 Raspberry Pi 上的 SSH 端口转发到具有公共 IP 的远程机器,然后从那里访问 Pi。出于安全原因,我已将实际值替换为nalzok@remote-ip
。
在 Raspberry Pi 上(从本地网络访问)
pi@nalzoks-pi:~ $ autossh -M 30000 -o "StrictHostKeyChecking=false" -o "ServerAliveInterval 10" -o "ServerAliveCountMax 3" -NR 20000:localhost:22 nalzok@remote-ip
在远程服务器上
我从远程服务器登录 Pi 没有任何问题
nalzok@iZuf68c45z6sk19lln4zvsZ:~$ ssh -p20000 pi@localhost
Linux nalzoks-pi 4.19.66+ #1253 Thu Aug 15 11:37:30 BST 2019 armv6l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sun Sep 8 10:12:30 2019 from ::1
pi@nalzoks-pi:~ $
在我的计算机上(本地网络之外)
但是,我无法直接从我的计算机访问它。
$ ssh -p20000 pi@remote-ip
ssh: connect to host remote-ip port 20000: Connection refused
在远程服务器上
我很确定防火墙已为远程服务器上的端口 20000 和 30000 开放。当我尝试自己解决问题时,我意识到这些端口仅可用于本地访问。
nalzok@iZuf68c45z6sk19lln4zvsZ:~$ sudo lsof -i -P -n | grep LISTEN
[sudo] password for nalzok:
sshd 601 root 3u IPv4 13223 0t0 TCP *:22 (LISTEN)
sshd 12503 root 8u IPv4 879255 0t0 TCP 127.0.0.1:1234 (LISTEN)
sshd 13026 nalzok 9u IPv4 885817 0t0 TCP 127.0.0.1:30000 (LISTEN)
sshd 13026 nalzok 10u IPv4 885818 0t0 TCP 127.0.0.1:20000 (LISTEN)
如何开放端口 20000 供公众访问?
答案1
这种远程转发行为在SSH 手册页:
默认情况下,服务器上的 TCP 侦听套接字将仅绑定到环回接口。这可以通过指定 bind_address 来覆盖。空的 bind_address 或地址“*”表示远程套接字应侦听所有接口。仅当启用了服务器的 GatewayPorts 选项时,指定远程 bind_address 才会成功(请参阅 sshd_config(5))。
如果GatewayPorts
选项在服务器上启用,您可以像这样指定远程转发以利用它:
-R *:20000:localhost:22