Тайм-аут подключения для ssh-сервера

10

Я пытаюсь настроить openssh-сервер, но у меня есть некоторые проблемы с подключением. Я изменил порт на что-то нестандартное (57757), а затем установил мой маршрутизатор для перехода к этому порту. В моей локальной сети я могу с помощью ssh подключиться к компьютеру с помощью порта 57757, но не смог сделать это в WAN.

Если я за пределами локальной сети, и я пытаюсь получить доступ к моей машине по некорректному порту, я сразу же получаю сообщение «отказался от соединения». Однако с правильным портом он просто зависает, а затем тайм-ауты.

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

EDIT: Я понял, что моя проблема в том, что мой маршрутизатор не поддерживал доступ к нему по WAN IP внутренне. Я отправился на другой сервер и вернулся, и он работал нормально.

    
задан Ci3 12.01.2013 в 21:23
источник

2 ответа

11

Обычно это означает, что вы перенаправили порт на неправильный IP-адрес в локальной сети.

Ваш NAT-маршрутизатор получает входящий трафик на порт 57757 и отправляет его на определенный IP-адрес и порт в локальной сети .

По умолчанию Ubuntu не фильтрует входящие попытки подключения с помощью брандмауэра. Поэтому, если вы не изменили настройки брандмауэра в Ubuntu, попытка открыть соединение с любым TCP-портом с 1 по 65535 будет либо:

  • принять соединение, если порт открыт.
  • отклонить попытку подключения, если порт закрыт

Если порты были отфильтрованы брандмауэром, то вы получите то, что видите, - не ответ на попытку подключения. Но:

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

Когда вы пересылаете порт на машину несуществующий с NAT-маршрутизатором, он отправляет входящий трафик на этом порту на несуществующую машину, то есть отправляет ее в черный отверстие ; он эффективно удаляется.

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

Если это окажется не проблемой ...

