この記事の見出し一覧
2017年5月現在、Linux、Debian、Ubuntu、AP、WiFi、アクセスポイントなどをキーワードにしてググると、LinuxでAP化についてそれなりにたくさん情報が入手できる。でも、情報が古かったり安定って書かれてても実はそうでなかったり、意外と単一記事情報だけでは安定稼働にたどり着けなかった。
最初はVyOSでwlan0認識させるのがスマートだ!と思っていたものの、サックリとうまくいかず再起動を繰り返し、ネット遮断がタルくなった(ポンコツだ)。
ルーターも仮想化したし、そうだAPも仮想化しよう
注目すべき構築ポイントは、インターフェイス認識と、Wi-Fiデバイスモジュール(ドライバ)が適切かの2つ。前者はUbuntuの自動認識に任せ、後者はフィクス版に入れ替えることで安定した。以下を真似れば、そのままド安定するものとして覚え書きのメモ。
環境・使用したもの
・ESXi 5.5.0
・ubuntu-16.04-server-amd64.iso で仮想インストール
・IOデータ WN-G300UA
・USBデバイスパススルー(「Realtek WN-G300UA」認識)
・create_ap(hostapd)
16.04 LTS標準の8192cuモジュールは諦めるべき
Ubuntuインストール直後にパススルーでWN-G300UAを接続しても自動認識する。一見、問題なく使えるように見えるけれど、iwconfigコマンドで見て「Power Management:off」になっているにも関わらずデバイスがサスペンドしてしまう。
さまざまな情報を頼りにOffにしたつもりでも、表示に反してハマり続ける始末(1か月くらい試行錯誤したポンコツ)。そのためUbuntuデフォモジュールは早々に諦めるのが吉であり、有志のフィクスモジュールへ入れ替えることで超安定した。
$ sudo apt-get install --reinstall linux-headers-$(uname -r) linux-headers-generic build-essential dkms git $ git clone https://github.com/pvaret/rtl8192cu-fixes.git $ sudo dkms add ./rtl8192cu-fixes && dkms install 8192cu/1.10 && depmod -a $ cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/ $ sudo modprobe 8192cu
/etc/network/interfaces はデフォのままいじらず
とにかく簡単に済ませたいので、インターフェイス周りはUbuntuデフォでいっさい変更しない。以下は、Ubuntuインストール時に固定IPアドレスで設定した場合だが、DHCPでも構わないと思う(メンテしづらいから固定よね)。
$ cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens160 iface ens160 inet static address 192.168.0.3 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 192.168.0.51 $
wlan0でなくてもそのまま使う、まったく問題ない
WN-G300UAを仮想マシンにUSBデバイスパススルー接続したら、dmesgで認識状況してみると次のようになる。Ubuntu 16.04 LTSの場合は(10.04以降)、wlan0からwlx3476c541xxxxなどと自動変更されるが、とにかく編集個所を少なく済ますのでそのまま使う。
rtl8192cu 1-1:1.0 wlx3476c541xxxx: renamed from wlan0
などの行が確認できるかがポイント。あちこちで定番と書かれていたWLI-UC-GNM2(バッファロー)なども試したが、お手軽完全自動認識なのは、WN-G300UAだけだった(当方で数製品試した中で)。
[ 10.809678] shpchp: Standard Hot Plug PCI Controller Driver version: 0.4 [ 11.535186] 8192cu: module verification failed: signature and/or required key missing - tainting kernel [ 11.549935] vmxnet3 0000:03:00.0 ens160: intr type 3, mode 0, 2 vectors allocated [ 11.551539] vmxnet3 0000:03:00.0 ens160: NIC Link is Up 10000 Mbps [ 12.316337] ppdev: user-space parallel port driver [ 12.351602] Adding 2095100k swap on /dev/sda5. Priority:-1 extents:1 across:2095100k FS [ 12.458274] cfg80211: World regulatory domain updated: [ 12.458281] cfg80211: DFS Master region: unset [ 12.458284] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp), (dfs_cac_time) [ 12.458288] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A) [ 12.458291] cfg80211: (2457000 KHz - 2482000 KHz @ 40000 KHz), (N/A, 2000 mBm), (N/A) [ 12.458294] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (N/A, 2000 mBm), (N/A) [ 12.458297] cfg80211: (5170000 KHz - 5250000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (N/A) [ 12.458300] cfg80211: (5250000 KHz - 5330000 KHz @ 80000 KHz, 160000 KHz AUTO), (N/A, 2000 mBm), (0 s) [ 12.458303] cfg80211: (5490000 KHz - 5730000 KHz @ 160000 KHz), (N/A, 2000 mBm), (0 s) [ 12.458306] cfg80211: (5735000 KHz - 5835000 KHz @ 80000 KHz), (N/A, 2000 mBm), (N/A) [ 12.458309] cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 0 mBm), (N/A) [ 13.622049] cgroup: new mount options do not match the existing superblock, will be ignored [ 14.525073] NET: Registered protocol family 40 [ 15.928550] usbcore: registered new interface driver rtl8192cu [ 16.023436] rtl8192cu 1-1:1.0 wlx3476c541xxxx: renamed from wlan0 [ 23.923417] IPv6: ADDRCONF(NETDEV_UP): wlx3476c541xxxx: link is not ready [ 24.057328] ip_tables: (C) 2000-2006 Netfilter Core Team [ 24.089409] nf_conntrack version 0.5.0 (16384 buckets, 65536 max) [ 24.711426] IPv6: ADDRCONF(NETDEV_CHANGE): wlx3476c541xxxx: link becomes ready
create_apで十分、神スクリプト
この状態で、ifconfigでインターフェイス状態を見ても、刺した直後は有効になってないため確認できない。でも、iwconfigでリンク状態ならば問題ない。次に、hostapdを超簡単に機能させるcreate_ap をインストールする。hostapdも設定のハマりどころがたくさんある。もうcreate_apに任せるべきw ついでに、iwconfigコマンドが含まれるパッケージ(wireless-tools)も入れておく。
$ sudo apt-get install hostapd $ git clone https://github.com/oblique/create_ap $ cd create_ap $ sudo make install $ sudo apt-get install wireless-tools
iwconfig で確認すると次の通り。現在のところ、11n有効にできず11gのままで54Mbpsリンク。まぁ、スマホ繋げる程度なので私的にはこのスピードで十分。よって放置。。。
$ iwconfig lo no wireless extensions. ens160 no wireless extensions. wlx3476c541xxxx IEEE 802.11bg ESSID:"xxxxxx" Nickname:"<WIFI@REALTEK>" Mode:Master Frequency:2.412 GHz Access Point: 34:76:C5:41:xx:xx Bit Rate:54 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=82/100 Signal level=82/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 $
$ sudo create_ap wlx3476c541xxxx ens160 [ap名] [pass] --daemon
などとして起動すれば、hostapd設定もいっさい必要なくアクセスポイントが完成。超簡単!
この時点でifconfigしてみると、Wi-Fiインターフェイスも確認できる。
$ ifconfig ens160 Link encap:イーサネット ハードウェアアドレス 00:0c:29:1e:xx:xx inetアドレス:192.168.0.3 ブロードキャスト:192.168.0.255 マスク:255.255.255.0 inet6アドレス: fe80::20c:29ff:fe1e:xxxx/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:2353574 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:3407878 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:919124617 (919.1 MB) TXバイト:4308864706 (4.3 GB) lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 inet6アドレス: ::1/128 範囲:ホスト UP LOOPBACK RUNNING MTU:65536 メトリック:1 RXパケット:160 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:160 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1 RXバイト:11840 (11.8 KB) TXバイト:11840 (11.8 KB) wlx3476c541xxxx Link encap:イーサネット ハードウェアアドレス 34:76:c5:41:xx:xx inetアドレス:192.168.12.1 ブロードキャスト:192.168.12.255 マスク:255.255.255.0 inet6アドレス: fe80::3676:c5ff:fe41:xxxx/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:3380375 エラー:0 損失:11126 オーバラン:0 フレーム:0 TXパケット:2129150 エラー:0 損失:17 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:4386989149 (4.3 GB) TXバイト:944485530 (944.4 MB) $
最後に、再起動してもcreate_apが自動起動するようにrc.localに書いておく(超適当w)。
$ cat /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. create_ap wlx3476c541xxxx ens160 [ap名] [pass] --daemon exit 0 $
終わり! もう二度と構築しないぞ、とovaエクスポートしておきつつ(覚書不要な件w)、16.04 LTSなのでメンテナンスフリーのまま2、3年以上環境壊れないで使い続けられればいいなぁと期待。たぶんイケる。
もう、この環境で1か月以上24時間ド安定しています。
半年後…
たまにクライアントが切断される事象が気になり、スマートデバイスも激増したため、XiaomiのAP買いました(;´∀`)仮想化断念。。。