ラベル Wi-Fi の投稿を表示しています。 すべての投稿を表示
ラベル Wi-Fi の投稿を表示しています。 すべての投稿を表示

2017年4月19日水曜日

I-O DataのWN-AC433UAをArch Linuxで使いAPを立てる(2017年4月版)

概要:以前の投稿で、いくつかリンクをいただいておりましたが、最近のカーネルでは新しいv5のデバイスドライバのほうがよさそうでした。パッケージは「aur/rtl8812au-v5-dkms-git」です。

TL;DR;


2017年3月末頃のLinux Kernel 4.10になって、いままでWi-Fiルータとして使っていたIntel NCU NCU5CPYH内蔵のWi-Fiチップ「Wireless-AC 3165」では起動時に
kernel: iwlwifi 0000:02:00.0: L1 Disabled - LTR Disabled
のエラーがあったり、APに接続してくるデバイスが6か7台目を超えるとマイクロコードのエラーを発生してドライバの再起動を繰り返し、最後にはカーネルパニックで死ぬ、ということになっておりました。

ファームウェア27が現在の最新のようですが、考えられる手を尽くすもどうにもならないので、いったんお蔵入りしていたWN-AC433UAを復活させることにしました。

ただ、いままで使っていたRealtekドライバ4.3.20ベースの「aur/rtl8812au_rtl8821au-dkms-git」が認識されず、同じチップでより新しい、バージョン5.1.5ベースのドライバが最終更新日2017年4月17日でしたので、これに入れ替えることにしました。

以前のドライバのアンインストール


まず、いままでのドライバをdkms removeしておきます。
sudo dkms status
すると、「rtl8812au_rtl8821au, 4.3.22_beta.r9.928e27f, ...」云々と出てくると思いますので、
sudo dkms remove rtl8812au_rtl8821au/4.3.22_beta.r9.928e27f --all
のような感じで「モジュール名/モジュールのバージョン番号」を指定してください。バージョン番号ですが、AURのページをみると、この4.3.22ではなく4.3.20が最新のようですね(ただし2016年9月11日以後更新がない)。

その後、yaourt -Rでアンインストールします。
yaourt -R rtl8812au_rtl8821au-dkms-git

新ドライバのインストール

yaourt -S rtl8812au-v5-dkms-git
コンパイルしてインストールすると、dkms addまで自動でやってくれます。
$ dkms status
rtl8812au-v5, 5.1.5, 4.10.10-1-ARCH, x86_64: installed
うまくインストールできているようです。ip linkすると、wlp0s20u1というデバイスが見つかると思います。

hostapdの設定


その前に、ブリッジデバイスを作っておきます。systemd-networkdを使っているので、

/etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
/etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
Address=192.168.0.1/24
IPForward=yes
などとしておきます。sudo systemctl restart systemd-networkdすると生えてくるんでしょうか、むかし作ったときには再起動してしまったので不明です。 あと、以前はwlp0s20u1をbr0につないでおくという話だったような気がしますが、いまhostapdの解説を読むと、それは「やってはいけない」らしいです。なので、適当にIPアドレスを振っておきます。

/etc/systemd/network/usbwifi.network
[Match]
Name=wlp0s20u1
[Network]
Address=192.168.0.2
こんな感じでしょうか。

それで、iw listした結果からこのチップでサポートされている機能を探り、いま当方で動いているhostapd.confは以下の通りです。

/etc/hostapd/hostapd.conf
interface=wlp0s20u1
driver=nl80211
bridge=br0
ieee80211d=1
country_code=JP
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ctrl_interface=/run/hostapd
ctrl_interface_group=0
ssid=設定するSSID
hw_mode=g
channel=7
beacon_int=100
dtim_period=2
max_num_sta=255
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
# IEEE 802.11n
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
# IEEE 802.11ac
#ieee80211ac=1
#vht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][DSSS_CCK-40]
vht_oper_chwidth=0
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0
eap_server=0
own_ip_addr=127.0.0.1
wpa=2
#wpa_psk=暗号化されたパスフレーズ
wpa_passphrase=平文のパスフレーズ
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
ご武運を祈ります。

