У меня есть мой сервер (Debian Wheezy) в моей локальной домашней сети. На этом сервере у меня есть собственный DNS-сервер (dnsmasq) для других локальных серверов (поэтому я могу ввести имя вместо локального IP-адреса) и обратный прокси-сервер (nginx). На моем маршрутизаторе я настроил переадресацию портов 80 и 443 на мой обратный прокси, и все работает просто замечательно. Но только из-за пределов моей сети.

Когда я набираю myaddress.com, зарегистрированный на общедоступных DNS-серверах, это нормально. Но когда я набираю это с моего локального адреса, я ничего не получил. Я могу получить к нему доступ только введя локальное имя или 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 ответ1

1

Вероятно, ваш маршрутизатор не поддерживает "Отражение NAT", также называемое "Шпилька NAT" или "NAT Loopback".

Это означает, что запросы на ваш общедоступный IP-адрес из вашей собственной сети либо вообще не отправляются на сервер, либо отправляются на сервер с неправильным IP-адресом «Respond-to», что вызывает "треугольную маршрутизацию", которую может использовать ваш компьютер не справиться.

Ваш маршрутизатор может иметь настройку, которая позволяет вам включить NAT Reflection. В противном случае, единственный способ решить эту проблему - "Разделить DNS" - настроить DNS в своей сети так, чтобы он возвращал частный IP-адрес вашего сервера вместо его общего IP-адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .