Як отримати IP-адресу IPv6 в Linux


35

У мене є сервер Linux, і я хочу знайти головну адресу IPv6 через один єдиний командний рядок.

Моя команда поки що:

$ ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d'

який показує:

2001:410:0:39:221:28ff:fe46:eef4
fe80::221:28ff:fe46:eef4

Але я хочу лише одного явища , щоб результат виводив:

2001:410:0:39:221:28ff:fe46:eef4

напишіть скрипт оболонки і помістіть туди ці команди: voila, тепер ви створили команду "єдиний".
акіра

4
При роботі з IPv6 насправді не рекомендується обмежуватись однією адресою. Тут може бути декілька глобальних адрес, декілька локальних адрес, декілька локальних адрес ...
grawity

Відповіді:


31
ip -6 addr

покаже ваші IPv6 адреси.


% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... ще greppable
Акіра

1
Це не вирішує заявлене питання. OP хоче, щоб єдиний командний рядок отримав один IPv6 (що, ймовірно, означає первинний загальнодоступний). Отже, ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'або ip -6 addr show dev eth0 | awk '/inet6/{print $2}'можна використовувати як базу, і ОП може поширювати / редагувати їх для конкретного випадку використання.
rwenz3l

6

/sbin/ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '{print $3}' | grep -v ^::1 | grep -v ^fe80

Вихід /sbin/ip -6 addr | grep inet6виглядає приблизно так:

inet6 ::1/128 scope host 
inet6 2001:123:456:55f::1/64 scope global 
inet6 fe80::62eb:69ff:fed2:d2a6/64 scope link 

awk -F '[ \t]+|/' '{print $3}'розбиває роздільники для кожного рядка на один або кілька пробілів або нахил вперед. Частина, яка нам потрібна, - це 3 долари.

grep -v ^::1 | grep -v ^fe80щоб виключити будь-який рядок, що починається з ::1або fe80.


є занадто багато трубопроводів grep в awk, це може бути зібрано в один awk `awk -F '[\ t] + | /' '$ 3 ==" :: 1 "{next;} $ 3 ~ / ^ fe80 :: / {наступний; } / inet6 / {print $ 3} ''
Архемар

3
$ /sbin/ifconfig | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link
      inet6 addr: fe80::211:22ff:fe33:4455/64 Scope:Link
      inet6 addr: ::1/128 Scope:Host

Якщо потрібно випадковий вибір однієї адреси IPv6

$ /sbin/ifconfig | grep inet6 | head -n 1
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Якщо ви хочете, щоб IPv6-адреса була найпоширенішою назвою першого адаптера Ethernet

$ /sbin/ifconfig eth0 | grep inet6
      inet6 addr: fe80::2ff:19ff:fe60:1a00/64 Scope:Link

Якщо ви просто хочете адресу

$ /sbin/ifconfig eth0 |  awk '/inet6/{print $3}'
fe80::2ff:19ff:fe60:1a00/64

2

Використовуйте таку команду, щоб переглянути вашу IP-адресу в Linux:

ifconfig

Зазвичай адреса Ipv6 виглядає так 2001:5c0:9168::/48. Якщо ви зіткнулися з будь-яким конфліктом вашої IP-адреси, виконайте наведені нижче дії, щоб знову встановити IP-адресу:

  1. Щоб призначити IPv6 IP-адреси, переконайтеся, що встановлені інструменти iproute2.
  2. Використовуючи їх, почнемо призначати ваші IP-адреси.
  3. Переконайтесь, що ipv6 модуль встановлений чи ні.

Потім скористайтеся наступною командою, щоб додати новий ip:

ip -f inet6 addr add 2001:5c0:9168::2/64 dev eth0

Потім додайте ip via за замовчуванням

ip -f inet6 ro add default via 2001:5c0:9168::1 dev eth0

Після завершення інсталяції просто переконфігуруйте / перезапустіть послуги з підтримкою IPv6, наприклад Apache, SSH тощо.


ifconfigзастаріла в Linux і більше не повинна використовуватися. Сучасні дистрибутиви Linux навіть не встановлюють його за замовчуванням (якщо цього не вимагає якийсь старовинний пакет).
Майкл Хемптон

1

За допомогою декількох невеликих налаштувань ваша початкова спроба спрацювала:

ip -o -6 addr show eth0 | sed -e 's/^.*inet6 \([^ ]\+\).*/\1/'

Велика зміна полягає в тому, що додавання -oпрапора викликає друк записів, по одному на рядок, що полегшує запуск sed над ними.


0

По-перше, вам потрібно пам’ятати, що з IPv6 будь-яка машина може мати кілька IPv6-адрес, і вони можуть бути в окремих мережах, і будь-яка з них може використовуватися, залежно від того, куди ви хочете дістатися.

Отже, перш ніж ви зможете відповісти на питання, яка ваша IP-адреса джерела, ви повинні вирішити, куди ви надсилаєте трафік. Тоді ви можете просто попросити Linux повідомити вам, яка IPv6 адреса буде джерелом, коли ви відправляєте трафік до цього пункту призначення.

Якщо ви надсилаєте його в "Інтернет", тоді просто виберіть глобальну IPv6-адресу навмання, наприклад, загальнодоступну DNS-адресу Google.

ip r get to 2001:4860:4860::8888 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
2001:db8:f387:c818:5:2:0:1000

Це запитує Linux про маршрут до цього пункту призначення. Perl аналізує шуканий результат, srcа потім друкує наступне поле.

Надавши інше місце призначення, ви можете отримати іншу адресу джерела:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.