Cómo obtener la dirección IP IPv6 en Linux

35

Tengo un servidor Linux y quiero encontrar la dirección IPv6 principal a través de una sola línea de comando.

Mi comando hasta ahora:

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

que muestra:

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

Pero solo quiero una ocurrencia , para que la salida lea:

2001:410:0:39:221:28ff:fe46:eef4
Ankit Goyal
fuente
escriba un script de shell y ponga esos comandos allí: voila, ahora ha creado un comando "único".
akira
44
Cuando se trata con IPv6, no se recomienda limitar a una sola dirección. Puede haber múltiples direcciones globales, múltiples direcciones locales de enlace, múltiples direcciones locales de sitio ...
Grawity

Respuestas:

31
ip -6 addr

mostrará sus direcciones IPv6.

Jim G.
fuente
% ip -6 addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever... todavía greppable
akira
1
Esto no resuelve la pregunta planteada. OP quiere una sola línea de comando para recuperar un IPv6 (lo que probablemente significa el público principal). Entonces, ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'o ip -6 addr show dev eth0 | awk '/inet6/{print $2}'podría usarse como base y OP puede extenderlos / editarlos para su caso de uso específico.
rwenz3l
6

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

La salida de se /sbin/ip -6 addr | grep inet6parece a esto:

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}'divide cada delimitador de configuración de línea en uno o más espacios en blanco o una barra diagonal. La parte que necesitamos son los $ 3.

grep -v ^::1 | grep -v ^fe80para excluir cualquier línea que comience con ::1o fe80.

Qian Chen
fuente
hay demasiada tubería de grep en awk, esto podría combinarse en un solo awk `awk -F '[\ t] + | /' '$ 3 ==" :: 1 "{next;} $ 3 ~ / ^ fe80 ::/ { siguiente ; } / inet6 / {print $ 3} ''
Archemar
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

Si desea una selección aleatoria de una dirección IPv6

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

Si desea la dirección IPv6 del nombre más común para el primer adaptador Ethernet

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

Si solo quieres la dirección

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

Use el siguiente comando para ver su dirección IP en Linux:

ifconfig

Normalmente, la dirección IPv6 se ve así 2001:5c0:9168::/48. Si enfrenta algún conflicto en su IP, siga los pasos a continuación para configurar una dirección IP nuevamente:

  1. Para asignar IPs IPv6, asegúrese de tener instaladas las herramientas iproute2.
  2. Utilizándolos, comencemos a asignar sus IP.
  3. Asegúrese de que el módulo ipv6 esté instalado o no.

Luego, use el siguiente comando para agregar una nueva ip:

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

Luego, agregue la ip predeterminada a través de

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

Después de completar su instalación, simplemente reconfigure / reinicie sus servicios habilitados para IPv6, como Apache, SSH, etc.

user1908924
fuente
ifconfigestá obsoleto en Linux y ya no debe usarse. Las distribuciones modernas de Linux ya ni siquiera lo instalan por defecto (a menos que algún paquete antiguo lo requiera).
Michael Hampton
1

Con algunos pequeños ajustes, su intento original hubiera funcionado:

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

El gran cambio allí es la adición de la -obandera que hace que las entradas se impriman, una por línea, lo que hace que sea más fácil pasarlas por encima.

Keith Gaughan
fuente
0

Primero, debe recordar que con IPv6 cualquier máquina puede tener varias direcciones IPv6, y pueden estar en redes separadas, y cualquiera de ellas podría usarse, dependiendo de dónde desee llegar.

Entonces, antes de que pueda responder la pregunta de cuál es su dirección IP de origen, debe decidir dónde está enviando el tráfico. Luego, puede pedirle a Linux que le diga qué dirección IPv6 será la fuente cuando envíe tráfico a ese destino.

Si lo envía a "Internet", simplemente elija una dirección IPv6 global al azar, por ejemplo, la dirección DNS pública de Google.

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

Esto le pide a Linux la ruta a ese destino. Perl analiza el resultado buscando srcy luego imprime el siguiente campo.

Al proporcionar un destino diferente, puede recibir una dirección de origen diferente:

ip r get to ::1 | perl -ne '/src ([\w:]+)/ && print "$1\n"'
::1
Michael Hampton
fuente
0
ip addr show dev eth0 | sed -e's/^.*inet6 \(2001[^ ]*\)\/64 scope global dynamic.*$/\1/;t;d'
Werner Neumann
fuente