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を使って設定する方が簡単だったかも?
コメント