我有一个绑定到端口 8000 的 HTTP 服务,我想从网络上的另一台计算机访问它,但我似乎无法使用该机器的外部 IP 地址(例如 192.168.0.105)进行连接。我已检查 OS X 防火墙是否未运行,因此我假设问题是该服务仅绑定到 IP 地址 127.0.0.1,而不是外部 IP 地址。
将端口 8000 上的外部连接临时转发到 127.0.0.1:8000 的最简单方法是什么?
答案1
无需重新配置底层服务即可使本地绑定端口可用于公共接口的最简单、最快捷的方法是创建 ssh 端口转发并使其在全球范围内可用(默认情况下它仅在本地侦听)
由于是同一台机器,因此您必须使用不同的端口。在运行该服务的 Mac 上,启动
ssh -v -g -L 8001:localhost:8000 localhost
-v
详细,这样你就能看到传入的连接
-g
使其在公共界面上可用
-L port:targethost:targetport
嗯,你已经知道了:-)
如果您的机器上有多个活动接口,请扩展语句-L
以包含您想要将其绑定到的地址。
答案2
使用 ipfw,它类似于 linux 中的 iptables。
我猜您正在使用 ssh 端口将服务转发到本地。
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.0.105 dst-port 8000
网络上的另一台机器可以通过 192.168.0.105:8000 访问该服务
答案3
如果我理解正确的话,乌贼可能会有效。另外,尝试计算机名称而不是 IP,或者其他服务(ping、VNC、FTP 等)
答案4
首先,确保你正在解决正确的问题。你可以使用以下命令检查 Web 服务器正在监听哪些 IP netstat
:
$ netstat -an | grep LISTEN
tcp46 0 0 *.8000 *.* LISTEN
tcp4 0 0 *.88 *.* LISTEN
tcp6 0 0 *.88 *.* LISTEN
tcp4 0 0 127.0.0.1.631 *.* LISTEN
tcp6 0 0 ::1.631 *.* LISTEN
在此示例的第一行中,“*.8000”表示某个东西(可能是 Web 服务器)正在所有绑定 IP 上的端口 8000 上监听。另一方面,最后两行表示某个东西正在 IPv4 和 IPv6 环回(127.0.0.1 和 ::)上的端口 631 上监听。如果您在运行命令时看到“127.0.0.1:8000”,则表明您的诊断是正确的。
如果这是问题所在,那么最好的解决方法可能是将 Web 服务器绑定到所有 IP,而不是尝试使用转发器来解决这个问题。检查您的 Apache 配置文件(OS X 上的默认配置文件是 /etc/apache2/httpd.conf,以及其中“Include”的所有内容)是否有“Listen”指令。如果您看到
Listen 127.0.0.1:8000
将其更改为
Listen 8000