LINUX.ORG.RU
ФорумAdmin

Вышибает мозг непонятная логика работы LISTEN линух

 


0

1

netstat говорит что на ип4 нет открытого порта 3390, он открыт на tcp6 - ss тоже самое покажет

└─# netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      690/sshd: /usr/sbin
tcp        0      0 127.0.0.1:37679         0.0.0.0:*               LISTEN      681/containerd
tcp6       0      0 :::3390                 :::*                    LISTEN      711/xrdp
tcp6       0      0 127.0.0.1:3350          :::*                    LISTEN      683/xrdp-sesman
tcp6       0      0 :::22                   :::*                    LISTEN      690/sshd: /usr/sbin


Но какого .... я могу подключиться по ип4 к порту 3390
и lsof покажет мне IPv6 который установил соединение по ип4
WTF?
Нет это проблема не только этого приложения, эта проблема частая. Самое плохое в том что по быстрому реально все открытые порты не посмотреть. nmap тоже показывает что порт 3390 открыт на ип4

└─# lsof -i -P -n | grep ESTABLISHED
sshd      1022 root    4u  IPv4   8863      0t0  TCP 192.168.2.53:22->192.168.2.32:61603 (ESTABLISHED)
xrdp      1228 xrdp   12u  IPv6   9746      0t0  TCP 192.168.2.53:3390->192.168.2.32:61721 (ESTABLISHED)

-



Последнее исправление: Regacar (всего исправлений: 1)

Если у ipv6 слушающего сокета не выставлен флаг IPV6_V6ONLY (а по умолчанию он не выставлен), то на него приходя и ipv4 коннекты.

Как посмотреть с помощью netstat или чего ещё есть ли такой флаг не знаю. Глобально включался через /proc/sys/net/ipv6/bindv6only и тогда софт нужно было отдельно настраивать слушать 0.0.0.0 и ::, но может вам это и не надо.

Нашёл, что вроде как, на свежих ядрах (INET_DIAG_SKV6ONLY) свежий ss должен показывать звёздочку (*) вместо (::), если сокет слушает оба протокола.

mky ★★★★★
()
Последнее исправление: mky (всего исправлений: 1)
Ответ на: комментарий от Regacar

то что lsof показывает ip6 для ip4 подключения это все равно бред. какая тут логика не понятно

ipv4/ipv6 в lsof и tcp/upd/tcp6/udp6 в netstat это не про версию протокола ip, а про используемую в сокете ADDRESS FAMILY - AF_INET и AF_INET6

AF_INET - для работы только на 4 версии
AF_INET6 - dual stack, т.е. поддерживается и 4 и 6 версия

параметры -4 и -6 в ss и netstat - аналогично, фильтр по ADDRESS FAMILY, а не по используемой версии ip

v6only в выводе ss можно определить не только по записи адреса (*/::). Параметр -e добавляет явно v6only:0 или v6only:1

ss -tuplen
tcp        LISTEN      0           4096                          *:22                          *:*          users:(("systemd",pid=1,fd=119)) ino:12444 sk:c cgroup:/system.slice/ssh.socket v6only:0 <->                                           
tcp        LISTEN      0           4096                       [::]:5432                     [::]:*          users:(("docker-proxy",pid=2413,fd=4)) ino:18115 sk:e cgroup:/system.slice/docker.service v6only:1 <->

для netstat хз, там и адрес всегда :: для AF_INET6 сокетов и среди параметров ничего похожего не нашел

CaHbl4
()

еще вопрос по теме.

у меня 2 сетевые карты в сервере

служба запущена :::333 порту тоесть на ип4 и ип6
Но на какой сетевухе? или на обоих? они в разных сетях

Regacar
() автор топика
Последнее исправление: Regacar (всего исправлений: 1)