9月 102017
 

Amazon で USB Wi-Fi の子機が安く売っているのを発見し、購入しました。 AUKEY の AC1200 というヤツです。似たようなのを出しているメーカ名は色々あって Wavlink だとか、型番が WF-R6 というものだったりします。きっと OEM なんでしょうね。フツーの価格が 2,980yen で、クーポン利用で 999yen だったのでラッキーです。もう一個買おうかなぁ。

届いたのはこんな感じ。壁掛けパッケージです。そして、実物はこんな感じ。ずいぶんと大きいです。

USB の子機は 802.11 b/g/n/a/ac に対応しています。僕が購入した USB Wi-Fi 子機では初めての a (5GHz 帯) 対応です(僕は ac な AP は持ってない)。親機にもなれるようですが WindowsOS の場合はユーティリティをインストールしないとダメなようです。なので、自分的には子機専用で使う予定です。

利用しているチップは REALTEK の RTL8812AU というモノらしいです。 Windows10 Creators Update ではドライバなしでサクっと認識され 5GHz 帯のアクセスポイントにすんなり接続できました。
Cisco の EAP などに接続するためにはメーカサイトからドライバをダウンロードする必要があります。
ドライバはこの辺りのが使えるかな。 WN688A2–CD_WLAN_V6.85 のドライバをダウンロードすると良い感じです。

WindowsOS で 801.11a で接続して速度の検証してみたところ 802.11n の FreeBSD で言うところの if_run (Ralink のチップ) の機器の倍以上の 100Mbps 程度で通信することを確認しました。

 
さてと。これが FreeBSD で動作するのか、早速試してみました。

REALTEK の RTL8812AU は FreeBSD では対応していないようでドライバがありません。 REALTEK チップのカーネルモジュールとしては if_urtwn.ko がありますが、これでは動作しません。
で、ウェブで調べていると GitHub にカーネルモジュールがあったので、今回はそれを試してみました。

GitHub から urtwm-master.zip をダウンロードして適当なディレクトリに展開します。そしてその中にあるパッチを適用します。 usbdevs に適用するパッチになります。あとは、同梱の README.md を読んでその通りにやるとコンパイルが通り、インストールも無事に完了です。

インストール後は /boot/modules/ に urtwm-rtl8812aufw.ko urtwm-rtl8821aufw.ko if_urtwm.ko が配置されます。そして、それらを kldload すると利用可能な状態となります。
僕は普段から if_urtwn.ko を利用しているので、以下の設定が /boot/loader.conf に書いてあります。今回も必要かもしれません。

legal.realtek.license_ack="1"

 
さてと。カーネルモジュールのコンパイル時のとこをはしょりすぎているのでちょっと書きますが GitHub からダウンロードしたソースコードは 11.0-RELEASE 以降のカーネルソースが必要になります。

僕は FreeBSD/amd64 では環境が整わず FreeBSD/i386 と FreeBSD/arm で検証しました。

