web-dev-qa-db-ja.com

ネットワークインターフェイスが物理(デバイス)か仮想(エイリアス)かを確認するにはどうすればよいですか?

OpenWrt(ルーター用の組み込みLinuxの一種)を実行している小さなホームルーターがあります。 5つのイーサネットポートがあり、1つはWANとラベルが付けられ、4つはLAN 1〜4とラベルが付けられています。ifconfigに従って定義された次のネットワークインターフェイスがあります。

root@TIBERIUS: ~ > ifconfig | grep Link
br-lan    Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan1      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan2      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan3      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lan4      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
lo        Link encap:Local Loopback
pppoe-wan Link encap:Point-to-Point Protocol
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
wlan0     Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0

ご覧のとおり、かなりの数のデバイスがありますが、MACアドレスは1つだけです。

これらのデバイスの一部が仮想デバイスであることを理解しています。 lopppoe-wanは脇に置いておきましょう。これはループバックデバイスであり、私のPPPoE接続です。しかし、残りの部分については、どうすれば物理的なものか仮想的なものか?eth0.1のような仮想インターフェースにラベルを付けるための命名規則があることは理解していますが、これは明らかにここでは守られていません。これらのインターフェースのうちの2つのifconfigの出力を見てみましょう:

root@TIBERIUS: ~ > ifconfig wan
wan       Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15007 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12055 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:13341276 (12.7 MiB)  TX bytes:1831757 (1.7 MiB)

root@TIBERIUS: ~ > ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:23:CD:20:C3:B0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25799 errors:0 dropped:0 overruns:23 frame:0
          TX packets:25294 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15481996 (14.7 MiB)  TX bytes:15160380 (14.4 MiB)
          Interrupt:4

eth0にゼロ以外のtxqueuelenのあいまいな詳細は別として、eth0にはInterruptエントリがあり、知っているのはハードウェア機能です。 Interruptifconfigエントリを探すことで、ネットワークインターフェースが物理的であるかどうかをどのように判断するのでしょうか。それとももっと良い方法がありますか?ネットワークデバイスが物理デバイスであるか仮想デバイスであるかを確認するシンプルで簡単な方法は?

関連する質問 があることに注意してください。ただし、回答は受け入れられていますが、決定的なものではありません。

更新

デロバートの答えに応えて、以下はls -l /sys/class/netから派生した情報です。

br-lan      -> ../../devices/virtual/net/br-lan
eth0        -> ../../devices/platform/ag71xx.0/net/eth0
lan1        -> ../../devices/platform/dsa.0/net/lan1
lan2        -> ../../devices/platform/dsa.0/net/lan2
lan3        -> ../../devices/platform/dsa.0/net/lan3
lan4        -> ../../devices/platform/dsa.0/net/lan4
lo          -> ../../devices/virtual/net/lo
pppoe-wan   -> ../../devices/virtual/net/pppoe-wan
wan         -> ../../devices/platform/dsa.0/net/wan

[このリストへの追記:wlan0wlan0 -> ../../devices/platform/ath9k/net/wlan0と同様に表示されますが、上記のリストをコピーすると、WLANが無効になっていたため、表示されませんでした。]

eth0が唯一のデバイスだと思います。 dsa.0が明確でない。

そして、ブライアン・エイジの答えに答えて:

root@TIBERIUS: ~ > cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'eth'
        option ifname 'eth0'
        option proto 'none'

config interface 'lan'
        option ifname 'lan1 lan2 lan3 lan4'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.33.1'
        option netmask '255.255.255.0'

config interface 'wan'
        option ifname 'wan'
        option proto 'pppoe'
        option username '…'
        option password '…'
18
Lumi

確認してもいい /sys

anthony@Zia:/sys/class/net$ ls -l /sys/class/net/
total 0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 br0 -> ../../devices/virtual/net/br0
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lan -> ../../devices/pci0000:00/0000:00:1e.0/0000:07:01.0/net/lan
lrwxrwxrwx 1 root root 0 Dec 11 15:38 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Dec 11 15:38 tun0 -> ../../devices/virtual/net/tun0

したがって、実際のデバイスは/ sys/class/netに表示されます。 aliases(lan:0のように)はそうしないことに注意してください(つまり、どれがエイリアスであるかがわかります)。そして、実際のハードウェア(lan)とそうでないハードウェア(br0、lo、tun0)が明確にわかります。

明確にするために

バーチャルのものはすべてバーチャルにあるので、あなたは上記のどれが本物であるかを知ることができます。そして、lanはPCIバス上にあります。

あなたのケースでは、eth0、wan、lan1–4の6つがあります。合計で5つのポートしかないと言うので、これはかなり奇妙です。 eth0は実際にはスイッチのようなチップにハードワイヤードされており、他の5つのポートはそのスイッチ上のポートだと思います。/sys…には表示されていませんが、wlan0もおそらく本物(ワイヤレスアダプター)です。

したがって、すべての実用的な目的で、実際のポートはwan、lan1–4、およびwlan0であると言います。 br-lanは、4つのLANポートすべてをスイッチとして機能させるように設定されたブリッジです(そのため、そのスイッチを分割できる場合があります)。

21
derobert

インターフェースのMACアドレスがではなく spoofedであるとすると、- ethtool

ethtool -P {Network interface name}

Permanent address:00:00:00:00:00:00」は、それが仮想ネットワークインターフェースであることを示します。

次のbashループは、すべてのネットワークインターフェイスのMACアドレスを表示します。

for i in $(ip -o link show | awk -F': ' '{print $2}'); \
do mac=$(ethtool -P $i) \
&& printf '%-10s %-10s\n' "$i" "$mac"; \
done

lo         Permanent address: 00:00:00:00:00:00
enp5s0f0   Permanent address: 44:1e:a1:73:39:c8
enp4s0f0   Permanent address: 00:9c:02:b0:ef:20
enp5s0f1   Permanent address: 44:1e:a1:73:39:c9
enp4s0f1   Permanent address: 00:9c:02:b0:ef:24
virbr1     Permanent address: 00:00:00:00:00:00
virbr1-nic Permanent address: 00:00:00:00:00:00
virbr0     Permanent address: 00:00:00:00:00:00
virbr0-nic Permanent address: 00:00:00:00:00:00
vnet0      Permanent address: 00:00:00:00:00:00
vnet1      Permanent address: 00:00:00:00:00:00
6
Noam Manos

まず、/etc/network/config;ほとんどのディストリビューションには、ネットワークデバイスを定義および構成するための同様のファイルがあります。 debian/Ubuntuでは、/ etc/network/interfacesです。その内容を投稿する場合、エイリアス、ボンド、ブリッジのエントリを特定できます。残りは物理デバイスです。

ifconfigの出力を見ると、割り込み(IRQ)があるデバイスが(前述のように)わかります。また、多くのメモリにはメモリが割り当てられていますが、仮想インターフェイスには割り当てられていません。

ボンド( リンクアグリゲーション )は個々のデバイスのMACをオーバーライドし、 ブリッジ は同じものを使用するため、Macアドレスだけで判断することはできません。したがって、2つのデバイスが結合およびブリッジされている場合(HA仮想ホストとルーターの一般的な構成)、同じMACを持つ4つのデバイスが存在します。

eth0  - physical device 1
eth1  - physical device 2
bond0 - the virtual device that uses either or both of the above
br0   - the bridge that uses bond0 and allows sharing/forwarding across bond0

明らかにopenwrtで使用されるエイリアスは上記のものではありませんが、コンセプトは保持されます。これらは標準的な方法であるため、使用しました。

3
Bryan Agee