Вопрос или проблема
Я столкнулся со следующей проблемой при отладке ssh-соединений. У меня установлен Ubuntu 24.04 с openssh-server. Соответствующий сервис systemd работает (теперь называется ssh.service и ssh.socket на 24.04).
Я проверил открытые сокеты, которые слушают на порту 22. К моему удивлению, не оказалось сокета, который слушает на IPv4. Единственная запись видна для IPv6. Тем не менее, я смог подключиться по IPv4 (127.0.0.1 и указанный адрес DHCP). Я ожидал поведение, которое наблюдается на моем старом Ubuntu 22.04, где два сокета слушают: один для IPv4 и один для IPv6. Я знаю, что что-то изменилось в сервисе ssh(d) в последнем Ubuntu, тем не менее, этот способ обнаружения открытых (слушающих) сокетов, похоже, “сломался”.
Вопросы:
-
Это ожидаемое поведение?
-
Почему это изменилось?
-
Как надежно обнаружить все слушающие сокеты
(для IPv4/6)?
Отсутствующий сокет для прослушивания IPv4:
Ubuntu 24.04 | openssh-server/noble-updates,now 1:9.6p1-3ubuntu13.5 amd64
$ sudo netstat -peant | grep 22
<ЗДЕСЬ Я ОЖИДАЛ ЗАПИСЬ>
tcp6 0 0 :::22 :::* LISTEN 0 13806 1/init
$ sudo ss -tln | grep 22
<ЗДЕСЬ Я ОЖИДАЛ ЗАПИСЬ>
LISTEN 0 4096 *:22 *:*
$ sudo ss -tln -4 | grep 22
<ПУСТО: ЗДЕСЬ Я ОЖИДАЛ ЗАПИСЬ>
Ожидаемое:
Ubuntu 22.04.4 LTS | openssh-server/jammy-updates,jammy-security,now 1:8.9p1-3ubuntu0.10 amd64
$ sudo netstat -peatn | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 27791 1381/sshd: /usr/sbi
tcp6 0 0 :::22 :::* LISTEN 0 27793 1381/sshd: /usr/sbi
$ sudo ss -tln | grep 22
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
В файле sshd_config
у вас есть следующая директива:
ListenAddress 0.0.0.0
ListenAddress ::
Вторая для IPv6 и первая для IPv4.
Установите вышеуказанный адрес прослушивания для ipv4 рядом с ipv6.
Ответ или решение
Проблема: Отсутствие сокета IPv4 в OpenSSH на Ubuntu 24.04
При работе с SSH на Ubuntu 24.04 вы столкнулись с проблемой, когда сокет для IPv4 не появляется в списке слушающих сокетов, несмотря на то, что соединение по этому протоколу возможно. Это поведение отличается от более ранних версий, таких как Ubuntu 22.04, где оба сокета, для IPv4 и IPv6, взаимодействовали.
1. Ожидаемо ли такое поведение?
Такое поведение может быть связано с изменениями в конфигурации и поведении OpenSSH в новых версиях Ubuntu. В Ubuntu 24.04 основное внимание уделяется улучшению поддержки IPv6, и это может быть причиной того, что сокет для IPv4 не отображается в списке. Однако наличие активных соединений через IPv4 (например, через локальный хост или по DHCP-адресу) указывает на то, что служба SSH продолжает работать с IPv4, даже если сам сокет не отображается.
2. Почему произошло изменение?
Изменение может быть обусловлено обновлениями в конфигурации OpenSSH или системой управления сокетами systemd
. С новой версией Ubuntu была изменена логика настройки для предоставления более эффективного взаимодействия с сетевыми протоколами. В некоторых случаях такая настройка может привести к тому, что сокет для IPv4 будет "согнут" под сокет IPv6. Если в настройках указать как ListenAddress
, так и ListenAddress ::
, то это действительно обеспечит возможность прослушивания обоих адресов, но проблема может заключаться в конфигурации по умолчанию.
3. Как надежно обнаружить все слушающие сокеты (для IPv4/6)?
Чтобы удостовериться в наличии слушающих сокетов для обоих протоколов, вам стоит обратить внимание на следующие рекомендации:
-
Проверьте конфигурацию SSHD:
Откройте/etc/ssh/sshd_config
и убедитесь, что у вас установлены следующие строки:ListenAddress 0.0.0.0 ListenAddress ::
Это гарантирует, что SSH будет слушать на всех интерфейсах как для IPv4, так и для IPv6.
-
Проверьте состояния сокетов:
Используйте следующие команды для проверки состояния сокетов:sudo ss -tln | grep 22 sudo netstat -tln | grep 22
-
Перезапустите службу SSH:
После внесения изменений в конфигурацию, перезапустите службу SSH для применения новых параметров:sudo systemctl restart ssh.service
-
Используйте дополнительные инструменты:
Для более подробной информации о сетевом взаимодействии используйте:sudo lsof -i -P -n | grep LISTEN
Это обеспечит управление сокетами и оптимизирует взаимодействие с сетевыми протоколами в вашей системе.
Заключение
Ваша проблема с отсутствием сокета IPv4 на Ubuntu 24.04 не является уникальной, и с новыми версиями системы могут происходить изменения в конфигурации и работе служб. Следуя приведенным выше рекомендациям, вы сможете обеспечить корректную работу SSH-протокола с обоими типами адресов и расширить возможности управления сетевыми соединениями.