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


初めまして。 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アダプタを２種類書いていますが、上記事象はどちらでも発生します。
`/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は下記です。

[code]

    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
    
[/code]

  

[code]

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

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

[code]

    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
    
[/code]

  
**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 から出したい場合は、ソースルーティング(ソースポリシールーティング)を設定する必要があります。

(設定例)

[code]

    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
    
[/code]

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

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




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 から出したい場合は、ソースルーティング(ソースポリシールーティング)を設定する必要があります。

(設定例)

[code]

    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
    
[/code]

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

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

