6

Скажем, у меня есть доменное имя, которое указывает на мой IP-адрес. У меня есть маршрутизатор, который обрабатывает переадресацию портов на сервер в моей гостиной. Например, если я наберу домен в браузере, он в конечном итоге будет указывать на "себя".

Итак, распространение будет:

сервер -> маршрутизатор -> Интернет-провайдер -> (DNS-спагетти) -> Интернет-провайдер -> маршрутизатор -> сервер

но как только он знает IP-адрес (и он кешируется повсюду), вероятно, "система в целом" настроена на то, чтобы знать, что она может замыкаться на:

сервер -> маршрутизатор -> сервер?

или даже

сервер -> сервер (через "localhost" или как?)

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

компьютер -> маршрутизатор -> провайдер -> маршрутизатор -> сервер?

или это достаточно умно, чтобы просто пойти

компьютер -> маршрутизатор -> сервер?

Это просто вопрос того, нужно ли мне иметь два псевдонима для подключения по ssh к моему домашнему серверу (sshmyserverlocal или sshmyserverremote), поэтому у меня будет самое быстрое соединение, если оно локальное, или если DNS позаботится об этом для меня.

9 ответов9

48

DNS и маршрутизация - это совершенно разные системы. Адрес, возвращаемый вашим DNS-запросом, просто назначается в качестве пункта назначения, когда ваша клиентская система инициирует соединение с сервером. Маршрут, по которому будет идти пакет для достижения сервера, полностью независим от этого процесса. Эти системы разрабатываются отдельно, поэтому процесс маршрутизации должен всегда возвращать максимально быстрый маршрут к месту назначения независимо от того, как ведет себя DNS.

12

@ D34DM347 правильно, DNS обычно не участвует в решениях о маршрутизации IP-пакетов.

Однако есть одно небольшое исключение (откуда может возникнуть некоторая путаница) для некоторых крупных DNS-серверов, предоставляемых распределительными сетями контента (CDN), которые имеют идентичные серверы по всему миру, посмотрите, откуда поступил запрос, и измените ответ. основываясь на этом. Если вы перешли с французского IP-адреса, Akamai предоставит вам ответ, который, например, указывает на один из их идентичных компьютеров во Франции. Смотрите этот пост в блоге. Это может быть причиной вашего замешательства и того, почему вы разумно ожидали, что DNS поможет с маршрутизацией.

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

Вам нужно будет либо указать более локальный IP-адрес, либо возиться с таблицами IP-маршрутизации ... что выходит за рамки вашего вопроса "Достаточно ли умен DNS для маршрутизации ..."

6

Запрос DNS для IP-адреса, соответствующего имени домена, будет направлен на тот сервер имен, который вы настроили на устройстве, с которого вы делаете запрос домена. Чаще всего это DNS-сервер вашего провайдера.

Затем IP-пакеты от клиента к серверу будут проходить через маршрутизатор, на котором настроена переадресация портов.

Если вы настраиваете внутренний сервер имен, который возвращает частный IP-адрес сервера для запроса имени домена, то трафик будет передаваться напрямую от клиента к серверу, при условии, что он находится в одной подсети.

5

Ответ на ваш вопрос будет зависеть от того, что вы имеете в виду, когда говорите "маршрутизатор".

Многие конечные пользователи используют слово «маршрутизатор» для описания устройства, основной функцией которого является выполнение NAT (трансляция сетевых адресов). Однако маршрутизаторы, которые составляют основу Интернета, редко настраиваются на выполнение NAT. Эти магистральные маршрутизаторы основаны на микросхемах, предназначенных для эффективной маршрутизации на аппаратном уровне и не более того.

Эти различия настолько значительны, что я отвечу на ваш вопрос отдельно в каждом из двух сценариев.

Использование устройства NAT между сервером и провайдером

В этом примере я предполагаю, что ваш сервер имеет IP-адрес 10.0.0.2, а ваше устройство NAT имеет IP-адрес 192.0.2.42.

