NAT loopback и DynDNS

594
genna

Я успешно настроил DynDNS на своем маршрутизаторе, и теперь я могу подключиться к своему домашнему серверу за пределами моей локальной сети, используя мой пользовательский домен.

Используя тот же домен, я могу получить доступ к своему домашнему серверу из локальной сети, несмотря на наличие внешнего IP-адреса, поэтому я предполагаю, что мой маршрутизатор разрешает петлю NAT для этого домена.

Я думал, что этого было достаточно, чтобы гарантировать, что сетевой трафик остается в локальной сети для запросов на мой домашний сервер.

Но я сделал простой тест, который, кажется, опровергает это.

Я изменил файл / etc / hosts моего ноутбука (подключенного к локальной сети), чтобы разрешить мой домен DynDNS в качестве локального IP-адреса моего сервера (например, 192.168.1.2)

Скорость сети намного выше, используя локальный IP для каждого запроса. Я предполагаю, потому что запрос не выходит за пределы локальной сети.

Мой ноутбук не единственное устройство, которое будет использовать сервер. Кроме того, изменение туда и обратно файла hosts внутри / вне моей сети не является приемлемым вариантом. На самом деле я не понимаю, почему маршрутизатор недостаточно интеллектуален для перенаправления запросов.

Я что-то пропустил?

Единственный способ решить эту проблему - развернуть DNS-сервер в моей локальной сети?

0
Почему вы не пытаетесь изменить / etc / hosts и установить адрес, возвращаемый nslookup (external)? И почему вы не пытаетесь вставить статическую запись с локальным адресом вашего сервера в DNS вашего роутера? Akina 5 лет назад 0
@ Акина мой роутер (AVM Fritz! Box 3272) не поддерживает управление статическими записями DNS. genna 5 лет назад 0
«почему маршрутизатор не настолько« умен », чтобы перенаправлять запросы» - с помощью NAT он делает именно это, но требует времени и усилий. Пакеты, которые используют локальный IP-адрес вашего сервера, вероятно, даже не проходят через часть маршрутизации маршрутизатора. Если они путешествуют через маршрутизатор, они могут просто посетить его внутренний коммутатор, который обрабатывает их на аппаратном уровне, а не логический маршрутизатор. Kamil Maciorowski 5 лет назад 0
@KamilMaciorowski Я понимаю, что пропуск "маршрутизации" части маршрутизатора делает запрос быстрее. Но использование внутреннего IP в 5/6 раз быстрее genna 5 лет назад 0

1 ответ на вопрос

0
dirkt

Нет, ваш маршрутизатор не выполняет "NAT loopback".

Есть два случая. Вы можете увидеть, что применимо, посмотрев на IP-адрес внешнего сетевого интерфейса вашего маршрутизатора (который может отличаться от вашего общедоступного IP-адреса, см. Ниже).

1) Ваш Интернет-провайдер выполняет NAT операторского уровня (очень вероятно, в Германии это почти наверняка).

Ваш общедоступный IP-адрес будет в сети вашего провайдера. Ваш маршрутизатор также будет иметь частный IP-адрес в сети вашего провайдера (который отличается от частных IP-адресов в вашей домашней сети). Когда вы отправляете пакет на ваш общедоступный IP-адрес, он отправляется на маршрутизатор, затем в сеть вашего провайдера, затем обратно на маршрутизатор, а затем на ваш сервер. Вы можете или не можете видеть (частично) это с traceroute.

Таким образом, он покинет вашу домашнюю сеть, но не покинет сеть вашего провайдера.

Существует механизм ICMP REDIRECT, чтобы сделать это быстрее в следующий раз, но ваш интернет-провайдер может или не может использовать его, а Fritzbox может или не может подчиниться.

OTOH, когда вы напрямую используете адрес вашего сервера, вот куда он пойдет.

2) Ваш провайдер не выполняет NAT операторского уровня. Пакет с вашим общедоступным IP-адресом поступит на ваш маршрутизатор, он определит, что это локальный IP-адрес, но все равно будет применять правила переадресации портов и отправит его обратно на ваш сервер.

Это все еще медленнее, чем отправка его непосредственно на сервер, но не так много, как в случае (1).

3) Ваш Fritzbox вполне способен управлять статическими IP-адресами. И это уже работает DNS-сервер. Вы можете отредактировать имя устройства в графическом интерфейсе, вы можете поставить галочку в поле «всегда один и тот же IP», и сервер будет доступен ниже xyz.fritz.box, всегда с одним и тем же IP.

Чего он не сделает, так это переопределит разрешение имен для имен за пределами своего домена (по крайней мере, я не думаю, что это может, возможно, стоит попробовать).

Поэтому, если вы хотите, чтобы ваше доменное имя DDNS разрешалось по разным IP-адресам, в зависимости от того, находитесь ли вы в домашней сети или за ее пределами, вам придется развернуть второй DNS-сервер. Или сценарий, чтобы что-то /etc/hostsавтоматически менялось в зависимости от того, к какому SSID он подключен и т. Д.

Проверка связи с моим пользовательским доменом (как внутри, так и вне домашней сети) дает мне внешний IP-адрес моего маршрутизатора, который является частью моей сети ISP (в Италии). Это должно ограничить возможности для варианта 1, верно? Я, вероятно, разверну DNS-сервер на Raspberry, чтобы решить проблему без необходимости что-либо менять на каждом устройстве моей сети. genna 5 лет назад 0
Нет. Ваш пользовательский домен использует DDNS, поэтому он всегда преобразуется в ваш внешний IP, независимо от того, где вы находитесь. И некоторые интернет-провайдеры делают странные вещи внутри своих сетей, поэтому traceroute / ping не является надежным инструментом для проверки этого. dirkt 5 лет назад 0

Похожие вопросы