我在 ISP 的 Arris 路由器后面的本地 IP 上有一个 ubuntu 盒子。我在路由器上为端口 80 设置了端口转发,以便将 TCP/UPD 转发到 ubuntu 盒子的本地 IP。
但是,我无法使用公网 IP 进行 telnet,也无法通过公网 IP 访问 ubuntu 上的 apache 欢迎页面。我可以从我的 mac 上的端口 80 上 telnet 到 ubunut 的本地 IP,也可以通过 ssh 进入。我还禁用了 Ubuntu 上的防火墙进行测试,但我仍然无法通过公网 IP 访问 ubuntu。
我已经检查过,端口 80 在公共 IP 上是开放的,22 也是开放的,但 21 没有开放。
不知道接下来该去哪里。有什么建议吗?
编辑:traceroute的输出如下:
traceroute to 72.24.237.82 (72.24.237.82), 30 hops max, 60 byte packets
praha-4d-c1-vl55.masterinter.net (77.93.199.253) 0.499 ms 0.493 ms 0.544 ms
ae-5-5.car1.KansasCity1.Level3.net (4.69.135.229) 149.079 ms
CABLEONE.car1.KansasCity1.Level3.net (4.53.32.30) 146.839 ms 146.722 ms
CABLEONE.car1.KansasCity1.Level3.net (4.53.32.30) 146.163 ms 146.822 ms *
* * *
* * *
我认为这意味着 CABLEONE.car1.KansasCity1.Level3.net 不允许任何东西通过它。但这到底意味着什么呢?
答案1
许多路由器不支持这种反向遍历。
(从内部的机器连接到外部。)
这可能是您遇到的问题的一部分。
此外:对于 telnet,您需要端口 23,22 是 SSH,21(与 20 一起)是 FTP。
要检查端口转发是否正常工作,您可以使用类似 ShieldsUp! 的工具(www.grc.com,单击 ShieldUp! 徽标,在下一页中它位于“服务”菜单中。)
答案2
ICMP 从外部回显到路由器 IP。您可以使用 traceroute 或 ping 来执行此操作。如果它到达路由器,则检查 apache 是否正在运行,是否在端口 80 上监听。
netstat -patn
我认为问题可能出在转发规则上。它可能被设置为不存在的 IP 或错误的端口。我真的没有看到其他选择。
嗯,老实说,我没有发现问题。我刚刚连接到 IP http://72.24.237.82/,它运行正常。
这是我的请求:
GET http:// 72 . 24 . 237 . 82 / HTTP/1.1
Host: 72.24.237.82
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
这是来自服务器的响应:
HTTP/1.1 200 OK
Date: Fri, 27 Jul 2012 18:40:44 GMT
Server: Apache/2.2.22 (Ubuntu)
Last-Modified: Fri, 27 Jul 2012 06:40:58 GMT
ETag: "5427ef-b1-4c5c9feaa5dc5"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Length: 177
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
<html><body><h1>It works!</h1>
<p>This is the default web page for this server.</p>
<p>The web server software is running but no content has been added, yet.</p>
</body></html>
您是否可以尝试使用您想要连接的网络内的外部 IP 地址?那么您要连接的路由器是否与您连接互联网时经过的路由器相同?如果是这样——在很多情况下这是不可能的。
答案3
您是否尝试过禁用 selinux?或者至少将其置于宽容模式?
我发现如果我遇到这样的问题,正常的解决方法是禁用 selinux!