Когда ваш сервер подключается к другим серверам в Интернете, устройство NAT будет изменять исходный IP-адрес каждого пакета, отправляемого вашим сервером, с 10.0.0.2 на 192.0.2.42 по мере прохождения, ему также может потребоваться изменить номер порта источника. Когда пакет возвращается, устройство NAT изменит адрес назначения пакетов с 192.0.2.42 на 10.0.0.2.

Для поддержки соединений из Интернета с вашим сервером вы настроили переадресацию портов на вашем устройстве NAT. Эта переадресация портов - это то, что позволяет устройству NAT знать, какой адрес назначения заменить на 192.0.2.42, когда оно видит первый пакет, устанавливающий новое соединение. Как только соединение установлено, устройство NAT выполнит тот же перевод, что и в предыдущем случае.

Чтобы все это работало, ваше доменное имя должно быть преобразовано в 192.0.2.42. Но это означает, что когда сервер сам разрешает доменное имя, он также получает 192.0.2.42.

Когда сервер хочет подключиться к 192.0.2.42, он обнаружит, что этот адрес находится за пределами локальной сети, поскольку локальная сеть охватывает только 10.0.0.0/24. Таким образом, он отправит пакет на шлюз по умолчанию, который будет интерфейсом LAN устройства NAT.

Пока устройство NAT достаточно умен, чтобы дважды преобразовывать один и тот же пакет в NAT, оно будет переворачиваться и возвращаться на ваш сервер, предварительно изменив IP-адрес источника с 10.0.0.2 на 192.0.2.42, а затем изменив IP-адрес назначения с 192.0. .2.42–10.0.0.2. Обратный трафик будет проходить через тот же процесс перевода.

В этом случае ответом будет то, что трафик проходит с сервера на устройство NAT, а затем обратно на сервер.

Если ваше устройство NAT немного менее интеллектуально, трафик может пройти весь путь до провайдера, прежде чем он обернется. Или устройство NAT может NAT пакет только один раз и отправить пакет с адресом источника и назначения 10.0.0.2 обратно на ваш сервер, который ваш сервер будет молча отбрасывать.

Если у вас есть свой собственный DNS-сервер (возможно, размещенный на устройстве NAT), вы можете делать трюки, производя разные ответы на запросы в локальной сети, в зависимости от того, какие ответы эти запросы будут получать в Интернете.

Таким образом, даже при том, что фактический IP-адрес вашего домена - 192.0.2.42, клиенты в локальной сети сказали бы, что это 10.0.0.2.

Однако этот подход не может быть полностью автоматизирован. Представьте, что вы перенаправили порт 80 на 192.0.2.42 на порт 80 на 10.0.0.2 и порт 22 на 192.0.2.42 на порт 22 на 10.0.0.3. И устройство NAT видит ответ DNS с IP-адресом 192.0.2.42. Какой IP-адрес должен заменить 192.0.2.42, прежде чем передать его клиенту в локальной сети? Он еще не знает, будет ли этот клиент подключаться к порту 22 или порту 80, поэтому он не может знать, какой IP-адрес вернуть клиенту.

Это означает, что такой DNS с разделенным горизонтом всегда будет требовать некоторой ручной настройки. И это может стать беспорядком.

Использование роутера между сервером и провайдером

В этом примере я предполагаю, что ваш сервер имеет IP-адрес 203.0.113.2, а ваш маршрутизатор имеет внешний IP-адрес 192.0.2.42.

Когда ваш сервер подключается к другим серверам в Интернете, ваш маршрутизатор будет пересылать пакет без изменений, кроме уменьшения TTL. Удаленный сервер увидит пакеты, исходящие из 203.0.113.2, а у вашего интернет-провайдера будет таблица маршрутизации, в которой говорится, что все пакеты до 203.0.113.0/29 необходимо маршрутизировать через 192.0.2.42, то есть обратный трафик возвращается на ваш сервер. ,

В DNS IP-адрес, выделенный вашему серверу, будет 203.0.113.2. И оба клиента в вашей локальной сети и в Интернете увидят этот адрес. Клиенты в локальной сети распознают, что 203.0.113.2 является локальным адресом, и отправляют пакеты непосредственно на сервер, не пересекая маршрутизатор. Соединения от сервера к себе даже не достигнут сетевого интерфейса, поскольку стек IP на сервере распознает, что адрес назначения является локальным для самого сервера.

Если вы хотите подключиться извне к порту 80 на одном сервере с IP-адресом 203.0.113.2 и к порту 22 на другом сервере с IP-адресом 203.0.113.3, вы просто делаете это. Перевод не требуется, и трафик извне явно указывает, для какого IP-адреса он предназначен.

Ваш маршрутизатор может иметь функции брандмауэра, так что вам необходимо настроить открытые порты, прежде чем разрешатся подключения, инициированные из Интернета, к вашей локальной сети. Но перевод не нужен, что означает, что он будет быстрее и надежнее.

Почему даже использовать NAT?

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

В первом примере вам был бы выделен только 1 IP-адрес от вашего провайдера. Во втором примере вам было бы выделено 9 IP-адресов. И это наименьшее количество IP-адресов, которое интернет-провайдер может выделить для вас, не прибегая к каким-либо действиям.

Если бы у нашего провайдера была современная сеть с поддержкой IPv4 и IPv6, все могло бы выглядеть лучше. В этом случае можно использовать NAT только для IPv4 и маршрутизацию для IPv6.

Ваш сервер может иметь IP-адреса 10.0.0.2 и 2001:db8:42:cafe::2, ваш NAT/ маршрутизатор может иметь IP-адреса 192.0.2.42 и 2001:db8:42::2. В этом случае ваш домен будет иметь IP-адреса 192.0.2.42 и 2001:db8:42:cafe::2.

Обратите внимание, что домен разрешается в IPv4-адрес маршрутизатора и IPv6-адрес сервера.

Соединения из Интернета с сервером будут проходить через маршрутизатор независимо от того, использует ли клиент IPv4 или IPv6. Соединения от сервера к себе могут использовать IPv4 и IPv6 параллельно и использовать самый быстрый, который будет IPv6, потому что соединение IPv4 должно идти в обход через NAT/ маршрутизатор.

4

Короткий ответ

Нет.

Тем не менее, вы можете использовать DNS, чтобы (помочь) выполнить то, что вы хотите сделать.

Оценивая ситуацию

Это действительно похоже на проблему XY. Вы пытаетесь выяснить, как конфигурация DNS будет контролировать маршрутизацию. Проблема в том, что DNS мало влияет на маршрутизацию. Вероятно, это связано с некоторым отсутствием знаний о том, как работает маршрутизация.

Итак, я согласен с ответом D34DM347. Однако, когда возникает проблема XY, я понимаю, что иногда вам нужен не просто ответ, который пытается помочь вам найти правильное направление, потому что это направление может показаться нежелательным, если вы не поймете больше деталей о причинах этого направления. преследовало. Итак, я коснусь некоторых концепций дизайна здесь.

Обобщать это небезопасно

"система в целом" скорее всего настроена на ...

Что ж, информация о "системе в целом" может существенно различаться. Есть разные подходы, чтобы делать вещи. Некоторые могут быть более эффективными, хотя и ценой сложности в настройке.

Ваш вопрос заключается в поиске возможности сократить путь, по которому идет трафик, чтобы трафик мог использовать ваше локальное оборудование и пропустить прохождение через Интернет. Ну, возможно ли это, или нет, будет зависеть от вашего местного оборудования. Ответ будет разным для разных сетей, в зависимости от того, какое у вас локальное оборудование. Стандарты всемирной интернет-маршрутизации не будут касаться множества деталей о том, работает ли на вашем локальном оборудовании DNS-сервер.

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

