Вопрос или проблема
У меня есть домашний компьютер, который использует Ubuntu 22.04, и я хотел бы подключаться к нему по SSH удаленно через интернет. Я пытаюсь сделать это через его публичный IPv6-адрес. Адрес не начинается с fe80::
, так что это не адрес локальной сети. Вот команда, которую я использую:
ssh <имя пользователя>@<ipv6 адрес>
Однако возникает ошибка: ssh: connect to host <ipv6 адрес> port 22: No route to host
.
Я могу подключаться по SSH к этой машине с другого устройства в той же сети, используя вышеуказанную команду, но не из интернета.
Я также пробовал эти варианты, оба дают ту же ошибку No route to host
:
ssh -6 <имя пользователя>@<ipv6 адрес>
ssh <имя пользователя>@<ipv6 адрес>%eno1
Что может идти не так?
Брандмауэр ufw
в Ubuntu отключен. Также вот как выглядит мой /etc/ssh/sshd_config
:
# Это системный файл конфигурации sshd на уровне всей системы. Смотрите # sshd_config(5) для получения дополнительной информации. # Этот sshd был скомпилирован с PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games # Стратегия, используемая для параметров в конфигурационном файле sshd_config по умолчанию, поставляемом с # OpenSSH, состоит в том, чтобы указывать параметры с их значением по умолчанию, где # это возможно, но оставлять их закомментированными. Раскомментированные параметры переопределяют # значение по умолчанию. Include /etc/ssh/sshd_config.d/*.conf #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Шифры и ключи #RekeyLimit default none # Логирование #SyslogFacility AUTH #LogLevel INFO # Аутентификация: #LoginGraceTime 2m #PermitRootLogin prohibit-password #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 #PubkeyAuthentication yes # Ожидайте, что .ssh/authorized_keys2 будет игнорироваться по умолчанию в будущем. #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # Для этого вам также понадобятся ключи хоста в /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Измените на yes, если вы не доверяете ~/.ssh/known_hosts для # HostbasedAuthentication #IgnoreUserKnownHosts no # Не читайте файлы ~/.rhosts и ~/.shosts пользователя #IgnoreRhosts yes # Чтобы отключить туннелируемые пароли в открытом тексте, измените на нет здесь! PasswordAuthentication no #PermitEmptyPasswords no # Измените на yes, чтобы включить пароли с вызовом-ответом (будьте осторожны с проблемами с # некоторыми модулями PAM и потоками) KbdInteractiveAuthentication no # Параметры Kerberos #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # Параметры GSSAPI #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Установите это как 'yes', чтобы включить аутентификацию PAM, обработку учетных записей, # и обработку сеансов. Если это включено, аутентификация PAM будет # разрешена через KbdInteractiveAuthentication и # PasswordAuthentication. В зависимости от вашей конфигурации PAM, # аутентификация PAM через KbdInteractiveAuthentication может обойти # настройку "PermitRootLogin without-password". # Если вы просто хотите, чтобы проверки учетных записей и сеансов PAM выполнялись без # аутентификации PAM, то включите это, но установите PasswordAuthentication # и KbdInteractiveAuthentication на 'no'. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS no #PidFile /run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # нет пути для баннера по умолчанию #Banner none # Разрешить клиенту передавать переменные окружения локали AcceptEnv LANG LC_* # переопределить значение по умолчанию для подсистем Subsystem sftp /usr/lib/openssh/sftp-server # Пример переопределения настроек для каждого пользователя #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
А вот результат sudo iptables -L
:
Цепочка INPUT (политика ACCEPT) цель протокол опция источник назначение Цепочка FORWARD (политика ACCEPT) цель протокол опция источник назначение Цепочка OUTPUT (политика ACCEPT) цель протокол опция источник назначение
Основываясь на вашем первоначальном вопросе, маршрутизация IPV6 работает нормально в вашей локальной сети, поэтому я бы предложил проверить настройки брандмауэра\nat\переадресации портов на маршрутизаторе, а также, возможно, связаться с провайдером, чтобы выяснить, есть ли что-то с их стороны, что мешает вам подключиться через IPV6 извне.
rm /etc/dhcpcd.conf
У меня была такая же проблема с IPv6 на моей виртуальной машине, но затем я узнал, что этот один маленький файл конфигурации является необязательным.
Все настройки dhcpcd могут быть заданы в файле /etc/dhcpcd.conf, но для большинства установок dhcpcd будет работать сразу после установки, предполагая, что большинство компьютеров в настоящее время находятся за маршрутизатором или точкой доступа, работающими как DHCP-сервер.
Проблема здесь в “избыточной конфигурации”. Если это работает, не усложняйте. KISS
Это может и не быть проблемой автора вопроса, но это была моя проблема, и я, вероятно, не последний. Успехов!
Ответ или решение
Для начала, давайте разберем проблему с подключением по протоколу SSH к вашему домашнему компьютеру на Ubuntu 22.04 по IPv6-адресу, при этом вы получаете ошибку «no route to host». Основная проблема заключается в том, что хотя вы можете успешно подключиться к своему компьютеру из локальной сети, удаленные подключения через интернет не работают. Наша задача — выяснить, что может быть причиной этой ошибки.
1. Проверьте конфигурацию маршрутизации
Первая и самая очевидная проблема заключается в маршрутизации. Ошибка «no route to host» указывает на то, что маршрутизатор вашего интернет-провайдера не знает, как отправить пакеты к вашему устройству. Убедитесь, что ваш маршрутизатор и ваш интернет-провайдер поддерживают IPv6.
Что проверить:
-
Настройки маршрутизатора: Убедитесь, что ваш маршрутизатор правильно настроен для работы с IPv6 и позволяет входящие соединения. Настройки могут варьироваться в зависимости от модели маршрутизатора.
-
Проверка IPv6: Убедитесь, что ваш IPv6-адрес действительно публичный и доступен извне. Для этого вы можете воспользоваться онлайн-сервисами, которые проверяют доступность IPv6-адресов.
2. Настройка маршрутизации на роутере
В большинстве домашних маршрутизаторов необходимо дополнительно настроить маршрутизацию для входящих подключений. Это может включать:
-
Проброс портов (Port Forwarding): Для использования SSH (порт 22) необходимо настроить проброс этого порта на ваш компьютер с внутренним адресом IPv6.
-
Общие настройки безопасности: Некоторые маршрутизаторы могут иметь функции защиты, которые блокируют входящие соединения по умолчанию. Убедитесь, что они включают ваше SSH-соединение.
3. Проверьте конфигурацию SSH
Согласно описанию, конфигурация sshd на вашем компьютере выглядит стандартно. Однако убедитесь в следующем:
ListenAddress
должна содержать строку::
, которая позволит вашему SSH-серверу принимать соединения по всем интерфейсам, включая IPv6.
4. Проверка блокировок на уровне системы
Хотя вы упомянули, что ufw (Uncomplicated Firewall) отключен и iptables имеет политику ACCEPT, важно проверить наличие других прав доступа или средств безопасности:
- SELinux/AppArmor: Если один из этих инструментов активен, он может блокировать SSH-соединения. Проверьте настройки SELinux или AppArmor и убедитесь, что разрешены соединения по SSH.
5. Безопасность провайдера
В некоторых случаях ваши попытки SSH могут блокироваться на уровне вашего интернет-провайдера. Причины могут быть различны, включая:
- Политики блокировки определенных типов трафика.
- Ограничения на использование определенных портов.
Рекомендуется связаться с вашим интернет-провайдером, чтобы выяснить, нет ли у них ограничений по работе с IPv6 или доступом по SSH.
Резюме
Чтобы подключиться к вашему компьютеру по SSH через IPv6, необходимо удостовериться, что:
- Ваш маршрутизатор правильно настроен для работы с IPv6 и пробросом портов.
- Конфигурация SSH на вашем компьютере корректна и допускает входящие соединения.
- Нет блокировок на уровне операционной системы или со стороны интернет-провайдера.
Если все вышеперечисленные пункты верны и проблема сохраняется, попробуйте временно подключиться к другому интернет-соединению, чтобы исключить проблемы с вашим текущим провайдером.