netstat - чому демони IPv4, які слухають порти, перелічені лише у -A inet6?


22

У мене є комп’ютер із:

Linux superhost 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

Він працює на портах 80 на всіх інтерфейсах Apache, і він не відображається netstat -planA inet, проте його несподівано можна знайти в netstat -planA inet6:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::5672                 :::*                    LISTEN      2402/beam.smp   
tcp6       0      0 :::111                  :::*                    LISTEN      1825/rpcbind    
tcp6       0      0 :::9200                 :::*                    LISTEN      2235/java       
tcp6       0      0 :::80                   :::*                    LISTEN      2533/apache2    
tcp6       0      0 :::34611                :::*                    LISTEN      1856/rpc.statd  
tcp6       0      0 :::9300                 :::*                    LISTEN      2235/java       
...
tcp6       0      0 10.0.176.93:80          10.0.76.98:53704        TIME_WAIT   -               
tcp6       0      0 10.0.176.93:80          10.0.76.98:53700        TIME_WAIT   -               

Я можу досягти цього за допомогою TCP4 просто чудово, як видно вище. Однак навіть ці з'єднання перераховані нижче tcp6. Чому?


1
Усі адреси IPv4 відображаються безпосередньо на адреси IPv6 (але не навпаки). Дивіться: en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
Патрік

4
будь ласка, перестаньте використовувати netstat? вона померла - десять років тому . Використовуйте iproute2 'sss
mikeserv

Відповіді:


16

За замовчуванням, якщо ви не вказали адресу для Listenпараметра Apache , він обробляє ipv6 адресу, використовуючи IPv4-mapped IPv6адреси. Ви можете подивитися в Apache ipv6

Вихід netstatне означає, що Apache не слухає адреси IPv4. Це IPv4-mapped IPv6адреса.


Є й інші сервіси, які слухають адреси IPv4, але вони вказані як tcp6 від netstat, наприклад ElasticSearch
Mischa

Я думаю, ви прочитали посилання на вікіпедію, надане @Patrick. Всі ті сервіси, які використовують IPv4-карту IPv6-адреси, будуть відображені у tcp6висновку netstat.
початківець

14

Причиною цього є те, що всі адреси IPv4 також є адресами IPv6. Невеликий діапазон адрес IPv6 було відведено для використання для однозначного відображення IPv4-адрес. Наприклад, адреса IPv4 192.0.2.128доступна через адресу IPv6 ::ffff:192.0.2.128. Це було зроблено для того, щоб будь-які програми, які підтримують лише IPv6, могли ще слухати адреси IPv4. Зауважте, що це не можна використовувати для адреси IPv6 (не картографовано) для розмови з IPv4 адресою без інших речей, оскільки IPv4 не знатиме, як обробляти адресу IPv6 (ви можете використовувати NAT чи інші рішення хоча).

Оскільки всі адреси IPv4 представлені в IPv6, запитуючи netstatсписок програм, які використовують IPv6, ви також збираєтесь отримати IPv4.
Він може представляти 10.0.176.93як ::ffff:10.0.176.93, або навіть ::ffff:a00:b05d, але розробники додатків вирішили показати це як звичайну IPv4 адресу з пунктирною нотацією.


Дякую, але це не відповідає, чому вони не спливають, коли роблять регулярно-A inet
Mischa Arefiev

Я здогадуюсь, що причина підключення для прослуховування вказана лише як сокети tcp6 в тому, що вони справді є розетками IPv6, але з додатковою функцією, що вони також приймають з'єднання IPv4, якщо вони налаштовані так. Розетки прив’язані до INADDR_ANY6, і коли з'єднання IPv4 надходить у адресу, відображається на адресу IPv6 з префіксом :: ffff: 0000/96. Це єдине використання для цих відображених адрес; їх не слід використовувати на дроті.
Йохан Мірен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.