Другая причина для нескольких возможных конструкций может заключаться в том, что некоторые устройства могут иметь более продвинутые возможности, чем я могу предсказать. Например, я помню, как настраивал маршрутизатор для отправки трафика на компьютер, который будет проверять исходящий трафик, и передавать проверенный трафик обратно на маршрутизатор, который имел физическое соединение с Интернетом. Моя настройка не удалась, потому что маршрутизатор был разработан для оптимизации трафика, поэтому оборудование попыталось превзойти мой дизайн, заставив трафик пропустить то, что, по его мнению, было ненужным шагом.

Поскольку существуют различные возможные ситуации, которые могут зависеть от деталей, например, от того, какое программное обеспечение для «DNS-сервера» может быть использовано, не существует только одного простого ответа, который скажет, на что способна ваша локальная сеть. (Ваш вопрос был довольно расплывчатым в отношении некоторых деталей о вашей настройке (например, какое оборудование используется и, возможно, какие операционные системы или веб-браузеры вы используете), не существует единственного простого ответа, который применим ко всем возможным ситуациям.) Итак, я просто приведу некоторые общие рекомендации относительно того, что обычно доступно.

Разрешение имени

Многие DNS-серверы поддерживают концепцию, называемую "расщепленный горизонт", что в основном означает, что ответ, полученный от DNS-сервера, будет зависеть от того, откуда поступил запрос. Например, общепринятым методом является предоставление одного ответа (который является внутренним адресом) на все запросы, которые поступают с адресов "IETF BCP 5" (более известных как адреса "RFC 1918", которые являются адресами IPv4, начинающимися с "10"). «или« 192.168. »или номер, начинающийся с« 172.16. »до« 172.31. »), будет отправлен на ваш внутренний адрес. На запросы с других адресов IPv4 будет получен другой ответ, который приведет к указанию на другой адрес, доступный из большинства мест на этой планете. (IPv6 также будет обрабатываться с использованием различных деталей конфигурации, но может быть настроен для работы аналогично IPv4. Чтобы сохранить разумность, вероятно, IPv6 должен быть настроен аналогично IPv4.)

Теперь, является ли это легкодоступным вариантом для вас или нет, может зависеть от таких факторов, как то, какой DNS-сервер используется.

Если ваш веб-браузер находится на компьютере, который перенаправляет весь трафик DNS на известный общедоступный DNS-сервер, например google-public-dns-a.google.com (8.8.8.8) или OpenDNS (208.67.222.222 и 208.67.220.220), то это, вероятно, не вариант для вас. Это распространенный сценарий.

Тем не менее, другой довольно распространенный сценарий может работать нормально. Если ваш веб-браузер использует DNS-сервер, рекомендованный вашим DHCP-сервером, и если ваш DHCP-сервер является вашим локальным маршрутизатором, и если этот рекомендуемый DNS-сервер также является вашим локальным маршрутизатором, вы можете настроить его, посмотрев в настройте маршрутизатор для функции «DNS-сервер» и найдите что-то, ссылающееся на разделение горизонта (или похожий термин, например "разделенный DNS").

Таким образом, один из вариантов может включать настройку DNS-сервера в вашем регионе. Тем не менее, даже это может быть больше работы, чем то, что вам нужно. Вы можете сделать то же самое, используя технику "разрешения имен", отличную от DNS. Большинство компьютеров будут поддерживать сначала использование "файла хостов" в качестве основного ресурса для проверки, а затем использовать DNS, если локальный "файл хостов" системы не предоставляет более конкретную информацию. Таким образом, если у вас есть только один веб-браузер, с которым вы хотите это сделать, вы можете достичь своей цели (или сократить маршрут трафика), просто отредактировав текстовый файл, который полностью обходит DNS.

SSH нажатия клавиш

если я SSH на сервер (по его доменному имени), каждое нажатие клавиши [идет к провайдеру]

