私は、ルーター用の組み込みLinuxであるOpenWrtを実行する小さなホームルーターを持っています。 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
ここではこれに従わないようです。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
唯一の重要な違いは項目eth0
があることですInterrupt
。私が理解できるのはハードウェア機能です。もしそうなら、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
それが何であるかよくわかりません。
そしてBryan Ageeの答えに対する答えは次のとおりです。
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 '…'
答え1
あなたは確認することができます/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ポートがすべてスイッチとして機能するように設定されたブリッジです(スイッチを分割できます)。
答え2
インターフェイス MAC アドレスが次のように仮定します。いいえ不正行為、以下を試すことができます。イーサネットツール:
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
答え3
/システム/クラス/ネットワーク
このディレクトリの各エントリは、ディレクトリにアクセスするプロセスのネットワーク名前空間に表示される物理または仮想ネットワークデバイスの1つを表すシンボリックリンクです。これらの各シンボリックリンクは、/sys/devicesディレクトリのエントリを参照します。
したがって、私たちがしなければならないのは、sysfsファイルシステムのネットワークインターフェイスに接続されている物理デバイスがあることを確認することです。/sys/class/net/eth0/device
インターフェイス名がわかっている場合は、簡単なスクリプトを使用できます。
#!/bin/bash
iface=eth0
if test -e /sys/class/net/${iface}/device; then
echo $iface
fi
すべての物理デバイスのインターフェイス名を印刷するには、次の手順を実行します。
#!/bin/bash
while IFS='\n' read p1 line ;do
iface=$(echo "$p1" | sed -n 's/[0-9]: \(.*\):.*/\1/p')
if test -n $iface && ip addr show dev $iface >/dev/null 2>&1; then
if test -e /sys/class/net/${iface}/device; then
echo $iface
fi
fi
done < <(ip address)
トリックを実行する1行の内容は次のとおりです。
echo $(cd /sys/class/net; dirname */device)
forループなどに使用するのに適しています。たとえば、次のようになります。
for interface in $(cd /sys/class/net; dirname */device); do
echo $interface
# Do whatever else you may need to do with $interface
done
答え4
仮想缶(vcan)デバイスのリストを取得する方法を理解しようとしており、次の結論に達しました。
ip -details -oneline link | grep vcan
これにより、仮想缶デバイスのみが一覧表示されます。
vcanデバイス名のリストを取得するには、次のことが機能します。
ip -details -oneline link | grep vcan | awk -F': ' '{print $2}'