Wi-Fi とイーサネットの両方を同じネットワークに接続することは可能ですか?

Wi-Fi とイーサネットの両方を同じネットワークに接続することは可能ですか?

私は Arch Linux (Raspberry Pi 3 上) を実行しており、イーサネットと Wi-Fi の両方を同じネットワークに接続しようとしました。route次のメッセージが表示されます。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    1024   0        0 eth0
default         gateway         0.0.0.0         UG    1024   0        0 wlan0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
gateway         0.0.0.0         255.255.255.255 UH    1024   0        0 eth0
gateway         0.0.0.0         255.255.255.255 UH    1024   0        0 wlan0

ip addr次のように表示されます。

$ ip addr
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
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b8:27:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.103/24 brd 192.168.1.255 scope global dynamic eth0
       valid_lft 85717sec preferred_lft 85717sec
    inet6 fe80::ba27:ebff:fee4:4f60/64 scope link
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b8:27:YY:YY:YY:YY brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic wlan0
       valid_lft 85727sec preferred_lft 85727sec
    inet6 fe80::ba27:ebff:feb1:1a35/64 scope link
       valid_lft forever preferred_lft forever

wlan0およびインターフェースの両方がeth0ルータから IP アドレスを取得できました。

しかし、これらのインターフェースのうち機能するのは 1 つだけであることがわかりました。もう 1 つのインターフェースは ping できず、接続できません。通常は Ethernet が機能しますが、Wi-Fi が機能する場合もあります。

何が起こっているのでしょうか? これを機能させるにはどうすればよいのでしょうか?

答え1

ご存知のとおり、ルーティングの観点からは、同じネットワークのアドレスを異なるインターフェースに配置することは可能ではあるものの、理想的ではありません。

ルーティングではインターフェースごとに異なるネットワークが想定されており、ネットワークが重複するため、最終的にはルーティングでそのうちの 1 つが他よりも優先されます。

複数のインターフェースを同じネットワークに接続する場合に推奨される解決策は、それらをブリッジ インターフェースに集約することです。

ブリッジ インターフェイスは IP アドレスを「所有」し、実際のインターフェイスは の下で仮想的な単一のエンティティとしてグループ化されますbr0

allow-hotplug eth0
iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
    bridge_ports eth0 wlan0
    

Debian Linux: ネットワーク インターフェイスをブリッジ/ネットワーク スイッチとして設定する

答え2

これは完全な解決策というよりは、補足です。[コメントするには「評判ポイント」が足りないため]

まず、両方のインターフェースを独立して動作させる必要があります。次に、ブリッジングの代わりに、両方のインターフェース間で送信接続の負荷を分散することもできます。

https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html

私は、ネットワーク マネージャーによってインターネットへのデフォルト ルートが構成された 2 つのデバイスから始めました。

❯ ip route
default via 192.168.0.1 dev eno1 proto dhcp metric 100 
default via 192.168.0.1 dev wlp4s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp4s0 scope link metric 1000 
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.246 metric 100 
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.213 metric 600 

次に、負荷分散の項で説明されているコマンドを使用しました。

https://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html

❯ P1=192.168.0.1
❯ P2=192.168.0.1
❯ IF1=eno1
❯ IF2=wlp4s0
❯ ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \     
            nexthop via $P2 dev $IF2 weight 1

やった!両方のデバイスで接続できました。

❯ ip route                                                                  
default 
    nexthop via 192.168.0.1 dev eno1 weight 1 
    nexthop via 192.168.0.1 dev wlp4s0 weight 1 
default via 192.168.0.1 dev eno1 proto dhcp metric 100 
default via 192.168.0.1 dev wlp4s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp4s0 scope link metric 1000 
192.168.0.0/24 dev eno1 proto kernel scope link src 192.168.0.246 metric 100 
192.168.0.0/24 dev wlp4s0 proto kernel scope link src 192.168.0.213 metric 600 

接続に問題がある場合はデバッグが難しくなる可能性があります ;)

また、特にネットワーク マネージャーと組み合わせた場合、再起動後も構成を維持する方法がまだわかりません。

関連情報