В зависимости от того, будут ли нажатия клавиш обращаться к провайдеру, все будет зависеть от таких деталей, как используемый вами IP-адрес и маршрутизация IP-трафика на этот IP-адрес. (Поймите, что IP-адрес довольно числовой, например 192.168.0.10 в IPv4 или fd00::abcd в IPv6, который использует шестнадцатеричное значение. Доменное имя, используемое в DNS, например example.com, не является IP-адресом.) Когда вы «SSH подключаетесь к серверу (по его доменному имени)», на самом деле происходит то, что ваш SSH-клиент выполнит поиск "разрешения имен", который, вероятно, будет включать проверку данных в "файле хостов", а затем проверку DNS. (Могут быть и другие шаги, такие как проверка локального кэша "решателя" перед выполнением любого из этих действий, а затем, если используется DNS, сохранение результатов в кэше "решателя", чтобы ускорить процесс в следующий раз.) Ваш SSH-клиент делает это перед попыткой установить связь с удаленным компьютером. Затем, как только процесс "разрешения имен" был использован для генерации IP-адреса, клиент SSH установит SSH-соединение, используя IP-адрес, полученный в результате поиска "разрешения имен". Таким образом, способ обработки трафика будет зависеть от IP-адреса, а не от того, набрали ли вы имя домена.

Основная общая задача DNS состоит в том, чтобы просто помочь процессу "разрешения имен" преобразовать имя в IP-адрес. То, как трафик перемещается по всей системе, является концепцией, которую чаще всего называют "маршрутизацией", и которая обрабатывается другим программным обеспечением / конфигурациями, нежели "разрешение имен". Таким образом, люди, которые хорошо разбираются в этом, постараются ответить на ваши вопросы, связанные с DNS, отдельно от вопросов, связанных с маршрутизатором, потому что это действительно отдельные технологии, разработанные для разных целей, и все будет проще, если вы попытаетесь думать о том, как они разработан. В своей голове держите DNS и маршрутизацию отдельно.

Это завершает мое освещение темы DNS. Теперь позвольте мне заняться другой важной темой вашего вопроса, а именно тем, как маршрутизируется трафик.

маршрутизация

сервер -> сервер

Это также может быть вариантом. Когда компьютер пытается отправить сетевой трафик, частью процесса является создание правильного фрейма "Уровень 2". Наиболее распространенные формы фреймов "уровня 2" в домашних сетях - это фреймы Ethernet, которые будут отправляться по кабелю UTP, или фреймы Wi-Fi, которые отправляются по воздуховодам. (Коммерческие сайты могут использовать другие технологии, такие как волоконно-оптические соединения.) Типичный кадр "уровня 2" будет использовать адрес MAC-48 для идентификации получателя.

Компьютер, который отправляет трафик, проверит IP-адрес получателя. Например, предположим, что компьютер, отправляющий трафик, использует IPv4 192.168.1.205, а компьютер, который будет получать трафик, - IPv4 192.168.1.15. Если ваш компьютер использует маску подсети 255.255.255.0, это означает, что размер подсети составляет 256 адресов. (Если бы у вас была другая маска подсети, которая начинается с «255.255.255.», То это была бы меньшая подсеть.) Существует одна подсеть, которая имеет 256 адресов и содержит 192.168.1.205, и это подсеть, которая идет от 192.168.1.0 до 192.168.1.255.

Поскольку 192.168.1.15 является частью той же подсети, компьютер отправит кадр уровня 2, используя адрес MAC-48 желаемого пункта назначения (который, как показывает ваша диаграмма, является сервером). Не будет никакого трафика, отправленного на любой из адресов маршрутизатора.

Если, с другой стороны, адрес назначения был 203.0.113.6, то он не был бы частью той же подсети, что и источник (192.168.1.205). В этом случае таблица маршрутизации указывает, что трафик отправляется на устройство "шлюза". ("Шлюз по умолчанию", скорее всего, ваш маршрутизатор.) Таким образом, компьютер отправит кадр уровня 2, используя MAC-48 адрес шлюза. Цель вашего компьютера - верить, что шлюз будет знать, какое из его сетевых подключений будет полезно для получения трафика до желаемого пункта назначения. Шлюз может использовать сетевое соединение, которое обменивается данными с поставщиком услуг Интернета, или нет. Эти детали контролируются такими факторами, как то, какие IP-адреса используются, и насколько велики подсети.