ひとつの設定ファイルでBand 1(2.4GHz帯)とBand 2(5GHz帯)両方を設定するのは面倒そうなので、Band 1のほう(802.11n)を生かしています。Band 2(802.11ac)の設定をする場合は、
hw_mode=a
channel=36
(チャンネル番号はWikipediaの項目を参照)のように置き換えることになると思います。

また、この設定でjournalctl -fのログをみているとちょっとうるさいので、logger_syslog_levelの値を3か4(大きいほど情報が減る)にしたほうがいいかもしれません。

このあと、iptablesでNATの設定したり、DHCP等の設定が必要ですね。「インターネット共有」のドキュメントを参照してください。

自宅用ではdnsmasqでDHCPサーバとDNSリレーを兼用するのが簡単だとは思いますが、多数の接続がある環境では不具合があるようなので、当方ではdhcpdとunboundを設定しています。

2016年4月18日月曜日

I-O DataのWN-AC433UAをArch Linuxで使う

(追記:2017年4月19日)最近のカーネルでは、この記事のドライバでは問題がありそうです。新たに記事を起こしましたので、ご参照ください。

WiFi APの構築をしています。NCUで。

当初はVyOSを使おうとしていたんですが、IntelのNCUではbootできませんでした。あと、内蔵Wi-FiモジュールはLinux Kernel 4.2以上が必要ということで、3であるVyOSは対象から除外することとなりました。それでいろいろ苦労しております。

そのあたりは後述するとして、この際LinuxはArch Linuxにしようと決めました。理由はただひとつ、どんどん新しくなるからセキュリティ対応も早かろうと。

Wi-FiのAPなので、アンテナが外部に出ていたほうがなにかと便利と思い、I-O DataのWN-AC433UAがなんだか在庫があるということで、何も考えずに注文して届いたわけですが、当然Arch Linuxでは認識できないわけです。動いたという報告が見当たらなくて、しばらく途方に暮れていたのですが、日をあらためて調べ直すと、チップセットは「Realtek RTL8811AU」とのこと。つまり、このカーネルモジュールを入れればよいということになります。

すると簡単に、AURとして「rtl8812au_rtl8821au-dkms-git」があることがわかりました。名前はあれですが、RTL8811AUもサポートすると書かれています。

そうくればあとは簡単です。

とりあえず、AURの環境が準備されていなかったので、こちらの手続きにしたがって、yaourtでAURのパッケージコンパイルとインストールができるようにします。

そして、linux-headers、dkms、rtl8812au_rtl8821au-dkms-gitをインストールすることになります。最初はカーネルモジュールだけ入れて、dkmsが必要と言われてdkms、linux-headersがないと言われてlinux-headersを入れたのですが、この逆がよいのではないかと思います。

sudo yaourt -S linux-headers dkms
sudo yaourt -S rtl8812au_rtl8821au-dkms-git
dkmsを使うのは初めてだったので再起動してしまったのですが、そうしなくてもなんとかなるんだろうとは思います。

これでdkms statusすると
$ dkms status
rtl8812au_rtl8821au, 4.3.22_beta.r9.928e27f, 4.5.0-1-ARCH, x86_64: installed
と、カーネルに組み込まれていることがわかります。そこでおもむろにWN-AC433UAをUSBポートに挿し、lsusbすると
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 006: ID 8087:0a2a Intel Corp.
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 002: ID 04bb:0953 I-O Data Device, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
こんな感じで見えるようになりました。ip linkすると、
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
4: wlp0s20u1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff
ちゃんとデバイスが生えています。よかった。

まだ通信テストができていませんが、それはこれから。

2014年7月15日火曜日

Raspberry PiのWiFi設定-DHCPから固定IPアドレスまで最速版

