У меня есть сервер, на котором запущен libvirtd. Я только что проверил порты libvirtd и вижу вывод ниже. Мне интересно, почему порт 16514 PID всегда равен 1 и почему tcp6 обрабатывает ipv4 с несколькими соединениями.
Может ли кто-нибудь дать мне знать?
root@prd-140:~# netstat -anpt |grep 16514
tcp6 0 0 :::16514 :::* LISTEN 1/systemd
tcp6 0 0 10.1.6.140:16514 10.2.127.52:60556 ESTABLISHED 12289/libvirtd
tcp6 0 0 10.1.6.140:16514 10.2.127.52:29463 ESTABLISHED 12289/libvirtd
root@prd-140:~# lsof -i :16514
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 59u IPv6 9761899 0t0 TCP *:16514 (LISTEN)
libvirtd 12289 root 5u IPv6 9761899 0t0 TCP *:16514 (LISTEN)
libvirtd 12289 root 30u IPv6 20539283 0t0 TCP prd-140:16514->10.2.127.52:60556 (ESTABLISHED)
libvirtd 12289 root 35u IPv6 20549679 0t0 TCP prd-140:16514->10.2.127.52:29463 (ESTABLISHED)
решение1
- Первая часть посвящена активации systemd на основе сокетов.
- Вторая часть посвящена обработке двойного стека IPv4/IPv6.
активация systemd на основе сокетов
Файл конфигурации устройства, имя которого заканчивается на «.socket», кодирует информацию о сетевом сокете IPC или файловой системе FIFO, контролируемой и контролирующейся systemd, напримерактивация на основе сокета.
Для каждого блока розеток должен существовать соответствующий блок обслуживания [...]
Обратите внимание, что программное обеспечение демона, настроенное для активации сокетов с помощью сокетных модулей, должно иметь возможность принимать сокеты из systemd либо через собственный интерфейс передачи сокетов systemd (см.sd_listen_fds(3) для получения подробной информации о точном используемом протоколе и порядке передачи файловых дескрипторов) или с помощью традиционныхинетд(8)-стиль передачи сокетов (т. е. сокеты, передаваемые через стандартный ввод и вывод с использованием StandardInput=socket в служебном файле).
Эта функция является улучшением по сравнению с тем, что былоинетд(«Интернет-суперсервер») может предоставить, но может потребовать дополнительной поддержки со стороны приложения (для собственного интерфейса передачи сокетов systemd).
libvirtd предлагает такую поддержку:
Монолитная системная интеграция
Когда демон libvirtd управляется systemd, становится доступен ряд желаемых функций, в частности активация сокетов.
libvirtd.service
- основной файл модуля для запуска демона libvirtd в системном режиме.
libvirtd.socket
- файл модуля, соответствующий основному сокету UNIX для чтения и записи/var/run/libvirt/libvirt-sock
.
Здесь, похоже, настройки OP не просто используют сокет Unix по умолчанию, но и включеныУдаленные соединения TLS.
Цель состоит в том, чтобы позволитьсистемдуправлять сокетом без необходимости запускаlibvirtdпока не будет получен запрос на этот сокет.системдзатем начнетсяlibvirtdслужба, которая наследует сокет.
IPv6 использует режим двойного стека IPv4/IPv6
Вторая функция — это то, как работает двойной стек IPv4/IPv6: используйте API IPv6, получите IPv4 бесплатно. Это можно отключить с помощью IPV6_ONLY
опции сокета, но по умолчанию используется двойной стек, как рекомендуется в RFC 3493: Базовые расширения интерфейса сокета для IPv6:
5.3 Параметр IPV6_V6ONLY для сокетов AF_INET6
Эта опция сокета ограничивает сокеты AF_INET6 только для связи IPv6. Как указано в разделе <3.7 Совместимость с узлами IPv4>, сокеты AF_INET6 могут использоваться для связи как по протоколу IPv4, так и по протоколу IPv6.
По умолчанию эта опция отключена.
Это означает, что по умолчанию IPv6 может обрабатывать IPv4 в системе, соответствующей RFC, и при этом приложение не отключает эту функцию активно.
netstat
выбирает отображение простого IPv4, но, например, локальный адрес, видимый на установленномРозеткина самом деле этоIPv6-адрес, сопоставленный с IPv4: ::ffff:10.1.6.140
(или ::ffff:0a01:068c
) как бы ss -anpt
отображалось вместо этого в Linux. Адрес напроволокаконечно же остается обычный адрес IPv4.