Маршрутизация обрабатывается такими ключевыми сведениями о маршрутизации, как IP-адрес исходного компьютера, IP-адрес назначения, размер подсети исходного компьютера и "шлюз по умолчанию", который обрабатывает трафик, который не является частью более конкретной подсети. Компьютер в домашней сети обычно получает большинство этих данных для IPv4 с помощью DHCP. Единственным исключением является «IP-адрес назначения», и это единственная часть процесса, с которой "разрешение имен" может быть связано.

сервер -> маршрутизатор -> сервер

Вы спрашивали, если это возможно. Это может быть. Я опишу, как это может работать.

Это предпочтительнее, чем отправка трафика провайдеру. (Это совсем не беспокоит оборудование интернет-провайдера, и связь идет быстрее, чем необходимость отправки трафика на удаленный конец.)

Прежде всего, когда маршрутизатор получает трафик, он смотрит на адрес MAC-48 назначения. Если адрес назначения MAC-48, а не маршрутизатор, то маршрутизатор ничего не делает с трафиком, если только маршрутизатор не настроен на работу в качестве коммутатора. Обычно домашние маршрутизаторы маркируют некоторые из своих сетевых портов как «порт LAN», и эти порты рассматриваются как один «канал», поэтому маршрутизатор будет действовать как коммутатор для этих устройств. В этом случае маршрутизатор будет отправлять трафик через один или несколько портов, которые обрабатываются как коммутатор.

Чтобы трафик проходил от внутреннего порта LAN к провайдеру, маршрутизатор должен отправлять трафик через сетевой порт, который связывается с провайдером. Ваша типичная домашняя сеть вряд ли будет делать это, если IP-адрес назначения является одним из "частных" адресов, таких как IPv4-адреса, указанные в IETF BCP 5 (более известный как RFC 1918). Кроме того, большинство интернет-провайдеров просто блокируют трафик IETF BCP 5 в поле зрения (и не отправляют этот трафик обратно вам). Таким образом, эта настройка (сервер -> маршрутизатор -> сервер), скорее всего, будет происходить на самом деле, а не более сложным процессом с участием провайдера.

Если информация проходит через маршрутизатор, но вы просто используете адреса IETF BCP5 на внутренних портах локальной сети, я обычно не называю это использованием маршрутизатора. Вместо этого маршрутизатор обрабатывает трафик как "коммутатор", просто используя адреса MAC-48 для принятия решений, связанных с потоком трафика.

Существует еще одна возможная настройка, которая заключается в том, что вы можете использовать адрес WAN. В этом случае используются несколько подсетей, и поэтому устройство работает как маршрутизатор. Это становится более сложным, но, поскольку это возможно, что-то может работать, стоит остановиться здесь. Я приведу пример того, как это может работать успешно. Этот следующий параграф содержит несколько IP-адресов. Чтобы сохранить правильность этих адресов, основная деталь, которую необходимо отслеживать, состоит в том, что адреса, начинающиеся с «192.168.1», предназначены для IP-адресов в локальной сети, а адреса, начинающиеся с «203.0.113», являются адресами для подключения к глобальной сети. (где маршрутизатор подключается к провайдеру).