有線のLAN環境がないところでRaspberry PiのWiFiを設定する方法。いろいろ混乱があるようなので、2014年6月20日版Raspbianで最短(当社調べw)の設定手順を最短で書く。

Raspbianが起動している状態で、login: pi, Password: raspberryのデフォルトアカウントでログインしているところからはじめる。

$ sudo bash
# chmod 660 /etc/wpa_suoplicant/wpa_supplicant.comf
# wpa_passphrase SSID KEY >> $* ← SSIDもKEY(パスワード)も、特にダブルクォートなどで囲むことなく、そのまま書く。ハッシュしたほうに、それがKEYの文字として含まれしまい認証エラーになることがあるるようだ。
# vi $* ← 編集する。

内容は、以下のとおり。
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="SSID" ←コマンドで指定したSSIDが入っている。
    key_mgmt=WPA-PSK
    proto=WPA2
    pairwise=TKIP CCMP
    group=TKIP CCMP ←ここまでの4行追記
    #psk="4332221111"←コマンドで入力したまま
    psk=9a7cdfea2bbbda47edacc95b2ae7a1c..... ←長いハッシュされた鍵が生成されている  
}
複数のWiFi接続先があれば、上のwpa_passphraseコマンドでのハッシュを含むnetworkエントリ生成から、4行追記を繰り返す。

続いて、/etc/network/interfacesファイルの編集。Raspbianの設定のままではWPA2のWiFiスポットに接続しないので、それをまず直す。
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp ←なぜか"manual"になっているが、素直にdhcpするように直す
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf ←wpa-roamはwpa-confにしておく
iface default inet dhcp
この状態で、
$ sudo ifdown wlan0
$ sudo ifup wlan0
するとDHCPでのアドレス取得がいつまでたっても終わらないので、迷わず上記はやらずにsudo reboot。

WPA2のSSIDと共有鍵さえ間違っていなければ接続できるはず。逆に、いくらやっても接続できないなら、記述を見なおすとか、wpa_passphraseを再度実行するのもよいかもしれない。また、WiFiドングルが2.4GHzまで対応なのか5GHz対応なのかで違ってくるので、2.4GHzまでの安いものを使うなら、WiFiスポットが2.4GHzでの接続に対応するよう設定しておく。記述は正しいと考えれれるのにつながらないならWiFiルータの再起動で解決することもある。

ここで、/etc/resolv.confの自動生成をするパッケージresolvconfを入れる。
$ sudo apt-get install resolvconf
$ sudo service resolvconf start
WiFiでDHCPにより接続できているはずなので、apt-getなども問題なくうまくいくはず。だめなら設定を見なおすとかエラーメッセージをよくみて考えるなどして解決する。ときには、WiFiルータ側を再起動する必要があるかもしれない。特に混雑しているAPは、新たに一台追加する余裕がないときがあるので、ルータ再起動でいちはやく接続を勝ち取るのは有効な戦略。

最後に、固定IPの設定に変更する。/etc/network/interfacesをそのように書きなおす。
auto lo
iface lo inet loopback
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static ←固定IP設定を宣言して、以下パラメータを入れる。
address 192.168.1.xxx ←使う予定の固定IPアドレスを書く
netmask 255.255.255.0 ←接続するネットワークの設定に合わせる
gateway 192.168.1.1 ←default routeを決めるので、ネットワークの設定に合わせる
dns-nameservers 192.168.1.1 ←/etc/resolv.confの設定にかかわる。ここではWiFiルータを指しているがいつまでも安全とはいえないので、ひとまず信頼できるDNSを書いておくのは悪くない(が、8.8.8.8は愚の骨頂だと思う)。
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
「address」から「dns-nameservers」までの追記が正しければ、以下の手順でうまくいく。
$ sudo ifdown wlan0
$ sudo ifup wlan0
このときに、「can't read /etc/network/interfaces」などと出たら、そのファイルの記述が誤っていないか確認すべき。

あとは再起動しようがなにしようがWiFiで固定IPの設定が維持されるはず。