Ubuntu의 "ip address" 명령 출력에서 ​​인터페이스 이름의 "if1@if2"는 무엇을 의미합니까?

Ubuntu의 "ip address" 명령 출력에서 ​​인터페이스 이름의 "if1@if2"는 무엇을 의미합니까?

다음 출력의 인터페이스 이름 "eth0@if44"와 같이 Ubuntu에서 "ip address" 명령(또는 "ip link" 명령) 출력의 인터페이스 이름에서 at 기호(@)는 무엇을 의미합니까?

root@aafa1fc24a0b:/# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
43: eth0@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0
       valid_lft forever preferred_lft forever

기타 관련 정보:

  • 이것은 우분투 16.04에 있습니다
  • 도커 컨테이너 내부에서 실행
  • 사용자 정의 브리지에 연결된 컨테이너
  • 문제의 인터페이스(eth0@if44)는 VLAN이 아닙니다.

설정은 다음과 같이 생성됩니다.

docker network create my-bridge
docker run --name my-container-1 --network my-bridge --detach --tty ubuntu:16.04 sleep infinity
docker run --name my-container-2 --network my-bridge --detach --tty ubuntu:16.04 sleep infinity

답변1

이는 링크의 피어 인터페이스 인덱스를 나타냅니다. 이 속성은 모든 인터페이스에 적용되는 것처럼 보이지만 다른 인터페이스와의 관계로 인해 veth, macvlan, vlan(하위 인터페이스) 등 몇 가지 인터페이스 유형에만 의미가 있습니다.

모든 특정 인터페이스에는 읽을 수 있는 인덱스가 있습니다. 예:

/sys/class/net/<interface>/ifindex

피어 링크 인터페이스는 다음 위치에서 읽을 수 있습니다.

/sys/class/net/<interface>/iflink

분명히 말이 안 되는 경우에는 매개변수가 여전히 존재하지만색인. 이는 일반적으로 일반 또는 간단한 인터페이스(실제 하드웨어 eth0, wlan0, dummy0,...)의 경우입니다.

ip link명령은 설명일 뿐입니다.링크값:

  • 만약에링크0(분명히 ipip 터널의 경우, 네트워크 네임스페이스에서도 이상하게 작동함)이면 인쇄됩니다.@NONE
  • 만약에링크일치하지 않음색인, 디스플레이 @ifXX로 표시됩니다XX색인. 일치하지 않음색인다른 네트워크 네임스페이스와 관련되어 있다는 것을 아는 것만으로도 충분합니다. 나중에 참조하세요.
  • 만약에링크그 자체는 (링크==색인) 아무 것도 표시되지 않습니다 @. 이는 실제 인터페이스(eth0...)에서 발생해야 하지만 버그일 수도 있습니다(아래 참조).
  • 만약에링크일치하는 항목이 있습니다.색인, 인덱스 이름이 표시됩니다.

일치하는 항목을 찾을 수 없는 경우는 언제입니까?색인? 인터페이스가 다음 위치에 있을 때기타 네트워크 네임스페이스. link-netnsid결과가 맨 마지막에 추가되기 때문입니다 . 이 값은 외부에서 쉽게 사용할 수 없습니다 ip link(이 Q&A 참조:veth 피어 ifindex의 네트워크 네임스페이스를 찾는 방법은 무엇입니까?). 그것은 나타낸다현지 유통피어 네트워크 네임스페이스에 해당하는 nsid입니다. 컨테이너의 경우 첫 번째(그리고 아마도 유일한) 값 0은 거의 항상 호스트의 네트워크 네임스페이스를 나타냅니다. 호스트의 경우 각 컨테이너는 link-netnsid 값을 가질 수 있으며 첫 번째 컨테이너의 link-netnsid는 0입니다. 이 값은 절대 ID가 아닌 net 네임스페이스에 대해 로컬이므로 두 네트워크 네임스페이스 간에 직접 비교할 수 없습니다(참조:이전 링크).

그래서 아무도 발견되지 않았어색인물론 이는 다른 네임스페이스에 있다는 의미입니다. 이는 재산의 존재로 입증됩니다 link-netnsid.

때때로,링크, 이는 인덱스 값입니다.동료인터페이스는 다른 네트워크 네임스페이스에 있을 때 로컬 인터페이스(현재 네트워크 네임스페이스)와 동일한 ID를 갖습니다. 이 경우에는 ip link아무 것도 표시되지 않습니다 @. 논리는 공개 인터페이스라는 것이지만 이 경우에는 잘못된 것입니다.

# ip -o link show dev veth1
3: veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000\    link/ether 7e:d9:ca:77:87:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
# cat /sys/class/net/veth1/{ifindex,iflink}
3
3

(링크가 있다는 것은 link-netnsid 0링크가 다른 네트워크 네임스페이스에 있다는 것을 의미합니다.)

다른 경우에는(제가 재현하지 못했기 때문에 수정되었을 수도 있음) 다른 네트워크 네임스페이스 인덱스를 사용하여 로컬 인터페이스 이름을 표시할 수도 있습니다.

예를 들어, (컨테이너가 아닌) 호스트에서 실행 중인 경우: ip -o link |grep ^44:. 피어의 veth 링크인 인덱스 44가 있는 인터페이스를 확실히 찾을 수 있습니다. (보이지 않는 네트워크 네임스페이스가 개입하지 않는 한)

관련 정보