LXCコンテナにWiFi環境を構築する

LXCコンテナの中にWiFi環境を構築してみたのでその記録。
元々、Ubuntu PCをWiFiアクセスポイントにする作業を行っている過程で、
「スタンドアロン環境で構築したほうがいいかな?」と思って始めた事。
が、必要な時だけアクセスポイントを起動させる設定が出来た(こちらの記事参照)ので、
LXCコンテナでやる意味は無いと判断してボツにした方法。
とはいえせっかくなので記事には残しておく。

スポンサーリンク

LXCコンテナでWiFiアダプタを使えるようにする

ホストとなるマシンでlshwを実行して、WiFiアダプタ(下ではwlp2s0)が見つかればOK。見つからない場合はドライバのインストール等設定が必要。

$ sudo lshw -class network -short
H/W path               デバイス  クラス      詳細
==========================================================
/0/100/13/0            enp1s0        network        RTL8111/8168/8411 PCI Express Gigabit Ethernet Controll
/0/100/13.3/0          wlp2s0        network        Dual Band Wireless-AC 3168NGW [Stone Peak]

インストール直後のLXCコンテナには仮想ethernetデバイスを使ったネットワーク接続が設定されている。まずはLXCコンテナに必要なコマンド類をコンテナにインストール。

$ sudo apt-get install wpasupplicant iw wireless-tools

今度はホスト側の設定。WiFiアダプタがコンテナから見えるようにするオマジナイ。wifiboxはコンテナの名前。

$ sudo lxc-device -n wifibox add wlp2s0

コンテナ側でip aを実行し、wlp2s0が見えるようになっていることを確認。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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
3: wlp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether f8:xx:xx:xx:5e:0a brd ff:ff:ff:ff:ff:ff

このままだとコンテナを再起動したときにWiFiアダプタが見えなくなってしまうため、設定ファイルに設定内容を保存しておく。コンテナ名がwifiboxなので、ホスト側の設定ファイル/var/lib/lxc/wifibox/configの中に以下の記述を追加。

lxc.net.1.type = phys
lxc.net.1.link = wlp2s0
lxc.net.1.flags = up

上記”lxc.net.1.type = phys”の記述はwlp2s0をLXCコンテナの中で物理デバイスとして直接使う設定。

LXCコンテナの中からWiFiアクセスポイントのスキャン

iwlistコマンドでアクセスポイントのスキャンが出来る。正しくデバイスが動作しているか確認も兼ねて実行。以下の結果のように近くのアクセスポイントが見えたら、とりあえずデバイスは動作している。

$ sudo iwlist wlp2s0 scan
wlp2s0    Scan completed :
          Cell 01 - Address: XX:XX:XX:XX:XX:XX
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=45/70  Signal level=-65 dBm  
                    Encryption key:on
                    ESSID:"アクセスポイントのESSID"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 9 Mb/s
                              18 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 12 Mb/s; 24 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=XXXXXXXXXXXXXXXXXX
                    Extra: Last beacon: 3192ms ago
:

LXCコンテナをWiFi端末にする

wpa_supplicantを使うと、LXCコンテナを端末としてWiFiネットワークに接続出来る。
以下のようなSSIDとパスフレーズを記述した設定ファイルを用意する。

wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
    ssid="MicroPython-XXXXXXX"
    key_mgmt=WPA-PSK
    proto=WPA WPA2
    psk="micropythoN"
}

上記は平文でパスフレーズを書くが、wpa_passphraseコマンドを使うとパスフレーズが暗号化出来る(今回は省略)。

下記コマンドでアクセスポイントに接続する。

$ sudo wpa_supplicant -iwlp2s0 -c./wpa_supplicant.conf

このままではアクセスポイントとWiFiアダプタの間にリンクが張られているるだけ(有線LANで言えばケーブルを繋いだだだけ)なので、WiFiアダプタのネットワーク設定を行う必要がある。

IPアドレスを直接指定する場合は、以下のコマンドを実行すればとりあえずLAN内での通信は出来るようになる。但しこのままでは名前解決やルーティングの設定をしていないのでインターネットには繋がらない。

$ sudo ip address add 192.168.11.11/24 dev wlp2s0

DHCPでIPアドレス設定をする場合は、以下でOK。こちらは名前解決やルーティングが自動設定されるので、インターネットに接続出来る。

$ sudo dhclient wlp2s0

上記で起動したwpa_supplicantのプロセスを終了すると、WiFi接続も終了する。接続が終了しても、DHCPで割り当てられたIPアドレスはそのままになっているので、以下も実行しておく。

$ sudo dhclient -r

LXCコンテナをWiFiアクセスポイントにする

LXCコンテナをWiFiアクセスポイントにする事も勿論可能。

冒頭にも書いたが、上記のアダプタ周りの設定が終わっていれば、基本的に設定内容はこちらの記事と全く同じなので詳細は省略。

オンデマンド起動が目標であれば、LXCコンテナの中にNetworkManagerを使って設定する方が簡単だったかも?

コメント