Может случиться так, что устройство шлюза у провайдера может иметь устройство шлюза, использующее адрес, такой как 203.0.113.5, и адрес IPv4 203.0.113.6, назначенный "порту WAN" вашего маршрутизатора. Если ваш компьютер в 192.168.1.200 пытается установить связь с 203.0.113.6 (порт WAN вашего маршрутизатора), то ваш маршрутизатор будет получать трафик (через порт LAN вашего маршрутизатора, возможно, в 192.168.1.15), и маршрутизатор поймет, что трафик должен взаимодействовать с использованием подсеть, которая содержит 203.0.113.5 и 203.0.113.6. Когда маршрутизатор понимает, что трафик принимается 203.0.113.6, ваш маршрутизатор может реализовать правило обработки трафика для 203.0.113.6, которое говорит, что для трафика порта TCP 80 должна применяться "трансляция сетевых адресов" (NAT). Для этого ваш маршрутизатор создает новый IP-пакет, который доставляется с 203.0.113.6 на ваш локальный веб-сервер, который может быть по адресу 192.168.1.50. Маршрутизатор понимает, что 192.168.1.50 находится в той же подсети, что и 192.168.1.15, и отправляет трафик через порт локальной сети.

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

Фактически, если провайдер получил этот трафик, он, вероятно, сказал бы: «Полученный трафик предназначен для сети этого клиента. Тем не менее, трафик пришел из сети клиента. Этот трафик был отправлен мне без необходимости. Я не хочу с этим сотрудничать. Я просто отброшу / проигнорирую трафик. "Интернет-провайдер ожидает, что если это вызовет проблемы, проблемы будут решены путем интеллектуального исправления вашей внутренней сети, чтобы он без необходимости не отправлял трафик Интернет-провайдеру.

(Это также касается понятия «компьютер -> маршрутизатор -> Интернет-провайдер -> маршрутизатор -> сервер»). Если вы хотели обратиться к одному маршрутизатору оба раза, когда вы сказали «маршрутизатор», потому что вы думали, что трафик может обернуться у провайдера, то это совершенно нежелательно и, возможно, неосуществимо из-за распространенного способа, которым провайдеры обрабатывают трафик .)

Итак, теоретически возможно ли «сервер -> маршрутизатор -> сервер»? Да. Однако не все устройства обязательно будут поддерживать NAT или поддерживать их одинаково. Некоторые устройства могут быть спроектированы так, чтобы поддерживать NAT только в определенной точке процесса обработки трафика, и это может произойти до того, как трафик переключит подсети с адресов «192.168.1» на адреса «203.0.113». Так что в некоторых случаях это может не сработать. Как объяснено в последнем параграфе, решение состоит не в том, чтобы пытаться получить трафик, отправленный провайдеру. (Решение состоит в том, чтобы не отправлять трафик на IP-адрес порта WAN маршрутизатора. Вы могли бы легко избежать этого, влияя на работу "разрешения имен".)

Это просто вопрос того, нужно ли мне иметь два псевдонима для подключения по ssh к моему домашнему серверу (sshmyserverlocal или sshmyserverremote), поэтому у меня будет самое быстрое соединение, если оно локальное, или если DNS позаботится об этом для меня.

Вы хотите, чтобы об этом позаботились, используя "разрешение имен" или IP-маршрутизацию или оба. Если у вас есть несколько имен, и вы в конечном итоге используете неправильное имя, то иногда такая деталь вообще не будет иметь значения, а иногда - и так. Например, команда "ping" использует ICMP и, вероятно, не будет затронута. Однако, если вы использовали HTTPS (вместо SSH), то имена хостов могут иметь гораздо большее значение. Что касается SSH (который был упомянут в примере), это, вероятно, не будет иметь большого значения, хотя, по крайней мере, некоторые версии sshd используют Reverse DNS, и поэтому у вас могут быть задержки, если что-то не так, как ожидалось.

Для вашего собственного спокойствия и, возможно, для надлежащей технической функциональности, вы всегда будете использовать правильное имя хоста. Например, SSL-сертификат веб-сервера должен иметь имя, совпадающее с тем, что введено в веб-браузер. Простой способ заставить все это работать, избегая связанных с этим проблем, состоит в том, чтобы просто иметь одно имя хоста (даже если у него несколько IP-адресов, благодаря использованию "файла хостов" или разделенной DNS).

2

Вы можете настроить некоторый DNS-сервер пересылки, такой как Unbound (я не так давно отвечал здесь, как это сделать), где вы можете переопределить любые публичные записи DNS, или простой способ - добавить в файл hosts

your.tld ip.of.local.machine

но вам нужно закомментировать его, когда вы выходите из локальной сети, так что некоторый уважительный брандмауэр, такой как PFsense какого-либо DNS-сервера пересылки, установленный локально в вашей локальной сети, будет гораздо более удобным способом

1

Лучше всего настроить DNS-прокси, который, вероятно, уже работает на вашем маршрутизаторе. Для этого вам может потребоваться консольный доступ к маршрутизатору. Скорее всего, ваш прокси - это программное обеспечение, называемое dnsmasq. Через dnsmasq вы можете назначать как фиксированные IP-адреса (через DHCP-сервер, так и DNS-имена для всех ваших серверов). Вы бы дали им те же имена, которые вы использовали бы снаружи (например, server.mydyndns.com), но только с локальными, не маршрутизируемыми адресами. Пока локальные машины используют ваш маршрутизатор в качестве DNS для разрешения имен, они будут подключаться напрямую к вашим серверам без маршрутизации на улицу. После того, как вы отключитесь от локальной сети, разрешения имен будут обрабатываться другим общедоступным DNS, а затем вы подключитесь к общедоступному IP-адресу. Вы уже настроили переадресацию портов, поэтому снаружи ничего не изменится. Если вы не можете настроить dnsmasq вашего маршрутизатора, то вы можете установить программное обеспечение dnsmasq на другом локальном сервере и использовать его в качестве прокси-сервера DNS (отключите DHCP, так как в противном случае он будет конфликтовать с DHCP маршрутизатора). Вы должны держать это все время работающим все же! Первоначальная конфигурация потребует прочтения документации, но обновлений (добавление дополнительных серверов очень просто).

1

Ваша проблема может быть решена с помощью маршрутизации или DNS (по крайней мере, с помощью PFSense). PFSense называет это соответственно отражением NAT (перенаправление трафика, который предназначался для интерфейса WAN, на внутренний хост) и разделением DNS (внутренние и внешние хосты разрешают адрес по-разному).
Помимо определений, у меня нет большого опыта работы с этими функциями, вы должны прочитать эту статью в вики PFSense для более подробной информации. Это в значительной степени зависит от производителя, поэтому мало надежды на то, что другие маршрутизаторы, программные или аппаратные, также ведут себя так же.

1

В вашем первом сценарии это происходит при условии, что браузер работает на том же сервере:

  1. Сервер связывается с DNS-сервером через маршрутизатор для разрешения имени хоста
  2. DNS-сервер отвечает IP-адресом имени хоста (который указывает на маршрутизатор)
  3. Сервер связывает IP-адрес маршрутизатора и порт маршрутизатора пересылается обратно в локальную сеть

IP-адрес будет кэшироваться в течение следующих 86 400 секунд (1 день) в Windows, поэтому в течение этого времени должен быть выполнен только шаг 3 выше. После истечения срока действия кэша он начнется заново на шаге 1.

Так что да, маршрутизатор достаточно умен, чтобы знать, каков его собственный внешний адрес, а не направлять вас в Интернет, чтобы найти его. Вы направляетесь в Интернет только для разрешения имени хоста, если оно неизвестно (если только ваш маршрутизатор не является вашим DNS, он разрешит его для вас).

Эта же последовательность шагов будет применима и к вашему сценарию SSH, хотя вы можете обойти маршрутизатор и перейти напрямую от хоста к хосту, если вы используете внутреннюю адресацию по IP или добавлением в файл hosts (это то, что я делаю),

В другом, но похожем сценарии маршрутизатор может выдать ICMP Redirect на фактический внутренний адрес сервера, чтобы вы могли обойти маршрутизатор. Маловероятно, что маршрутизатор переадресации портов сделал бы это.

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