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

11

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

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

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

РЕДАКТИРОВАТЬ: я понял, что моя проблема была в том, что мой маршрутизатор не поддерживает доступ к нему через WAN IP внутри. Я ssh'd на другой сервер и обратно, и он работал нормально.

CI3
источник
Вы что-нибудь изменили, кроме порта, который он прослушивает?
Гюнтберт
@ Guntbert Нет. Может ли быть проблема с петлей?
Ci3
шлейф? ты пробовал только с самой машины? у вас есть другое устройство в вашей локальной сети для тестирования?
Гюнтберт
@ Guntbert Я попробовал это с другой машиной, и внутри локальной сети проблем нет.
Ci3
Моя идея «последней инстанции»: sudo apt-get purge openssh-serverзатем переустановить ее (чтобы мы избавились от всего, что могло случиться с конфигом) и перенастроить ваш маршрутизатор для пересылки 22-> 22.
Гюнтберт

Ответы:

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

    Поэтому, если вы не тестируете переадресацию порта с хоста на стороне WAN, вам следует это сделать. Ваши варианты для этого:

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

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

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

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

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

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

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

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

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

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

  6. Стоит проверить, не возникает ли проблема, связанная с тем, что порт, подключенный к глобальной сети, отличается от порта, который фактически прослушивает сервер. Переадресация порта 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вместо этого.

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

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

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

    sudo restart ssh
    

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

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

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

    Бегать:

    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-маршрутизатором минимальна.

Элия ​​Каган
источник
1

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

guntbert
источник
Хорошо, я подумал, что машинная сторона была в порядке. Да, я настроил мой маршрутизатор для перенаправления 57757 на 22 ... но у меня та же проблема. sshd_config также настроен на порт 22.
Ci3
Вероятно, это должно быть: « порт, который вы хотите использовать снаружи (например, 57757 ) для порта 22 на вашей машине» . Это адрес публичного порта, для которого вам нужно затенение.
david6
Неправильно