Linux에서 IPv6 IP 주소를 얻는 방법


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, 이제 "단일"명령을 작성했습니다.
akira

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
akira

1
이것은 언급 된 질문을 해결하지 못합니다. OP는 단일 명령 행이 하나의 IPv6 (아마도 1 차 공용을 의미 함)을 검색하기를 원합니다. 따라서 ip -6 addr show dev eth0 | sed -n 's|^.*inet6 \([^ ]*/64\).*$|\1|p'또는 ip -6 addr show dev eth0 | awk '/inet6/{print $2}'기본으로 사용할 수 있으며 OP는 특정 사용 사례에 맞게 확장 / 편집 할 수 있습니다.
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.


awk에 grep을 너무 많이 파이핑하는 방법이 있습니다. 이것은 awk-a '-\'[\ t] + | / ''$ 3 == ":: 1"{next;} $ 3 ~ / ^ fe80으로 축소 될 수 있습니다. :: / {다음; } / 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

하나의 IPv6 주소를 임의로 선택하려면

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

첫 번째 이더넷 어댑터에 가장 일반적인 이름의 IPv6 주소를 원하는 경우

$ /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

Linux에서 IP 주소를 보려면 다음 명령을 사용하십시오.

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를 추가

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

설치를 완료 한 후 Apache, SSH 등과 같은 IPv6 지원 서비스를 재구성 / 다시 시작하면됩니다.


ifconfigLinux에서는 더 이상 사용되지 않으며 더 이상 사용해서는 안됩니다. 현대 리눅스 배포판은 더 이상 기본적으로 설치하지 않습니다 (일부 고대 패키지가 필요하지 않는 한).
Michael Hampton

1

몇 가지 작은 조정만으로 원래 시도가 효과가 있었을 것입니다.

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

큰 변화는 -o플래그를 추가 하여 항목을 한 줄에 하나씩 인쇄하여 sed를보다 쉽게 ​​실행할 수 있도록하는 것입니다.


0

첫째, IPv6을 사용하면 모든 컴퓨터에 여러 개의 IPv6 주소가있을 수 있으며 별도의 네트워크에있을 수 있으며 도달하려는 위치에 따라 모든 컴퓨터가 사용될 수 있습니다.

따라서 소스 IP 주소가 무엇인지에 대한 질문에 대답하기 전에 트래픽을 보낼 위치를 결정해야합니다. 그런 다음 Linux에 요청하여 해당 대상으로 트래픽을 보낼 때 어떤 IPv6 주소가 소스가되는지 알려줄 수 있습니다.

"인터넷"으로 보내는 경우 Google의 퍼블릭 DNS 주소와 같은 글로벌 IPv6 주소를 임의로 선택하십시오.

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

이것은 리눅스에게 그 목적지로가는 길을 묻습니다. Perl은 찾은 결과를 구문 분석 한 src후 다음 필드를 인쇄합니다.

다른 목적지를 제공하면 다른 소스 주소를받을 수 있습니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.