У меня есть сервер с 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-адрес добавляет их в качестве разрешающих правил, чтобы вы были в большей безопасности.