![如何将转发的本地端口绑定到 0.0.0.0 而不是 127.0.0.1?使用 GatewayPorts=yes 时“不允许操作”](https://linux22.com/image/229854/%E5%A6%82%E4%BD%95%E5%B0%86%E8%BD%AC%E5%8F%91%E7%9A%84%E6%9C%AC%E5%9C%B0%E7%AB%AF%E5%8F%A3%E7%BB%91%E5%AE%9A%E5%88%B0%200.0.0.0%20%E8%80%8C%E4%B8%8D%E6%98%AF%20127.0.0.1%EF%BC%9F%E4%BD%BF%E7%94%A8%20GatewayPorts%3Dyes%20%E6%97%B6%E2%80%9C%E4%B8%8D%E5%85%81%E8%AE%B8%E6%93%8D%E4%BD%9C%E2%80%9D.png)
(远程)SSH 服务器remote
在(远程)127.0.0.1 端口 20001 上运行服务。我想通过 SSH 端口转发在本地提供此服务:
ssh -vvv -4 -L 20001:127.0.0.1:20001 remote
使用此命令可以很好地进行端口转发和访问服务。
但是,隧道绑定到我的本地计算机上的 127.0.0.1,因此只能在运行 SSH 命令的本地计算机上访问远程服务。我希望隧道绑定到 0.0.0.0,以便通过连接到本地计算机端口 20001,在我的本地 LAN 中可以使用远程服务。
该选项的联机帮助页-L
提到:
默认情况下,本地端口根据 GatewayPorts 设置进行绑定。然而,可以使用显式的bind_address 将连接绑定到特定地址。 “localhost”的bind_address 表示侦听端口仅限本地使用,而空地址或“*”表示该端口应可从所有接口使用。
来源:https://manpages.debian.org/bookworm/openssh-client/ssh.1.en.html#L
所以我添加了GatewayPorts=yes
设置并尝试了两者
ssh -vvv -4 -o GatewayPorts=yes -L 20001:127.0.0.1:20001 remote
也
ssh -vvv -4 -o GatewayPorts=yes -L *:20001:127.0.0.1:20001 remote
但我收到以下错误:
debug1: Local connections to *:20001 forwarded to remote address 127.0.0.1:20001 debug3: channel_setup_fwd_listener_tcpip: type 2 wildcard 1 addr NULL debug1: Local forwarding listening on 0.0.0.0 port 20001. listen: Operation not permitted listen [0.0.0.0]:20001: Operation not permitted channel_setup_fwd_listener_tcpip: cannot listen to port: 20001 Could not request local forwarding.
如何将转发的本地端口绑定到 0.0.0.0 而不是 127.0.0.1?错误从何而来?
- 当绑定到127.0.0.1时,该端口可用。尽管如此,我还是仔细检查了
netstat
该端口未被使用。 - 它对运行 SSH 命令没有帮助
sudo
。 - 我假设只有当您想在远程端使用绑定 0.0.0.0 的远程端口转发时才需要在服务器上进行
GatewayPorts=yes
设置。sshd_config
无论如何,我更改了服务器配置,重新启动了服务器,正如预期的那样,这对我用于本地端口转发的 SSH 命令没有影响。