我已经发布这我在 stackoverflow 上提问过一个问题,建议在这里提问。
过去两天我一直在努力解决这个问题,希望有人能帮助我。我有一个运行 Ubuntu 服务器 14.04 的虚拟机,上面安装了 tomcat7(通过 apt-get)。我希望它可以通过我的公共 IP 地址供本地网络外的计算机访问,但目前我无法通过这种方式连接到它。但是,我可以通过 192.168.1.120 在本地网络上连接到它。我的路由器(Western Digital My Net N600)设置为将端口 8080 上的请求转发到保存 tomcat7 的 VM。
在我的虚拟机上,iptables 设置如下:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http-alt
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Tomcat 本身运行良好,当我从 192.168.1.120:8080 访问它时,我可以连接并看到“它工作了!”页面。在谷歌搜索了一些之后,我认为这可能与 tomcat7 使用 IPv6 启动有关,所以我根据答案将其设置为首选 IPv4这里但仍然无法连接。
我有另一项服务(minecraft 服务器),托管在另一台虚拟机上,具有完全相同的路由器/iptable 设置(减去不同的端口号),确实可以工作。我只是不确定为什么 tomcat 不工作。
我尝试了除 8080 之外的其他端口,以防该特定端口号出现问题,但仍然一无所获。我还启动了 8080 端口的 tcpdump,当通过 192.168.1.120 访问时可以看到流量,但通过我的公共 IP 访问时看不到流量。此时,我想我要么忽略了一些非常基本的东西,要么是 tomcat 中的一些设置需要修复/更改,但我毫无头绪。
答案1
我怀疑是网关的端口转发功能不正确。检查网关是否将端口 8080 转发到虚拟机 (192.168.1.120)。我已经多次这样做了,而且一切正常……
在路由器上,使用您的用户名和密码登录到 GUI(admin/password 是默认凭据)
转到高级设置-->附加功能-->端口转发
为规则命名,选择“HTTP”作为应用程序名称,然后将“外部端口范围”设置为 8080。假设您的 tomcat 也在监听端口 8080,请将其设置为“内部端口范围”。下一步是添加服务器 IP 地址,在您的情况下为 192.168.1.120。下一步是启用规则。最后,保存配置并测试连接。
如果你需要带截图的指南,你可以点击这里。