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つだけです。
これらのデバイスの一部が仮想デバイスであることを理解しています。 lo
とpppoe-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
エントリがあり、知っているのはハードウェア機能です。 Interrupt
のifconfig
エントリを探すことで、ネットワークインターフェースが物理的であるかどうかをどのように判断するのでしょうか。それとももっと良い方法がありますか?ネットワークデバイスが物理デバイスであるか仮想デバイスであるかを確認するシンプルで簡単な方法は?
関連する質問 があることに注意してください。ただし、回答は受け入れられていますが、決定的なものではありません。
更新
デロバートの答えに応えて、以下は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 '…'
確認してもいい /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ポートすべてをスイッチとして機能させるように設定されたブリッジです(そのため、そのスイッチを分割できる場合があります)。
インターフェースの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
まず、/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で使用されるエイリアスは上記のものではありませんが、コンセプトは保持されます。これらは標準的な方法であるため、使用しました。