我有一个路由器,一个静态ip abcd连接到一个Linux服务器,另一个连接到互联网。
从外部使用IP地址abcd:portxx访问安装在Linux服务器上的软件可以正常工作。
但是,如果由服务器本身的某个人打开的浏览器尝试访问与abcd:portxx相同的软件,则失败。 尝试localhost:portxx再次正常工作。
所以我的诊断是,DSL路由器是愚蠢的,没有意识到abcd本身。
有没有办法解决这个问题,最好不要改变路由器上的任何东西? 即Through /etc/hosts或服务器上的其他一些机制可以将任何数据包到abcd重新路由到localhost ?
这可能会打破别的吗?
问题不在路由器中。 路由器做什么已经configuration – 它将交通目的地abcd:portxx翻译到您的Linux服务器。 它不工作,但为了理解,你必须看看networking上发生了什么。 例如你的linux服务器是192.168.1.2,你的路由器是192.168.1.1在你的局域网上
如此可能的解决
1)在路由器上,如果可以的话,设置SNAT从本地networking的数据包到你的NAT公共IP。 如果你有Linux路由器,请尝试一下
iptables -t nat -I PREROUTING -s 192.168.0.0/24 -d abcd -j SNAT --to-source 192.168.1.1
你改变了数据包的源数据包地址,从内部networking经过路由器,服务器应用程序回复到192.168.1.1,并在接收到答复时,SNAT规则,正确地将数据包映射回你的服务器上的客户端应用程序。 此解决scheme适用于所有内部networking计算机,但在服务器上,您将看到来自路由器地址192.168.1.1的所有请求。
2)在服务器上,您可以通过iptables进行REDIRECTstream量
iptables -t nat -I OUTPUT -d abcd -p tcp --dport portxx -j REDIRECT --to-ports portxx
它将传出连接从您的服务器redirect到服务器上的本地端口。 我想,这可能是你的情况最好的解决scheme
3)在服务器上添加abcd地址可能是某些情况下的解决scheme,但是有时服务器守护进程(并且是特定于应用程序的)不会监听所有的IP地址,也不会为其他地址提供另一个回复。
4)如果你使用主机名而不是ip地址,你可以在linux服务器上重新定义/ etc / hosts – 这是最简单的,有时帮助(DNS返回:linuxserver abcd),所以在/ etc / hosts中你写行
192.168.1.2 linuxserver
从linux服务器到“linuxserver”的连接直接转到192.168.1.2