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


17

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明らかにここには準拠していません。ifconfigこれらのインターフェースのうち2つのインターフェースの出力を見てみましょう。

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

txqueuelen非ゼロの詳細のあいまいさeth0は別として、唯一の顕著な違いはeth0Interruptエントリがあることです。これは、私が知る限り、ハードウェア機能です。では、Interruptエントリを探すことで、ネットワークインターフェイスに物理的であるかどうかを伝える方法はifconfig何ですか?または、より良い方法がありますか?ネットワークデバイスが物理か仮想かを調べるためのシンプルで簡単な方法は?

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

更新

derobertの回答への回答として、以下から派生した情報を示し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

[このリストへの補遺:wlan0と同様に表示されていましたwlan0 -> ../../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 '…'

すでに自分の質問に答えています(IRQ、txqueueなどのハードウェア固有の項目を探してください)。私に生じる質問は-なぜあなたはあなたのユースケースでそれを区別する必要があるのですか?
Nils

@ Nils、OpenWrtをフラッシュした後、ルーターデバイスのネットワーク構成を明確に把握できません。私はそれを徹底的に混乱させます。プロジェクトドキュメントとフォーラムは、いくつかのヘルプを提供しましたが、十分ではなく、基本的な質問には回答していません。これらの質問の1つは、ここで提起された質問です。現在、ルーターには2つのNICがあると確信しているのに、1つのNICしかありません。詳細を明確にすると、混乱が減ります。それが理由です。
ルミ

ここにそのルーターの小さな写真または写真/ドキュメントへのリンクを配置できますか?...本当のMACを隠す接着/ブリッジ/ NATtingのようなものがあるかもしれません
ニルス

あなたは使用して、あなたが必要なもの、より良い詳細を見ることができる、とすべきであるlshw -class network
ネイサンV

@Nils、ここに行きます:wiki.openwrt.org/toh/tp-link/tl-wr941nd-@Nathan、たった4 MBのフラッシュで、ボックスはかなり制限さlshwれており、パッケージリストにありません。知識豊富で意欲的な人はtmpfs、開発ツールをにインストールすることに成功するかもしれませんが、それだけの価値はありますか?標準的なPCを使用して、Linuxネットワーキングの理解を深めていきます。これは簡単になります。私はこのルーター構成を正しく理解していませんが、うまく機能します。ご協力いただきありがとうございます。
ルミ

回答:


19

以下を確認できます/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に表示されます。別名(lan:0など)はそうではないことに注意してください(そのため、どちらが別名であるかがわかります)。また、実際のハードウェア(lan)とそうでないハードウェア(br0、lo、tun0)を明確に確認できます。

明確にするために

仮想のものはすべて仮想であるため、上記でどちらが本物かを知ることができます。lanはPCIバス上にあります。

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

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


ありがとう。同様の出力を質問に追加しました。ここに表示されている出力ほど明確ではありませんが、PCIバスなどが表示されています。出力は実際には理解していませんが、ハードウェア識別子のように見えることに同意します。上記の投稿の出力の場合ag71xx、ドライバーのように見えるので、それがハードウェアであると思わせるのはその存在です。
ルミ

@Lumiは編集して回答しようとしました。
derobert

これはおそらく私の回答よりも実用的です。
ブライアンエイジ

ありがとう。wlan0リスト/sys/class/netをコピーしたときに有効にされていたデバイスリストにメモが表示されていました。:)私は今それを上に追加しました。デバイスの数については同意しません。LANとWLANの2つしかないと思います。しかし、それは些細な点です...良い答え、受け入れられました、ありがとう!
ルミ

@Lumiはbrctrl delif br-lan lan1(または同様の)ブリッジからポートをドロップするために使用します。その場合、それは別のポート(LANスイッチの一部ではない)として機能すると思われます。
derobert

5

インターフェイスのMACアドレスがスプーフィングされていないと仮定すると、ethtoolを使用してみることができます。

ethtool -P {Network interface name}

固定アドレス: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

2

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

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

結合(リンク集約)は個々のデバイスのMACをオーバーライドし、ブリッジは同じものを使用するため、MACアドレスだけで判断することはできません。そのため、HA仮想ホストとルーターの一般的な構成である2つのデバイスがボンディングおよびブリッジされている場合、同じ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で使用されるエイリアスは上記のものではありませんが、概念は保持されます。これらは標準的な方法であるため、これらを使用しました。


これは、他の方法で作成されたインターフェイスを考慮せず、「標準」の/etc方法を回避しました。たとえば、NetworkManagerによって作成されたインターフェイスはそこに記載されていません。
gertvdijk

@gertvdijkそれは本当です、openwrtはNetworkManagerをその4MBにパックしないので、すべてのインターフェースが設定内にあるべきです。
ブライアンエイジ

-2

の値/sys/class/net/<interface>/typeが1(ARPHRD_ETHER)であるかどうかを確認するだけで、デバイスが物理的なものかどうかを理解するのに十分だと思います。

http://lxr.linux.no/linux+v3.0/include/linux/if_arp.h#L30

例えば。ベース名$(dirname grep -l ^1$ /sys/class/net/*/type


多くのインターフェイス(eth、ワイヤレス、ブリッジ、vlanがブリッジからぶら下がっている-いいえ)に1が表示されています
41分
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.