Я успешно настроил DynDNS на своем маршрутизаторе и теперь могу подключиться к своему домашнему серверу из-за пределов локальной сети, используя свой пользовательский домен.
Используя тот же самый домен, я могу получить доступ к своему домашнему серверу из локальной сети, несмотря на наличие внешнего IP-адреса, поэтому я предполагаю, что мой маршрутизатор разрешает NAT loopback для этого домена.
Я думал, что этого достаточно, чтобы гарантировать, что сетевой трафик останется в пределах локальной сети для запросов к моему домашнему серверу.
Но я провел простой тест, который, похоже, опровергает это.
Я изменил файл /etc/hosts моего ноутбука (подключенного к локальной сети), чтобы разрешить мой домен DynDNS как локальный IP моего сервера (например, 192.168.1.2).
Скорость сети намного выше при использовании локального IP для каждого запроса. Я предполагаю, что это потому, что запрос не выходит за пределы локальной сети.
Мой ноутбук — не единственное устройство, которое будет использовать сервер. Более того, изменение файла hosts туда-сюда внутри/снаружи моей сети — нежизнеспособный вариант. Чего я действительно не понимаю, так это почему маршрутизатор недостаточно «умен», чтобы перенаправлять запросы
Я что-то пропустил?
Единственный способ решить эту проблему — развернуть DNS-сервер в моей локальной сети?
решение1
Нет, ваш маршрутизатор не выполняет «NAT loopback».
Есть два случая. Вы можете увидеть, какой из них применим, посмотрев на IP-адрес внешнего сетевого интерфейса вашего маршрутизатора (который может отличаться от вашего публичного IP-адреса, см. ниже).
1) Ваш интернет-провайдер использует NAT операторского уровня (весьма вероятно, в Германии это почти наверняка).
Ваш публичный IP будет в сети вашего провайдера. Ваш маршрутизатор также будет иметь частный IP в сети вашего провайдера (который отличается от частных IP в вашей домашней сети). Когда вы отправляете пакет на ваш публичный IP, он попадет на маршрутизатор, затем в сеть вашего провайдера, затем обратно на ваш маршрутизатор, затем на ваш сервер. Вы можете увидеть или не увидеть (часть) этого с помощью traceroute
.
Таким образом, он покинет вашу домашнюю сеть, но не покинет сеть вашего интернет-провайдера.
Существует механизм ICMP REDIRECT, позволяющий ускорить этот процесс в следующий раз, но ваш интернет-провайдер может его использовать или не использовать, а Fritzbox может его использовать или не использовать.
С другой стороны, когда вы напрямую используете адрес своего сервера, именно туда все и пойдет.
2) Ваш интернет-провайдер не использует NAT операторского класса. Пакет на ваш публичный IP попадет на ваш маршрутизатор, он определит, что это локальный IP, но все равно применит правила переадресации портов и отправит его обратно на ваш сервер.
Это все еще медленнее, чем отправка напрямую на сервер, но не так сильно, как в случае (1).
3) Ваш Fritzbox прекрасно справляется с управлением статическими IP-адресами. И он уже запускает DNS-сервер. Вы можете изменить имя устройства в GUI, можете поставить галочку в поле «всегда один и тот же IP», и сервер будет доступен под xyz.fritz.box
, всегда с одним и тем же IP-адресом.
Чего он не будет делать, так это переопределять разрешение имен для имен за пределами своего домена (по крайней мере, я не думаю, что он может это сделать, хотя, возможно, стоит попробовать).
Так что да, если вы хотите, чтобы ваше доменное имя DDNS разрешалось в разные IP-адреса в зависимости от того, находитесь ли вы в домашней сети или за ее пределами, вам придется развернуть второй DNS-сервер. Или написать скрипт для /etc/hosts
автоматического изменения в зависимости от того, к какому SSID он подключен и т. д.