raspberry piでLANケーブルを抜くとwifiが使えない

投稿者: Anonymous

初めまして。
USBのwifiアダプタを使って、raspberry piに無線LANでSSH接続しようと試みていますが、以下の事象で困っております。
何か思い当たることがおありでしたら、ご教示ください。

  • 事象
    無線LANと有線LANの両方が稼働しているraspberry piで、LANケーブルを抜く(刺さない)と無線LANも機能しない

  • 環境

    • raspberry pi model B+(電源はiPhone用ACアダプタから供給)
    • OS:raspbian 2014-09-09
    • カメラモジュール、I2C有効(ただしなにも接続せず)
    • wifiアダプタ:WLI-UC-GNM2/GW-USNano2
    • LANルータ(DHCP):WHR-G301N(WPA2-PSK/AES)
    • Mac book AirからSSHでログインして操作
  • 事象が発生する状況

    1. 有線LAN接続でSSHログイン
    2. lsusbでwifiアダプタは認識されており、ifconfigでもwlan0として認識
    3. /etc/network/interfaces, /etc/wpa_supplicant/wpa_supplicant.confを設定し、ifup
      →dncpでIPを取得でき、そのIPに対するSSHログインも成功(有線LAN側も使える)
    4. (3)状態で一旦shutdownしてLANケーブルを抜き、再起動する
      →ルータ管理画面上ではIPが振られていることが分かるが、そのIPに対するSSHログインはできない
    5. (3)状態でSSHをログアウト(起動したまま)し、LANケーブルを抜いても(4)と同様
    6. (4)or(5)状態でLANケーブルを挿し、wifiアダプタを抜くと(1)同様にログイン可能で、
         wifiアダプタを挿して(2)に戻るとwifiも使える

wifiアダプタを2種類書いていますが、上記事象はどちらでも発生します。
/etc/network/interfacesおよび/etc/wpa_supplicant/wpa_supplicant.confの記載内容については、
いろいろなサイト・ブログを参考にかなり試しましたが、状況は改善していません。
/etc/wpa_supplicant/wpa_supplicant.confを使わない設定でも同じでした。

VNC経由でGUIツールのwpa_guiを使うことも試みましたが、こちらではwlan0が認識されず、使えない状態です。
(chmod 4755でwpa_guiのパーミッションを変更すれば良いというブログ記事も拝見しましたが、それを行うとwpa_guiのウィンドウになにも表示されなくなりました)

という訳で、なぜかLANケーブルとセットでないとwifiが機能せず、困っております。
お知恵を拝借できると幸いです。

12/20追記
みなさんご回答とコメントありがとうございます。
上記3.の状態で、2つのIPに対してMacからpingを打ちwlan0,eth0それぞれでtcpdumpを取ったところ、wlan0の方ではecho requestも見えませんでした。(eth0には両方のIPについてecho request/replyが見えている)
キャプチャ結果でラズパイ側が”ホスト名.local”と表示されており、avahi-daemonが悪さをしているのでしょうか。。。

なお、上記3.の状態での/etc/network/interfacesとwpa_supplicant.confは下記です。

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="SSID"
  psk=パスキー(16進)
  auth_alg=OPEN
  scan_ssid=1
}

12/22追記
皆さん引き続きお付き合いありがとうございます。
Taichi Yanagiyaさんご指摘の/proc/net/arpの値(raspberry pi)は下記となっていました。IP..11.4がmac、..11.3はiPad(SSH端末アプリ)、..11.1はルーターです。

IP address       HW type     Flags       HW address            Mask     Device
192.168.11.1     0x1         0x2         00:24:a5:b7:2f:4f     *        wlan0
192.168.11.3     0x1         0x2         70:11:24:4b:1e:dd     *        wlan0
192.168.11.4     0x1         0x0         00:00:00:00:00:00     *        wlan0
192.168.11.3     0x1         0x2         70:11:24:4b:1e:dd     *        eth0
192.168.11.4     0x1         0x2         48:d7:05:b7:6b:ed     *        Ethan

12/23追記(解決)
皆様ご回答とコメントありがとうございます。
Yanagiyaさんご指摘の方法とは少し違いますが、クライアント側で「arp -d」コマンドで問題のIPのキャッシュを削除し、クライアントを再起動したところ問題が解消しました。
(なんとなくやっていたら治ってしまい、記録を取っていなくてすみません)

12/22追記ではYanagiyaさんのご指摘を勘違いしておりました。上記Ras-PiのARPテーブルは関係ありませんでした。
ARP以外にも、今まで深く考えていなかった点についてご助言をいただき、誠にありがとうございました。

解決

wlan0、有線LAN I/F (仮に eth0)が同じネットワークセグメントにあるのではないでしょうか。

一般的な Linux のルーティングは、宛先によって outbound の I/F が決まります。
宛先(ネットワークアドレスやデフォルト)に対し、wlan0, eht0 の 2つのルーティングが設定(ip route show コマンドや route コマンドで確認)されていても eth0 が先になっていれば、eth0 からしか出ていきません。

もし、そうならば、以下のような経路になります。

  • 行き: SSHクライアント → wlan0 → sshd
  • 戻り: sshd → (ルーティングテーブル参照) eth0 → SSHクライアント

有線LAN のケーブルを抜いても I/F の設定は残っていればルーティングテーブルも残ります。

wlan0 に届いたパケットの戻りを wlan0 から出したい場合は、ソースルーティング(ソースポリシールーティング)を設定する必要があります。

(設定例)

eth0  の IPアドレス: 192.168.0.10/24
wlan0 の IPアドレス: 192.168.0.20/24

ip rule add from 192.168.0.10 table 1
ip rule add from 192.168.0.20 table 2
ip route add 192.168.0.0/24 dev eth0 src 192.168.0.10 table 1
ip route add default via 192.168.0.1 dev eth0 table 1
ip route add 192.168.0.0/24 dev wlan0 src 192.168.0.20 table 2
ip route add default via 192.168.0.1 dev wlan0 table 2

設定の意味は、”ip rule” “ソースルーティング” などで検索してください。

他、ARP 関係の問題もあるかもしれません。
キーワード: rp_filter, arp_announce, arp_ignore

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *