Час очікування з'єднання для ssh-сервера


11

Я намагаюся налаштувати openssh-сервер, але у мене виникають деякі проблеми з підключенням. Я змінив порт на щось нестандартне (57757), а потім встановив маршрутизатор для переадресації до цього порту. У моїй локальній мережі я можу добре ввімкнути свою машину за допомогою порту 57757, але не зможу зробити це в WAN.

Якщо я перебуваю за межами локальної мережі, і намагаюся отримати доступ до своєї машини через неправильний порт, я одразу отримую повідомлення про "відмову від з'єднання". Однак при правильному порту він просто зависає, а потім очікується час.

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

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


Ви щось змінили біля порту, який він слухає?
guntbert

@guntbert Nope. Чи може бути проблема з петлею?
Ci3

петля? ти спробував тільки з самої машини? чи є у вас інший пристрій у вашій локальній мережі, щоб перевірити?
guntbert

@guntbert Я спробував це на іншій машині, і всередині локальної мережі немає проблем.
Ci3

Моя ідея "останнього засобу": sudo apt-get purge openssh-serverпотім перевстановіть її (щоб ми позбулися всього, що могло статися з конфігурацією) і переконфігуруйте ваш маршрутизатор для переадресації 22-> 22.
guntbert

Відповіді:


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

    Отже, якщо ви не тестуєте порт вперед від хоста на стороні WAN, вам слід зробити це. Ваші варіанти цього:

    • Підключіть себе з боку WAN. Це працює, якщо у вас там є доступ до машини, наприклад, доступ SSH до віддаленої машини в школі, на роботі, в будинку друзів тощо.

    • Підключіть тестовий апарат між маршрутизатором і тим, що забезпечує його інтернет-з'єднання. Якщо у вас є кабельний / DSL / ISDN-модем з портом Ethernet і ваш маршрутизатор підключений до цього, ви можете підключити комутатор до модему і підключити маршрутизатор до комутатора. Підключіть комп'ютер до комутатора. По-перше, подивіться, чи отримує цей апарат просто доступ до Інтернету - в наші дні багато провайдерів надають дві або більше окремих IP-адрес. Якщо цього не відбувається , перейдіть на сторінку налаштування вашого маршрутизатора і перевірте його маску підмережі WAN IP та WAN , а потім статично призначте IP-адресу машині з підключенням, що знаходиться в одній підмережі.

      Цей метод має деякі недоліки. Це біль! Крім того, теоретично можливо, щоб ISP неправильно налаштував свою мережу, щоб тестова машина, підключена до комутатора, могла мати доступ до Інтернету. (Якщо тільки ваш намір провайдера не дозволить вам з'єднатися з більш ніж одним IP-адресою WAN іви, мабуть, вибрали IP-адресу WAN для тестової машини, яку вам призначив ваш провайдер, трафік між нею та справжнім хостом WAN повинен бути заблокований / відмовлений провайдером. Але деякі провайдери мають дивні практики, тож хто знає?) Якщо це станеться, це, швидше за все, не спричинить у когось серйозних проблем (і навіть якщо це сталося, у вас підключено лише кілька хвилин) Однак це потенційно може розглядатися як спроба отримати додатковий доступ поза межами вашої підписки, і що ще важливіше - якщо інший користувач має той самий IP, він може заважати їх з'єднанню. Тому, якщо ви хочете спробувати цей метод, не намагайтеся отримати доступ до Інтернету з тестової машини, негайно зупиняйтеся, якщо виявите, що тестова машина може отримати доступ до Інтернету, і не намагайтеся це робити взагалі, якщо це заборонено чи не рекомендується провайдером. (І не використовуйте це, якщо сторона WAN вашого маршрутизатора - це офісна локальна мережа, попередньо не проконсультувавшись з мережевим адміністратором. Це не Інтернет-провайдер і немає припущення, що ресурси передбачені для запобігання небажаного доступу.)

      Існує різниця у цій техніці, яка іноді є більш доречною. Ваш маршрутизатор, ймовірно, отримує свою інформацію про з'єднання - IP-адресу, маску підмережі, IP-адресу шлюзу (маршрутизатора) в WAN, яку він використовує, коли він не знає, куди щось надіслати, та інформацію про DNS-сервери - від вашого ISP, через DHCP, через кабельний / DSL / ISDN модем. Ось чому ви повинні мати маршрутизатор підключений до модему, щоб надати йому необхідну конфігурацію, щоб зробити результати тестування на стороні WAN значущими. Але маршрутизатор зазвичай запам'ятовує цю інформацію, доки вона фактично підключена до мережі з боку WAN. Таким чином, ви можете підключити маршрутизатор, модем і тестову машину, але потім, швидко іперш ніж робити що-небудь з тестовою машиною, окрім того, щоб переконатися, що комутатор вважає його підключеним , відключіть модем.

    • Скористайтесь безкоштовним сервісом в Інтернеті для тестування своїх портів. Оскільки вставлення тестової машини між інтерфейсом WAN вашого маршрутизатора та Інтернетом (вище) дуже сильно задіяно, і оскільки воно покаже порт як доступний, навіть якщо він недоступний через його блокування провайдером (що також стосується підключення до WAN IP маршрутизатора з боку локальної мережі) - зазвичай краще скористатися веб-сервісом сканування портів.

      Існує багато послуг сканування портів. (Деякі споживають фразу "перевірити брандмауер" з думкою, що більшість людей намагаються заблокувати, а не полегшити доступ.) Це одне. Якщо ви вирішили скористатися цим, натисніть « Продовжити» , введіть 57757 у текстове поле та натисніть « Використовувати визначений спеціальний зонд для порту» . Для того, щоб сервер запустився, ви хочете, щоб він був "відкритим". "Закритий" означає, що порт доступний, але сервер не працює (і тому спроба з'єднання була відхилена). "Стелс" означає, що порт був недоступний - це так, ніби жодна машина не знаходилася там (або як би порт пересилався там, де немає машини).

  5. Гаразд, ви визначили, що це дійсно недоступно з Інтернету. Потенційно ви можете сканувати його (в ідеалі з боку WAN), щоб отримати детальну інформацію, хоча часто це не дає корисної інформації.

    Якщо ви хочете це зробити, то на стороні WAN ви можете запустити:

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

    Якщо порт показаний як відфільтрований, це підтверджує, що надіслані туди пакети, ймовірно, нікуди не потрапляють (або блокуються / відкидаються по дорозі).

  6. Варто перевірити, чи проблема виникає в тому, що порт, який піддається впливу WAN, відрізняється від порту, який насправді слухає сервер. Переадресація порту 55757 по WAN до порту 22 на машині локальної мережі повинна зробити щось нормальним, але, можливо, десь (сервер, клієнт) щось припускає, що номер порту однаковий з точки зору сервера та клієнта.

    Імовірно, ви не можете переслати порт 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в цьому випадку не буде корисним.


Гаразд, я подумав, що сторона машини в порядку. Так, я встановив маршрутизатор на 57757 до 22 ... але у мене така ж проблема. sshd_config також встановлений на порту 22.
Ci3

Мабуть, це повинно бути: " порт, який ви хочете використовувати зовні (наприклад, 57757 ) для порту 22 на вашій машині ." Це адреса загальнодоступного порту, для якої вам потрібно затемнення.
david6

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.