Mac 使用 SSH 隧道在端口 80 上监听 IPv4 127.0.0.1 和 IPv6 ::1,但无法使用 IPv4 进行连接?

Mac 使用 SSH 隧道在端口 80 上监听 IPv4 127.0.0.1 和 IPv6 ::1,但无法使用 IPv4 进行连接?

我正在使用 openssh 连接到远程服务器,该服务器运行着一个 Web 服务器,我需要像从服务器本身一样访问它。因此我使用 ssh-tunneling,如下所示:

sudo ssh -L 80:127.0.0.1:7065 [email protected]

在我的 Mac 上,netstat 现在显示:

$ netstat -na|grep 80.*LIST
tcp4       0      0  127.0.0.1.80           *.*                    LISTEN     
tcp6       0      0  ::1.80                 *.*                    LISTEN  

(并且我之前已验证过,这些端口上没有任何东西被监听。)但是,如果我尝试使用 telnet 连接到 127.0.0.1 端口 80,我会得到以下信息:

$ telnet 127.0.0.1 80
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
telnet: Unable to connect to remote host

如果我改为连接到 ::1 (IPv6),则会获得预期的连接。在 IPv4 telnet 命令中添加 -4 没有任何区别。

我发现这个问题是因为我在 /etc/hosts 中只添加了服务器名称,地址为 127.0.0.1,而没有添加 ::1,因此无法从浏览器访问。添加 ::1 的名称解决了从浏览器导航网站的直接问题,但我仍然对这个问题感到困惑,无法找到原因。

我正在使用 Mac OS X 10.8.5。

附录:我刚刚尝试将不同的服务(端口 22,SSH)转发到我机器上的各个本地端口(包括端口 25,另一个特权端口)。除端口 80 外,其他一切正常。所以这似乎是与我机器上的端口 80 有关的异常。

答案1

我曾经遇到过同样的问题。

一个解决方案是不使用端口 80,而是使用端口 23

另一个是禁用隐身模式(启用对 icmp 请求的应答)。

希望这可以帮助

相关内容