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

その他の関連情報:

  • これはUbuntu 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ネームスペースに対してローカルであるため、2つのネットワークネームスペース間で直接比較することはできません(参照:前のリンク)。

だから誰も見つかりませんでした。索引もちろん、これは別の名前空間にあるという意味です。これは財産の存在として証明されています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 を持つインターフェイスを確実に見つけることができます。 (見えないネットワークネームスペースが介入しない限り)

おすすめ記事