У меня есть маршрутизатор/модем Netgear C6300 (версия прошивки 2.01.14), и я пытаюсь изо всех сил подключиться по ssh к своему Raspberry Pi извне. Вот моя настройка переадресации портов:
Я могу подключиться по ssh изнутри, используя ssh 192.168.0.84
, но извне на canyouseeme.com я получаю сообщение «Ошибка: не удалось увидеть вашу службу на порту (22)». В моем sshd_config есть строка, Port 22
и ListenAddress
строки закомментированы. Другими словами, я не трогал этот файл. Что здесь происходит?
решение1
Мне на ум приходит несколько вещей.
Переадресация на вашем скриншоте выглядит нормально. Вы можете попробовать установить ее на TCP
вместо TCP/UDP
, поскольку ssh — это протокол TCP.
dyndns
Вы уверены, что используете правильное динамически обновляемое имя хоста или правильный публичный IP-адрес? Чтобы узнать публичный IP-адрес, откройте консоль на Raspberry или SSH (внутренне) и используйте curl icanhazip.com
.
sshd_config
Убедитесь, что в /etc/ssh/sshd_config
, что sshd слушает правильный интерфейс, если у вас их несколько. Закомментируйте строку ListenAddress a.b.c.d
с помощью #
и перезапустите службу ( /etc/init.d/sshd restart
или systemctl restart sshd
, в зависимости от вашего дистрибутива). Редактировать: извините, вы уже это сказали.
Редактировать:
маршрутизация
Если вы не можете получить выход из curl icanhazip.com
, скорее всего, ваш Raspberry не знает, как получить доступ к Интернету. Поэтому он не может ответить на вашу попытку подключения извне. Добавьте маршрут, например, с помощью ip route add default via <your modem's IP address>
и попробуйте еще раз.
iptables
Убедитесь, что ваш внутренний брандмауэр Raspberry разрешает SSH с внешних адресов. iptables -S
предоставит вам список правил. Найдите строки типа
-A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
# SSH only allowed from the internal network, if iptables policy INPUT is DROP
В этом случае разрешите весь входящий трафик с помощью iptables -P INPUT ACCEPT
или iptables -I INPUT -p tcp --dport 22 -j ACCEPT
.
DS-Lite (двойной стек Lite)
Внутри вашей домашней сети вы используете адреса IPv4. В вашем примере 192.168.0.x. Однако ваш интернет-провайдер может использовать IPv6 в своей сети. Маршрутизатор преобразует ваши адреса IPv4 в IPv6. Это обычно приводит к невозможности подключения к вашей домашней сети из удаленного доступа.
Если curl icanhazip.com
вам дали IPv6-адрес, например 2001:a61::35:2
, это может быть индикатором. Также, возможно, ваш C6300 покажет информацию об этом. (Я использую AVM Fritz!Box 7360, и он явно выводит "Fritz!Box использует туннель DS-Lite").
Чтобы быть на 100% уверенным, позвоните своему интернет-провайдеру.
Редактировать:
Если вы находитесь за туннелем DS-Lite, вам на ум приходят следующие варианты, позволяющие подключиться к дому удаленно:
- попросите своего провайдера/интернет-провайдера переключить вашу линию на линию без DS-Lite
- используйте
autossh
для подключения вашего домашнего компьютера к другому хосту, например, на работе (предварительно спросите своего работодателя), вашему веб-серверу, вашему VPS. Настройтеautossh
так, чтобы он создавал обратный туннель, например . Затем вы можете подключиться по ssh к yourvps.com и оттуда по ssh вернуться домой через .ssh -R 10000:localhost:22 [email protected]
ssh -p 10000 user@localhost
Редактировать:
Netgear C6300 специфичен
Похоже, в прошивках до версии прошивки 2.01.14 есть ошибка, из-за которой открытые порты будут видны только в том случае, если в разделе «Расширенная конфигурация» > «Настройка WAN» активирована опция «Отвечать на команду Ping на порте WAN в Интернете».