#Как распознать проблему и когда применять инструкции
По IPv4 SSH доступен, но по IPv6 не работает. Нужно проверить наличие глобального IPv6, маршрут, DNS-запись AAAA, прослушивание sshd и фильтрацию IPv6, не открывая сервер всему интернету. Уточните модель/сборку системы, наличие резервной копии и способ восстановить доступ, прежде чем применять действия.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| У узла нет глобального IPv6Адрес только fe80:: или вообще отсутствует | ip -6 addr не показывает глобального адреса | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| DNS направляет на старый IPv6AAAA не совпадает с текущим адресом сервера | ping -6 идёт на другой адрес | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
| sshd не слушает IPv6AddressFamily inet или ListenAddress привязан к IPv4 | ss -lnt показывает только 0.0.0.0 | Смотрите соответствующий диагностический шаг ниже: проверяйте именно этот признак перед изменением настроек. |
#Подробная проверка и безопасное решение
- Шаг 1. Сравните работу IPv4 и IPv6 с одного клиентаОткройте терминал клиента Linux/macOS. Ключи -4 и -6 принудительно выбирают семейство адресов; замените имя и логин. Если IPv4 работает, сохраните этот канал на время проверки.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh -4 -o ConnectTimeout=8 user@server.example.org
- Шаг 2. Проверьте конкретно IPv6 и запишите ошибкуВ том же клиентском терминале выполните вторую проверку. Network is unreachable означает отсутствие маршрута, Connection refused — отсутствие слушателя/отказ; тайм-аут может указывать на фильтрацию. Не изменяйте firewall до диагностики.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ssh -6 -vv -o ConnectTimeout=8 user@server.example.org
- Шаг 3. Посмотрите адреса на сервереВ действующем IPv4 SSH-сеансе или консоли провайдера проверьте интерфейсы. Для подключения из интернета нужен маршрутизируемый глобальный IPv6; адрес fe80:: действует лишь в пределах канала.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.
ip -6 addr show scope global
- Шаг 4. Проверьте путь и DNSНа клиенте найдите AAAA для имени и сравните с глобальным адресом сервера.
getent ahostsv6может отсутствовать в некоторых системах; используйтеdig AAAA, если установлен пакет DNS-утилит.Linux · Терминал (Bash)КомандаОткройте терминал той машины, которая названа в шаге; команда содержит примерные имена/пути. Подставьте свои значения, сравните вывод с ожидаемым результатом и при ошибке выясните причину прежде, чем продолжать.getent ahostsv6 server.example.org
- Шаг 5. Определите фактический слушающий адрес sshdНа сервере с правами администратора посмотрите прослушивание. Если только 0.0.0.0:22, проверьте AddressFamily и ListenAddress в sshd_config; перед правкой сделайте копию и проверку
sshd -t, сохраните IPv4-сеанс. - Выполняется в терминале сервера с правами администратора; требуется разрешение владельцаLinux · Терминал (Bash)КомандаНужен sudoВыполняется в терминале сервера с правами администратора; требуется разрешение владельца. Уточните фактические адреса и имена, прочитайте вывод и не выполняйте действия, если среда отличается от описанной.
sudo ss -lntp | grep ":22"
- Шаг 6. Проверьте фильтрацию именно IPv6На сервере выясните, что реально применяется: nftables, ip6tables, ufw, firewalld и правила облачного провайдера. Просмотрите правила, но не добавляйте широкое разрешение на все адреса.
- Если nft не установлен, выясните действующий инструмент межсетевого экранаLinux · Терминал (Bash)КомандаНужен sudoЕсли nft не установлен, выясните действующий инструмент межсетевого экрана.
sudo nft list ruleset
- Шаг 7. Сверьте путь из другой IPv6-сетиПовторите команду ssh -6 из сети с подтверждённым глобальным IPv6; проверьте подключение и журнал sshd. Если работает только из одной сети, ищите маршрутизацию или фильтр между клиентом и сервером.
#Как проверить результат и что делать, если не помогло
По IPv6 клиент подключается к тому же ожидаемому серверу, что и по IPv4, а команда ssh -6 работает с IPv6-сети. Проверка по IPv4 не доказывает работоспособность IPv6. Если симптомы не исчезли, сохраните точное сообщение об ошибке и выполненные проверки; не повторяйте опасные процедуры циклически.