それにしても FreeBSD の 10 系 RELEASE と 11 系 RELEASE では USB 周りのソースの配置がガラっと変わりましたね。 10 系までは /usr/src/sys/dev/usb/wlan/ などにモジュールのソースがあったのに 11 系では /usr/src/sys/dev/ 配置されるようになりました。他にもカーネルのコードが変わっているので 10 系 RELEASE では if_urtwm はコンパイルできません。是非とも 11 系 RELEASE を用意しましょう。

 
と、いうことで if_urtwm* のコンパイルが通ったので使ってみることにします。一番最初に試したのはなんと Raspberry Pi 2 Model B の FreeBSD 11.0-RELEASE-p1 です。 USB Wi-Fi の子機は USB3 に対応しているのですが Ras Pi2 は USB2 にしか対応していないので性能が出ないんですが・・f(^^;;。

ザクっと USB ポートにさしてみると ugen に落ちて認識しません。あらら。僕が購入した AUKEY の AC1200 の情報を usbdevs に書いてあげる必要があります。

と、いうことで以下の行を /usr/src/sys/dev/usb/usbdevs に記述してあげます。 VendorID は既に登録済みだったので ProductID のみ記載します。

product REALTEK RTL8812AU      0x8812  RTL8812AU

 
あと、ソースコード中にも記載してあげる必要があります。 urtwm-master/sys/dev/urtwm/if_urtwm.c に対して以下のパッチを適用します。

--- sys/dev/urtwm/if_urtwm.c.orig       2017-09-07 18:59:06.031051000 +0900
+++ sys/dev/urtwm/if_urtwm.c    2017-09-06 20:51:41.749003000 +0900
@@ -128,6 +128,7 @@
        URTWM_RTL8812A_DEV(SENAO,               EUB1200AC),
        URTWM_RTL8812A_DEV(SITECOMEU,           WLA7100),
        URTWM_RTL8812A_DEV(TRENDNET,            TEW805UB),
+       URTWM_RTL8812A_DEV(REALTEK,             RTL8812AU),
        URTWM_RTL8812A_DEV(ZYXEL,               NWD6605),
        URTWM_DEV(DLINK,        DWA171A1),
        URTWM_DEV(DLINK,        DWA172A1),

 
これで、再度コンパイルしてインストールします。今回購入した USB Wi-Fi 子機は REALTEK の RTL8812AU というデバイスとして認識されるようになります。

kernel: urtwm0 on uhub0
kernel: urtwm0:  on usbus4
kernel: urtwm0: MAC/BB RTL8812AU, RF 6052 2T2R

 
で、 FreeBSD/arm 11.0-RELEASE-p1 と FreeBSD/i386 11.1-RELEASE-p1 で試してみましたが、残念ながら 802.11a では接続できませんでした・・。orz

ただし、 802.11n では動作しました。こちらのほうはかなりの速さで、一応 30Mbps くらい出ました。 USB 子機が大きくてアンテナがちゃんとしているからでしょうかね。
WindowsOS では 802.11a で利用できるのですが、残念ながら FreeBSD では 802.11n だったですが、速度が出るのでヨシとしておくかぁ。と、いう感じでしょうか。 NotePC には大きくて常用は厳しいですが Ras Pi2 には良いかもしれんです。

USB3 へ接続すると 802.11a で通信できるのかなぁ? 今回はその環境がありませんでした。

あ。 /etc/wpa_supplicant.conf とか /etc/rc.conf の記述方法は今回ここでは書きませんが、大丈夫ですよね?

 
自宅の ThinkPade145 は USB3 が動作するのですが、この NotePC はカーネルのみが 10.1-RELEASE のままなので今回のカーネルモジュールはコンパイルできません。 syspend/resume を取るか、最新の FreeBSD を取るか悩ましいところではありますが、僕の場合は suspend/resume のほうが重要。なのでバージョンアップはしていません。

 
と、いうことで GitHub から拾ってきた if_urtwm のカーネルモジュールですが、一応は動いている。ということになります。if_run も if_rum も if_urtwn も、今までは 802.11n 対応だったので今回 FreeBSD で初めての 802.11a のドライバ。と、いうことになるかと思われます (僕の試した環境では接続できなかったけど・・)。

if_urtwm はどんなデバイスがあるのか? というのは上のパッチを適用したソースコードである sys/dev/urtwm/if_urtwm.c の中に書いてあるので、試してみたい方は一回覗いてみると良いかも知れません;-)。

9月 092017
 

