日々様々なトラブルにハマっている、困ったシステム管理者の奮闘日記です。

有線と無線LAN2枚差しに翻弄される!?

とある理由でもらい受けた古いノートPCにLinuxを入れて、自宅のちょっとしてサーバにすることにした。

ノートPCに有線LANポートは既に備わっている。
手元にはBUFFARLOの「WLI-UC-GNM2」というUSBで接続できる無線LANアダプターがある。

じゃあ、ってことで、ノートPCにこの無線LANアダプターを使って、NICの2枚差しをやってみることにした。

Linuxは使い慣れた「CentOS6」を使用。
2つのLANには別々のIPアドレスをふってみる。
将来的には有線LANと無線LANでbonding(チーミング、ともいうか)設定にして耐障害性を上げるつもり。

設定は簡単にできたんだけれど、一部「おやっ?」という動きをしていたことで、またまた毎度のことながらハマった。
その顛末を忘れないように、また同じことでハマる人が出てきた時の助けとなればいいな、と願い以下に書いておくことにする。

 

現象(というか気になった点)

  1. wpa_supplicantを導入する前の、無線LANの諸設定(SSIDやらKEYやら)をしない状態でも、無線LAN側にIPアドレスをふってやれば、他のPCから無線LAN側のIPアドレスへpingが飛び応答が返ってくる。
    _
  2. 別のPCからこのノートPCの有線LAN側、および無線LAN側にpingを打つと両方返ってくるが、pingを打ったPCには有線,無線両方とも同じMACアドレス(有線LANのMACアドレス)がarpテーブルに記録される。
    _
  3. 有線LANのケーブルを抜くと、無線LAN側へのpingも返ってこなくなる。
    2.の現象のためにこうなるのは予想はつく。
    _
  4. 上記2, 3 の現象は、無線LAN側の設定をちゃんとした後も同じく発生する。
    _

 

結論

ルートルールの設定をしてあげなければならないんだよっ!

やり方を以下に書いていきます。

 

wpa_supplicantをインストール

何はともあれ、無線LAN側の設定を終わらせて使えるようにしないと。

ちなみに、CentOS6 であれば、今回使用した「WLI-UC-GNM2」を認識した。
「ifconfig -a」を実行すると、「wlan01」という名前で表示される。
なので、今回は無線LANドライバのインストールは省略。
CentOS5までは別途無線LANドライバを入れないといけなかったようだ。

 

パッケージの インストール

まずは必要なパッケージをインストール。
ついでに、後で無線LANの状態確認用にツールをインストールしておく。

#yum install wpa_supplicant
#yum install wireless-tools
#yum install usbutils

wpa_supplicantサービスの登録

wpa_supplicantサービスをchkconfigで登録。その際、networkサービスより前に起動するようにrcファイルに一工夫。

#vi /etc/init.d/wpa_supplicant
------------------------------------------------------------------------
chkconfig - 23 88
   ↓下記に変更
chkconfig 2345 09 88
------------------------------------------------------------------------

※途中に余計なスペースが入ると次のchkconfig –addで正しく起動設定されないので注意

wpa_supplicantサービスを登録

#chkconfig --del wpa_supplicant ----- 登録済みのものを一旦削除
#chkconfig --add wpa_supplicant ---- 改めて追加

#chkconfig --list |grep wpa ----------- ちゃんと登録されているかどうかを確認
wpa_supplicant  0:off   1:off   2:on    3:on    4:on    5:on    6:off

 

/etc/wpa_supplicant/wpa_supplicant.confのベース作成

#wpa_passphrase SSID名 パスワード >> /etc/wpa_supplicant/wpa_supplicant.conf

 

以下のようにベースが作成される。

#cat /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel

network={
        ssid="SSID名"
        #psk="パスワード"
        psk=1234567890123456789012345678901234567890123456789012345678901234
             ↑実際には正しい暗号化されたパスフレーズが入る

 

wpa_supplicant.confの編集

#vi /etc/wpa_supplicant/wpa_supplicant.conf
------------------------------------------------------------------------
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
network={
        ssid="SSID名"
        key_mgmt=WPA-PSK
        proto=WPA WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk=1234567890123456789012345678901234567890123456789012345678901234
------------------------------------------------------------------------

 

/etc/sysconfig/wpa_supplicantの編集

#vi /etc/sysconfig/wpa_supplicant
------------------------------------------------------------------------
# Use the flag "-i" before each of your interfaces, like so:
#  INTERFACES="-ieth1 -iwlan0"
INTERFACES="-iwlan0" <------------------------ ここ

# Use the flag "-D" before each driver, like so:
#  DRIVERS="-Dwext"
DRIVERS="-Dwext" <---------------------------- ここ

# Other arguments
#   -u   Enable the D-Bus interface (required for use with NetworkManager)
#   -f   Log to /var/log/wpa_supplicant.log
#   -P   Write pid file to /var/run/wpa_supplicant.pid
#        required to return proper codes by init scripts (e.g. double "start" action)
#        -B to daemonize that has to be used together with -P is already in wpa_supplicant.init.d
#OTHER_ARGS="-u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid"
OTHER_ARGS="-f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid"
        ↑ここ。-uを取ること
------------------------------------------------------------------------

 

確認

# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:"SSID名"
          Mode:Managed  Frequency:2.447 GHz  Access Point: xx:xx:xx:xx:xx:xx
          Bit Rate=48 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
            :
          Tx excessive retries:43  Invalid misc:26   Missed beacon:0

# iwpriv
lo        no private ioctls.

eth0      no private ioctls.

wlan0     no private ioctls. <---- 既存のドライバではiwprivは使えないようだ

#iwpriv
            :
Bus 001 Device 002: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]

 

IPルール&ルートの設定

要はこれを設定しないといけないようだ。

ちなみに各NICのIPアドレスは
eth0: 192.168.1.100
wlan0:192.168.1.101
に設定しているものとする。

ipルールの設定

以下のようなファイルを新規作成する。

#vi /etc/sysconfig/network-scripts/rule-wlan0
------------------------------------------------------------------------
from 192.168.1.101 table 100 prio 200
------------------------------------------------------------------------

ipルートの設定

こっちも新規作成する。

#vi /etc/sysconfig/network-scripts/route-wlan0
------------------------------------------------------------------------
dev wlan0 src 192.168.1.101 table 100
------------------------------------------------------------------------

できたらnetworkデーモンを再起動するか、リブートしてみる。

これでeth0(192.168.1.100)に宛てたパケットはeth0から返し、
wlan0(192.168.1.101)に宛てたパケットはwlan0から返すように設定される。

はず!
うちのPCはうまくいった(^^)/

 


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply