3

У меня дома работает сервер Linux с настройкой URL-адреса DynDNS, указывающей на мой публичный IP-адрес.

Одна из вещей, которые я заметил, - это использование удаленного адреса, такого как url.dyn-dns.tv или мой публичный IP-адрес подключается к серверу быстрее, чем мой локальный 192.168.xx.xx

У кого-нибудь есть идеи, почему это может быть?

3 ответа3

8

tl; dr Исправить конфигурацию DNS-распознавателя на сервере. (Обходной путь - отключить обратный поиск в SSHD, но лучше исправить то, что сломано)


Оригинальный ответ

У кого-нибудь есть идеи, почему это может быть?

Не совсем, но вот анекдот, который может помочь:

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

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

tcpdump и wireshark хороши.


Обновление 1

У клиента с задержкой подключения

  • найти IP-адрес клиента

    • В Windows откройте окно командной строки и введите ipconfig
    • В Linux откройте окно терминала и введите ifconfig -a
  • опционально подтвердить, что вы можете быстро найти IP-адрес сервера

    • на windows nslookup servername
    • в Linux dig servername или имя host servername если у вас нет dig.

На сервере

  • посмотрите имя клиента
    • проверьте в /etc/resolv.conf адрес первого DNS-сервера имен
    • введите dig -x 192.168.n.m @nameserver или host 192.168.n.m server где 192.168.nm заменяется действительным IP-адресом клиента, а nameserver является IP-адресом сервера имен.
    • повторите для других серверов имен, перечисленных в /etc/resolv.conf

сервер должен получить ответ в миллисекундах. При неправильной настройке DNS время ожидания может занять несколько секунд.

хороший конфиг

# time host 192.168.3.4
Host 4.3.168.192.in-addr.arpa. not found: 3(NXDOMAIN)

real    0m0.130s
user    0m0.000s
sys     0m0.020s

плохой конфиг

# echo nameserver 1.2.3.4 > /etc/resolv.conf
# time host 192.168.3.4
;; connection timed out; no servers could be reached

real    0m10.010s
user    0m0.000s
sys     0m0.010s

Обратите внимание на 10-секундную задержку. Это означает, что любой службе SSH, которая хочет иметь имена клиентов в своих журналах, потребуется 10 секунд, чтобы установить соединение SSH.


Обновление 2

Оказывается, этот вопрос (вероятно) является точной копией вопроса. Почему запрос пароля вводится навсегда, когда я захожу по SSH на сервер Ubuntu 9.05?


Решение

Исправьте конфигурацию DNS-преобразователя на сервере.

3

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

Чтобы отключить обратный поиск DNS, вам нужно отредактировать файл sshd_config, найти строку "UseDNS" и установить для нее "нет". (Вам придется перезапустить sshd, чтобы он вступил в силу.) В качестве альтернативы вы можете настроить свой собственный DNS-сервер для вашей локальной подсети. (DNSMasq - хороший легкий инструмент для игры, если вы не хотите связываться с BIND)

1

Вы можете попробовать вызвать ssh с максимальной подробной опцией: ssh -v -v -v .
Это может дать некоторую полезную информацию.

Одно из объяснений, которое я могу придумать, это то, что ваш сервер прослушивает iPv4, но у вас все еще включен iPv6 в локальной системе. Время ожидания будет тогда, когда ssh безуспешно пытается получить доступ к серверу на iPv6, затем сдается и пытается iPv4 с успехом.

В любом случае я предлагаю проверить, какие сетевые адаптеры включены и отключить те, которые бесполезны.

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