无法通过公有域名连接本地服务器

无法通过公有域名连接本地服务器

我的服务器 (Debian Wheezy) 位于本地家庭网络中。在该服务器上,我有自己的 DNS 服务器 (dnsmasq),用于其他本地服务器(因此我可以输入名称而不是本地 IP)和反向代理 (nginx)。在我的路由器上,我配置了将 80 和 443 端口转发到我的反向代理,一切运行良好。但仅限于我的网络外部。

当我输入在其他地方的公共 DNS 服务器中注册的 myaddress.com 时,一切正常。但是当我从本地地址输入它时,我什么也没有得到。我只能通过输入本地名称或 IP 来访问它。我说的什么也没有是指“没有收到数据”。例如:

$ wget myaddress.com
--2016-06-01 19:53:46--  http://myaddress.com/
Resolving myaddress.com... 80.243.xx.yy
Connecting to myaddress.com|80.243.xx.yy|:80... connected.
HTTP request sent, awaiting response... No data received.
Retrying.

但是当我通过本地IP访问它时:

$ wget myaddress.local
--2016-06-01 19:57:13--  http://myaddress.local/
Resolving myaddress.local... 192.168.0.111
Connecting to 192.168.0.111... connected.
HTTP request sent, awaiting response... 200 OK

在 nginx 日志中,我可以看到请求已收到,并且它已做出响应。因此我使用 tcpdump 来检查发生了什么。从我的网络外部访问时转储正常:

19:37:31.455120 IP myphone > mylocalreverseproxy: Flags [P.], seq 1824665393:1824665988, ack 2996933611, win 336, options [nop,nop,TS val 1206547844 ecr 217767803], length 595
E....F..,.)0B.]....e...Pl./1.......P.......
G.u....{GET / HTTP/1.1
Host: myaddress.com
...other headers...

19:37:31.455241 IP mylocalreverseproxy > myphone: Flags [P.], seq 1:725, ack 595, win 55, options [nop,nop,TS val 217767807 ecr 1206547844], length 724
E...L.@.@.._...eB.]..P......l.1....7.......
....G.u.HTTP/1.1 404 Not Found
Server: nginx/1.8.0
Date: Wed, 01 Jun 2016 17:37:31 GMT

当我尝试在本地网络内访问时,tcpdump:

19:35:25.085344 IP localchromebook > mylocalreverseproxy: Flags [P.], seq 0:390, ack 1, win 115, options [nop,nop,TS val 537594624 ecr 217735412], length 390
E...-M@.>..........e...P.v.4...Y...s.......
 .....`.GET / HTTP/1.1
Host: myaddress.com
...other headers...

什么都没发生。几分钟后又试了一次。又试了一次,依此类推。

我不是管理员,所以我不知道该尝试什么,以及下一步该去哪里查看哪里出了问题并修复它。我应该指出,大约一年前它工作得很好,但有一天它开始出现这种情况,从那以后我就无法修复它了。你推荐尝试什么?

答案1

你的路由器可能不支持“NAT 反射”,又称“Hairpin NAT”或者“NAT Loopback”。

这意味着从您自己的网络内部向您的公共 IP 地址发出的请求要么根本不发送到服务器,要么发送到具有错误“响应”IP 地址的服务器,从而导致您的计算机无法处理的“三角路由”。

您的路由器可能有一个设置允许您打开 NAT 反射。否则,解决这个问题的唯一方法是使用“拆分 DNS” - 在您的网络中设置 DNS 以返回服务器的私有 IP 而不是其公共 IP。

相关内容