... тогда вам нужно будет устранить некоторые проблемы.

  1. Правильно ли указан порт для локальной сети? То есть, предположив, что вы не изменили конфигурацию сервера SSH, порт 57757 на стороне WAN настроен для перехода на порт 22 на сервере OpenSSH? (Вы можете дважды проверить это.)

  2. Возможно, есть некоторые проблемы с выбранным вами портом (57757). Попробуйте другой и посмотрите, работает ли это лучше.

    (Если это не так, и вы выполните эти инструкции, либо измените его, либо замените «57757» ниже новым номером.)

  3. Попробуйте перезагрузить сервер OpenSSH. Это может помочь, если есть проблема с сетью. Если это не помогает, попробуйте перезапустить маршрутизатор и кабель / DSL / ISDN-модем.

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

    Чтобы перезагрузить сервер OpenSSH:

    sudo restart ssh
    

    Чтобы отключить сетевой интерфейс, сначала определите, в каком интерфейсе он находится:

    ifconfig
    

    Как правило, для машины с одной картой Ethernet и / или с одной беспроводной картой Ethernet составляет eth0 , а беспроводная сеть - wlan0 .

    Если проводное Ethernet-соединение - это то, что вы хотите снять и перезапустить, запустите:

    sudo ifdown eth0
    

    Затем запустите:

    sudo ifup eth0
    

    В качестве альтернативы вы можете запустить:

    sudo ifconfig eth0 down
    

    Далее следуют:

    sudo ifconfig eth0 up
    

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

    Для подключения к Ethernet также попробуйте отсоединить кабель и снова подключить его. Для беспроводного подключения попробуйте отключить его с помощью аппаратного переключателя (если есть) и снова включите.

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

  4. Как вы пытаетесь получить к нему доступ со стороны WAN? Если вы используете компьютер в локальной сети для этого (просто подключаясь из локальной сети к WAN-маршрутизатору вашего маршрутизатора), это поддерживается только для некоторых маршрутизаторов. В конце концов, работа маршрутизатора заключается в маршрутизации трафика между сторонами WAN и LAN, а не маршрутизации трафика с одной стороны на себя. Поддержка подключения к пересылаемым портам на WAN-IP из локальной сети на самом деле является исключением, а не правилом, хотя многие домашние / офисные маршрутизаторы имеют эту функцию.

    Итак, если вы не тестируете порт с хоста на стороне WAN, вы должны это сделать. Ваши варианты:

    • Подключите себя со стороны WAN. Это работает, если у вас есть доступ к машине там, например, SSH-доступ к удаленной машине в школе, работе, доме друга или аналогично.

    • Подключите тестовый компьютер между маршрутизатором и тем, что обеспечивает его подключение к Интернету. Если у вас есть модем кабеля / DSL / ISDN с Порт Ethernet и ваш маршрутизатор подключены к этому, вы можете подключить коммутатор к модему и подключить маршрутизатор к коммутатору. Подключите компьютер к коммутатору. Сначала посмотреть, не получает ли этот компьютер доступ к Интернету - в наши дни многие интернет-провайдеры предоставляют два или более отдельных IP-адреса. Если это не , перейдите на страницу настройки маршрутизатора и проверьте его WAN IP и маску подсети WAN , затем статически назначить IP-адрес подключенной к коммутатору машине, находящейся в той же подсети.

      Этот метод имеет некоторые недостатки. Это боль! Кроме того, теоретически возможно, чтобы интернет-провайдер неправильно настроил свою сеть, чтобы тестовый компьютер, подключенный к коммутатору, мог получить доступ к Интернету. (Если ваше намерение вашего интернет-провайдера не позволяет вам подключаться к нескольким WAN IP и , вы выбрали WAN IP для тестовой машины, которую назначил вам ваш провайдер, трафик между ним и истинным Хост WAN должен быть заблокирован / удален провайдером. Но у некоторых ISP есть странные практики, так кто знает?) Если это произойдет, это вряд ли вызовет серьезные проблемы (и даже если это произойдет, вы только подключите их до нескольких минут). Однако это потенциально можно рассматривать как попытку получить дополнительный доступ за пределы вашей подписки, и, что более важно, если другой пользователь имеет тот же IP-адрес, он может интегрироваться с их соединением. Поэтому , если вы хотите попробовать этот метод , не пытайтесь получить доступ к Интернету с тестовой машины, немедленно остановитесь, если обнаружите, что тестовый компьютер может получить доступ к Интернету, и не пытайтесь это сделать в все, если ваш интернет-провайдер запрещен или предупрежден. (И не используйте это, если сторона WAN вашего маршрутизатора - это офисная ЛВС, без предварительной консультации с вашим сетевым администратором. Это не интернет-провайдер, и нет предположения, что ресурсы предназначены для предотвращения нежелательного доступа.)

      Существует вариация в этой технике, которая иногда более уместна. Ваш маршрутизатор, вероятно, получает информацию о подключении - IP-адрес, маску подсети, IP-адрес шлюза (маршрутизатора) в глобальной сети, который использует it , когда он не знает, куда отправить что-либо, и информацию о DNS-серверах - от вашего интернет-провайдера через DHCP через модем кабеля / DSL / ISDN. Вот почему вы должны подключить маршрутизатор к модему, чтобы придать ему необходимую конфигурацию, чтобы результаты тестирования WAN были значимыми. Но маршрутизатор, как правило, помнит эту информацию, пока она фактически подключена к сети со стороны WAN. Таким образом, вы можете подключить маршрутизатор, модем и тестовый компьютер, но затем, быстро и перед тем, как делать что-либо с тестовой машиной, кроме того, чтобы убедиться, что переключатель видит ее как подключенную , отключите модем.

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

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

  5. ОК, поэтому вы определили, что он действительно недоступен из Интернета. Потенциально вы можете сканировать его (в идеале со стороны WAN), чтобы получить подробную информацию, хотя часто это не даст полезной информации.

    Если вы хотите это сделать, то на стороне WAN вы можете запустить:

    sudo nmap -sS -sV -p57757 -vv WAN-IP

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

  6. Стоит проверить, не возникает ли проблема, связанная с тем, что порт, открытый для WAN, отличается от порта, на котором фактически прослушивается сервер. Порт пересылки 55757 на WAN на порт 22 на LAN-машине должен сделать все хорошо, но, возможно, где-то (сервер, клиент) что-то предполагает, что номер порта одинаковый с точки зрения сервера и клиента.

    Предположительно, вы не можете перенаправить порт 22 через маршрутизатор. Возможно, ваш интернет-провайдер блокирует этот порт. Но если вы можете это сделать, сделайте это!

    В противном случае вы можете заставить сервер OpenSSH на самом деле прослушивать порт 57757.

    Для этого создайте резервную копию файла конфигурации сервера:

    cd /etc/ssh
    sudo cp sshd_config sshd_config.old
    

    Затем отредактируйте его:

    gksu gedit sshd_config
    

    Или используйте текстовый редактор консоли, если на компьютере нет графического интерфейса:

    sudo nano -w sshd_config
    

    В верхней части файла появится этот текст:

    # What ports, IPs and protocols we listen for
    Port 22
    # Use these options to restrict which interfaces/protocols sshd will bind to
    #ListenAddress ::
    #ListenAddress 0.0.0.0
    Protocol 2
    # HostKeys for protocol version 2
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key
    HostKey /etc/ssh/ssh_host_ecdsa_key
    #Privilege Separation is turned on for security
    UsePrivilegeSeparation yes
    

    Просто измените строку Port 22 вверху, вместо этого вместо Port 57757 .

    • Вы можете добавить порт, а не изменять его. Однако я рекомендую тестировать с простейшей эффективной конфигурацией.

      Подробнее о настройке сервера OpenSSH см. man sshd_config .

    Сохраните файл, закройте текстовый редактор и перезапустите сервер SSH:

    sudo restart ssh
    

    Теперь измените порт на маршрутизаторе так, чтобы порт 57757 перешел на порт 57757 (не 22) на сервере OpenSSH и посмотрел, доступен ли он из Интернета.

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

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

    Run:

    sudo iptables -L
    

    По умолчанию в Ubuntu вывод выглядит так:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    Это простая разрешающая политика, по сути эквивалентная не для запуска брандмауэра. (Действительно, если модуль брандмауэра netfilter не был скомпилирован в ваше ядро, ваша система будет вести себя так же, как и с вышеуказанными настройками, хотя команда iptables , которая запрашивает настройки netfilter , не будет работать Конечно.)

    Если ваша конфигурация не выглядит так, прочитайте man iptables чтобы выяснить, что они делают, и / или отредактировать ваш вопрос (или, если вы другой человек с аналогичной проблемой, читающей это, задайте новый вопрос), чтобы включить их. Обратите внимание, что потенциально ваши правила iptables могут раскрывать конфиденциальную информацию о вашей конфигурации. Практически говоря, это, как правило, не так - с возможным исключением правил о конкретных хостах, которые заблокированы, или если ваша конфигурация очень плохая / небезопасная - обычно полезность этой информации для злоумышленника, особенно для машина в локальной / офисной локальной сети за NAT-маршрутизатором минимальна.

ответ дан Eliah Kagan 12.01.2013 в 23:49
источник
1

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

    
ответ дан guntbert 12.01.2013 в 21:56