Назад | Перейти на главную страницу

Проблемы с подключением к серверу Ubuntu по SSH (возможно, маршрутизатор)

У меня есть сервер с Ubuntu 12.04. Я установил OpenSSH и пытаюсь получить к нему доступ с другого компьютера в другой сети, используя эту команду (измененную для правильных значений):

ssh username@192.168.0.X

я я могу подключиться, когда я нахожусь на любом другом компьютере в той же сети, но при попытке проверить IP-адрес моего сервера из другой сети все, что я получаю, это:

Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
ping: sendto: No route to host
Request timeout for icmp_seq 4
ping: sendto: Host is down
Request timeout for icmp_seq 5
ping: sendto: Host is down
Request timeout for icmp_seq 6
ping: sendto: Host is down
Request timeout for icmp_seq 7
ping: sendto: Host is down
Request timeout for icmp_seq 8
ping: sendto: Host is down
Request timeout for icmp_seq 9
ping: sendto: Host is down
Request timeout for icmp_seq 10

Благодаря моим поискам я узнал ping иногда ненадежно, поэтому я попробовал telnet my_ip, и он все еще не мог подключиться.

Я предполагаю, что это проблема маршрутизатора, возможно, брандмауэра, но я не уверен, что это могло быть.

Я убедился, что порт 22 открыт, используя http://www.yougetsignal.com/tools/open-ports/

Сеть, в которой находится сервер, работает от маршрутизатора Netgear. ifconfig (терминал Ubuntu):

eth0      Link encap:Ethernet  HWaddr 6c:3b:e5:b8:64:3e  
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6e3b:e5ff:feb8:643e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:83734 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47851 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35300099 (35.3 MB)  TX bytes:6103273 (6.1 MB)
          Interrupt:16 

eth1      Link encap:Ethernet  HWaddr 6c:3b:e5:b8:64:3f  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:456 errors:0 dropped:0 overruns:0 frame:0
          TX packets:456 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:49255 (49.2 KB)  TX bytes:49255 (49.2 KB)

Сеть, к которой я пытаюсь получить доступ, работает на маршрутизаторе Verizon. ifconfig (терминал Mac):

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>
    ether a8:20:66:07:eb:a4 
    media: autoselect (none)
    status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 20:c9:d0:32:05:02 
    inet6 fe80::22c9:d0ff:fe32:502%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.69 netmask 0xffffff00 broadcast 192.168.1.255
    media: autoselect
    status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
    lladdr 00:3e:e1:ff:fe:7a:36:b0 
    media: autoselect <full-duplex>

Что еще могло вызвать эту проблему?

tl; dr: вам нужно настроить переадресацию портов на вашем маршрутизаторе, или установить ваш SSH-сервер за пределами DMZ, или что-то в этом роде. Затем используйте IP-адрес вашего маршрутизатора вместо вашего сервера.

Основываясь на вашем комментарии, вы используете ssh [user]@192.168.0.[some number]. Это будет работать, только если вы подключены к той же сети.

Зачем? Потому что (вероятно, AFAIK) ваш маршрутизатор имеет общедоступный IP-адрес, а каждый из компьютеров в вашей сети имеет частный IP-адрес. Ваш публичный IP-адрес выглядит так: 71.32.87.80. Это довольно случайно и время от времени меняется. Ваш частный IP-адрес выглядит так, как вы ввели в своей команде SSH; он был назначен вашему компьютеру вашим маршрутизатором при подключении. Каждому компьютеру, который использует данный маршрутизатор, назначается частный IP-адрес.

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

Допустим, ваш сервер подключен к маршрутизатору A. Когда вы находитесь на маршрутизаторе A, и вы подключаетесь к 192.168.0.x, вы подключаетесь к компьютеру, который также подключен к маршрутизатору A - вашему серверу. Когда вы не используете маршрутизатор A - допустим, вы используете маршрутизатор B - и подключаетесь к 192.168.0.x, вы подключаетесь к какому-то компьютеру, подключенному к маршрутизатору B - не твой сервер. Ваше соединение никогда не покидает сеть маршрутизатора B.

Из-за этого вам необходимо подключиться к общедоступному IP-адресу маршрутизатора A, а не к частному IP-адресу вашего сервера. Затем вам необходимо настроить маршрутизатор A для пересылки входящего трафика на ваш сервер. Это фактически заставляет IP-адрес маршрутизатора A действовать как IP-адрес вашего сервера для входящего трафика.

Примечание: я понимаю, что объяснение было не лучшим с точки зрения простоты понимания. Пожалуйста, дайте мне знать, что я могу сделать, чтобы его улучшить.

Для меня это похоже на возможную проблему с сетевым фильтром. Вы проверяли, перенаправляет ли ваш Netgear порт 22 на ваш сервер?

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

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