OpenSSH SSH-демон: отсутствует сокет IPv4 на Ubuntu 24.04

Вопрос или проблема

Я столкнулся со следующей проблемой при отладке 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, тем не менее, этот способ обнаружения открытых (слушающих) сокетов, похоже, “сломался”.

Вопросы:

  1. Это ожидаемое поведение?

  2. Почему это изменилось?

  3. Как надежно обнаружить все слушающие сокеты

    (для 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)?

Чтобы удостовериться в наличии слушающих сокетов для обоих протоколов, вам стоит обратить внимание на следующие рекомендации:

  1. Проверьте конфигурацию SSHD:
    Откройте /etc/ssh/sshd_config и убедитесь, что у вас установлены следующие строки:

    ListenAddress 0.0.0.0
    ListenAddress ::

    Это гарантирует, что SSH будет слушать на всех интерфейсах как для IPv4, так и для IPv6.

  2. Проверьте состояния сокетов:
    Используйте следующие команды для проверки состояния сокетов:

    sudo ss -tln | grep 22
    sudo netstat -tln | grep 22
  3. Перезапустите службу SSH:
    После внесения изменений в конфигурацию, перезапустите службу SSH для применения новых параметров:

    sudo systemctl restart ssh.service
  4. Используйте дополнительные инструменты:
    Для более подробной информации о сетевом взаимодействии используйте:

    sudo lsof -i -P -n | grep LISTEN

Это обеспечит управление сокетами и оптимизирует взаимодействие с сетевыми протоколами в вашей системе.

Заключение

Ваша проблема с отсутствием сокета IPv4 на Ubuntu 24.04 не является уникальной, и с новыми версиями системы могут происходить изменения в конфигурации и работе служб. Следуя приведенным выше рекомендациям, вы сможете обеспечить корректную работу SSH-протокола с обоими типами адресов и расширить возможности управления сетевыми соединениями.

Оцените материал
Добавить комментарий

Капча загружается...