手頃な値段の Cisco ルータが欲しいなぁ。と、思っていて Cisco C841M-4X-JSEC/K9/START でも良いかなぁ。とか、色々考えたのですが Amazon で CISCO892J-K9 が 2,900yen (当然中古) で売っていたので飛びついてしまいました・・f(^^;;。

まぁ、仕事柄 Cisco のスイッチやルータは触っていて IOS については多少の知識があるので特に問題は無いです。

が、しかし、 CISCO892J-K9 は GigabitEthernet ポートが一個しかなくて、しかもルーテッドポート。スイッチポートが 8 個の FastEthernet ポートなので、自宅が既に Giga 化している環境においては役不足です。『やっぱり 841 のほうが良かったかなぁ・・。』などと悩むのですが、考えてみると 841 はポートが 4 個しかないのでどのみちスイッチを購入する必要があります。

と、いうことで、今回は CISCO892J-K9 と NETGEAR の GS108E-300JPS を購入しました。前者が 2,900yen に対して後者が 4,830yen でした。うむむ。

二つ並べるとこんな感じ。

NETGEAR GS108E-300JPS はアンマネージプラスなスイッチです。シリアルコンソールではアクセスできないし telnet もできないけど、ウェブブラウザでアクセスすることにより VLAN の設定が行えます。
今回は CISCO892J-K9 で VLAN を設定し、タグを GS108E-300JPS に通して、GS108E-300JPS から L3 ルータに伸ばす(こういうふうに書くとかっちょ良いのですが “L3 ルータ” とは VyOS のことです;-)。と、いう構成にしました。

物理構成図はこんな感じ。

GigabitEthernet0 はルーテッドポートなので VLAN が指定できないのですが bridge で VLAN1 に入れました。アップリンクの Fa0 (ルーテッドポート) は PPPoE なので 100Mbps でも大丈夫ですが、下に行くポートは 1Gbps で落としたい。と、いう雰囲気ですね。

CISCO892J-K9 の Gi0 をスイッチポートとして利用する config は以下のようにしました。
bridge 設定の抜粋です。

bridge irb
!
interface GigabitEthernet0
 description # VLAN 1 LAN-Zone #
 no ip address
 duplex auto
 speed auto
 ipv6 enable
 bridge-group 1
!
interface Vlan1
 no ip address
 ip virtual-reassembly in
 ipv6 enable
 bridge-group 1
!
interface BVI1
 description # VLAN1 bridge Interface #
 ip address 192.168.1.254 255.255.255.0
 ipv6 address 3ffe:6580:AA40::254:1/64
 ipv6 address 3ffe:6580:AA40::/64 eui-64
 ipv6 enable
!
bridge 1 protocol ieee
bridge 1 route ip

 
今回利用している IOS は 15.6(3)M2 です。 bridge には interface BVI1 を利用します。BVI1 に IPv4・IPv6 アドレスを付加しています。あ。 IPv6 の設定についてはここでは書きません;-)。

上記設定 GigabitEthernet0 がスイッチポートの仲間入りです。しかし、 GigabitEthernet0 で VLAN を Trunk で利用できないので Fa4 と GS108E-300JPS を物理接続している。と、いうような感じです・・。

CISCO892J-K9 の スイッチポートに接続した機器は GigabitEthernet0 を通って 1Gbps で自宅のサーバ群にアクセスする。と、いうような感じになっています。
あと、 CISCO892J-K9 には Wi-Fi AP も接続しているので 100Mbps の帯域でも十分な場合もあります。なので、これで良いかなぁ。と、いう気がしないでもないです。

 
そーそー。最後に一点。 CISCO892J-K9 には USB ポートがあるのですが『わーい。USB で電源供給できるぞぉ。』などと思い喜んで Raspberry Pi2 と Pi3 の二台の給電をしていたら、あれま・・。 CISCO892J-K9 が夜中に再起動を繰り返すようになってしまいました。

二台の RasPi を USB から引っこ抜き、 CISCO892J-K9 は一日電通しないでほったらかしにして再度起動したらその後は安定稼働しているので、多分電源不足で CISCO892J-K9 が安定しなかったんだろう。と考えています。
今回は中古で購入し、動作不安定でハラハラドキドキしました。一応一ヶ月の保証がある機器だったので購入先に連絡を入れました。が、基本的には USB ポートに RasPi (しかも二台っ!!)を接続しないほうが良さそうですf(^^;;。

 
この CISCO892J-K9 のネタは今後続いていくかな? 変わった設定とか、へんなことが起きた時に書いていきたいと思います;-)。