OpenWRTをRasPiで作る(うまくいったけどUSB-NICが不安定で実用にならない)
特殊な設定を適用したNATルーターが必要になった。
といっても、DHCPでアナウンスするDNS情報を上流から来ている情報と違うものを流すだけなんだけど。
調べてみると、近頃の市販のルーターが細かい設定できずにヘタレすぎるので、一台作ることにする。
手元に前にタダでもらったRasPi1があるので、これで。
もらってから、まったく使ってなかったのだけど、ケース付きで新品でもらったので何かに使わないと忍びない。
裏のシールには、1.0B1.1と書いてある。
NATルーターなので、Raspianをチマチマ設定するより、OpenWRTだろということで対応イメージがあるか本家を見てみる。
なくても、ARMなのでビルドはできるっしょ。
https://wiki.openwrt.org/toh/raspberry_pi_foundation/raspberry_pi
あるな。
Raspberry Pi 1: http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/
落とす。
http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img.gz
sha256sumsも落として内容を確認する。
SHA256(config.diff)= be2898d15e47b23811b4ac14e8c11884b7efc7955e74bd5f78259141800eb1a4
SHA256(kernel-debug.tar.bz2)= 2bdba742bd26a883452b946b6ad179302346d3c441d3359628374a0f2befd83a
SHA256(openwrt-15.05.1-brcm2708-bcm2708-ext4.img)= 035779c6275fbc7bc04588efddfa66ef96dac60ce6b15ba059adccac1b89c8ed
SHA256(openwrt-15.05.1-brcm2708-bcm2708-Image)= 5582c64b9699ca528580b3f0a2b651fb915a67014126c97bc3662b093b1965d3
SHA256(openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img)= 13477fde473294a410512f173f1cfe181500bcac070ed29ee285c7f0c398dd80
SHA256(openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img.gz)= d7433d9e301716c64ef018fe595cc0cc62acebc731fe29c229f30ebb02cca804
SHA256(OpenWrt-ImageBuilder-15.05.1-brcm2708-bcm2708.Linux-x86_64.tar.bz2)= b7a5c0722383b407300dca27b3e74a4305c9f4434502617712e8948a93c2ce77
SHA256(OpenWrt-SDK-15.05.1-brcm2708-bcm2708_gcc-4.8-linaro_uClibc-0.9.33.2_eabi.Linux-x86_64.tar.bz2)= 88d867ea5da428bb5ea1c2a4bb3d7ddba7315ac68785e6470577a3517d226a50
$ shasum -a 256 openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img.gz d7433d9e301716c64ef018fe595cc0cc62acebc731fe29c229f30ebb02cca804 openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img.gz
一致する。問題なし。
タイムスタンプは、15-Mar-2016 17:51なので、そんなに古いというわけでもない。
プロジェクトの正式リリースでは最新バージョンになる感じ。
展開する。
$ gzip -d openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img.gz $ ls -lh openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img -rw-r--r--@ 1 kinneko staff 76M 12 2 10:52 openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img
小さいな。
SDに焼く。512MのSDがあったのでこれを使う。
環境はMac OSXから。
ディスクユーティリティでFATに初期化。
$ diskutil list (snip) /dev/disk4 #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *500.7 MB disk4 1: DOS_FAT_32 UNTITLED 500.6 MB disk4s1
$ df -h Filesystem Size Used Avail Capacity iused ifree %iused Mounted on (snip) /dev/disk4s1 477Mi 984Ki 476Mi 1% 512 0 100% /Volumes/UNTITLED
/dev/disk4はバッファキャッシュで、実体は/dev/rdisk4なので注意。
$ diskutil unmount /Volumes/"NO NAME" Volume NO NAME on disk4s1 unmounted $ sudo dd if=openwrt-15.05.1-brcm2708-bcm2708-sdcard-vfat-ext4.img of=/dev/rdisk4 155648+0 records in 155648+0 records out 79691776 bytes transferred in 114.416721 secs (696505 bytes/sec)
OSXだと、conv=fsyncとかないのね。まぁいいか。
$ diskutil eject /dev/disk4 Disk /dev/disk4 ejected
SDを取り出す。
Raspiでシリアルは、GPIOでやるのね。
そもそもOpenWRTで、シリアルにコンソール出てるのかしらん?
GND - GND
TXD - GPIO15 (RXD)
RXD - GPIO14 (TXD)
という結線になるようだ。3.3Vが標準かしらん?
いきなりヘッドレスもメンドクサイので、HDMIケーブルでモニタをつなげて起動してみる。
基板上から見て、端子上、ラベル下でSDを差し込む。はみ出るのはダサい。
HDMIケーブルをモニタにつなげる。
USBキーボードをつなげる。
給電はUSBしかないのね。
microUSBケーブルで給電。ACは、初代Kindle Fireについてたのを使う。
赤いLEDが点灯して、起動メッセージがコンソールに流れる。他のLEDも点灯や点滅をはじめた。
遅い... SDが遅いのか、SoCが非力なのか。
起動途中のメッセージでEnter入れるとシェル出るみたいな表示がある。
Enter入れるとシェルに落ちた。
uciコマンドで現在の設定のバックアップを取る。
# cd /root # uci show > setting.def
このままではどこにも接続されていないので、何もできない。
NICはLANに設定されていて、DHCPサーバーが動作している。
コンソールのキーボードが英語デフォルトなので、パイプが入力できない。
不便なので、なんとかする...
ダメだな。何もツールがないようだ。
はやいところリモートで入れるようにしないと。
コンソールから、uciコマンドで、NICの設定がサーバー構成になっているのを、クライアントに切り替える。
root@OpenWrt:~# uci set network.lan.proto=dhcp root@OpenWrt:~# uci commit root@OpenWrt:~# /etc/init.d/network restart
本体NICを外につながっているケーブルを接続する。
コンソールには、インターフェイスがアップしたメッセージしか出ない。
ifconfigで取れたIPアドレスを見る。br-lanに割り当てられるようだ。
なんでeth0でないのかと思ったら、デフォルト設定では、br-lanとeth0はブリッジ設定がされている。eth0はusb-bcm2708のUSB NICにつながっているようだ。br-lanは、内蔵HUBかなんかだろうか?
先ほど調べたアドレスでtelnetする。
$ telnet 192.168.51.87 Trying 192.168.51.87... Connected to 192.168.51.87. Escape character is '^]'. === IMPORTANT ============================ Use 'passwd' to set your login password this will disable telnet and enable SSH ------------------------------------------ BusyBox v1.23.2 (2016-01-31 10:28:42 CET) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- CHAOS CALMER (15.05.1, r48532) ----------------------------------------------------- * 1 1/2 oz Gin Shake with a glassful * 1/4 oz Triple Sec of broken ice and pour * 3/4 oz Lime Juice unstrained into a goblet. * 1 1/2 oz Orange Juice * 1 tsp. Grenadine Syrup ----------------------------------------------------- root@OpenWrt:/#
とりあえず、有線NATルーターにしてみる。
ドライバ類が何も入ってないので、追加しないとUSB-NICが使えない。
手元にあるのは、ASIXのチップが乗ったUSB-CDC Etherのドングル。台湾のビリオントンのもの。
こいつのドライバを入れる。
パッケージリストを最新に更新する。
root@OpenWrt:/# opkg update Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_base. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/Packages.sig. Signature check passed. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/luci/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_luci. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/luci/Packages.sig. Signature check passed. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/packages/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_packages. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/packages/Packages.sig. Signature check passed. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/routing/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_routing. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/routing/Packages.sig. Signature check passed. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/telephony/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_telephony. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/telephony/Packages.sig. Signature check passed. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/management/Packages.gz. Updated list of available packages in /var/opkg-lists/chaos_calmer_management. Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/management/Packages.sig. Signature check passed.
現在インストールされているパッケージのリストはこんな感じ。
root@OpenWrt:/# opkg list_installed base-files - 157.2-r48532 brcm2708-gpu-fw - 20150210-1 busybox - 1.23.2-1 dnsmasq - 2.73-1 dropbear - 2015.67-1 firewall - 2015-07-27 fstools - 2016-01-10-96415afecef35766332067f4205ef3b2c7561d21 ip6tables - 1.4.21-1 iptables - 1.4.21-1 jshn - 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb jsonfilter - 2014-06-19-cdc760c58077f44fc40adbbe41e1556a67c1b9a9 kernel - 3.18.23-1-f3144d3f6bd4032509c8ac6728e75f4b kmod-hid - 3.18.23-1 kmod-hid-generic - 3.18.23-1 kmod-input-core - 3.18.23-1 kmod-input-evdev - 3.18.23-1 kmod-ip6tables - 3.18.23-1 kmod-ipt-conntrack - 3.18.23-1 kmod-ipt-core - 3.18.23-1 kmod-ipt-nat - 3.18.23-1 kmod-ipv6 - 3.18.23-1 kmod-lib-crc-ccitt - 3.18.23-1 kmod-nf-conntrack - 3.18.23-1 kmod-nf-conntrack6 - 3.18.23-1 kmod-nf-ipt - 3.18.23-1 kmod-nf-ipt6 - 3.18.23-1 kmod-nf-nat - 3.18.23-1 kmod-nf-nathelper - 3.18.23-1 kmod-nls-base - 3.18.23-1 kmod-ppp - 3.18.23-1 kmod-pppoe - 3.18.23-1 kmod-pppox - 3.18.23-1 kmod-slhc - 3.18.23-1 kmod-sound-arm-bcm2835 - 3.18.23-1 kmod-sound-core - 3.18.23-1 kmod-usb-core - 3.18.23-1 kmod-usb-hid - 3.18.23-1 libblobmsg-json - 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb libc - 0.9.33.2-1 libgcc - 4.8-linaro-1 libip4tc - 1.4.21-1 libip6tc - 1.4.21-1 libiwinfo - 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371 libiwinfo-lua - 2015-06-01-ade8b1b299cbd5748db1acf80dd3e9f567938371 libjson-c - 0.12-1 libjson-script - 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb liblua - 5.1.5-1 libnl-tiny - 0.1-4 libubox - 2015-11-08-10429bccd0dc5d204635e110a7a8fae7b80d16cb libubus - 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e libubus-lua - 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e libuci - 2015-08-27.1-1 libuci-lua - 2015-08-27.1-1 libxtables - 1.4.21-1 lua - 5.1.5-1 luci - git-16.018.33482-3201903-1 luci-app-firewall - git-16.018.33482-3201903-1 luci-base - git-16.018.33482-3201903-1 luci-lib-ip - git-16.018.33482-3201903-1 luci-lib-nixio - git-16.018.33482-3201903-1 luci-mod-admin-full - git-16.018.33482-3201903-1 luci-proto-ipv6 - git-16.018.33482-3201903-1 luci-proto-ppp - git-16.018.33482-3201903-1 luci-theme-bootstrap - git-16.018.33482-3201903-1 mtd - 21 netifd - 2015-12-16-245527193e90906451be35c2b8e972b8712ea6ab odhcp6c - 2015-07-13-024525798c5f6aba3af9b2ef7b3af2f3c14f1db8 odhcpd - 2015-11-19-01d3f9d64486ac1daa144848944e877e7f0cb762 opkg - 9c97d5ecd795709c8584e972bfdf3aee3a5b846d-9 ppp - 2.4.7-6 ppp-mod-pppoe - 2.4.7-6 procd - 2015-10-29.1-d5fddd91b966424bb63e943e789704d52382cc18 rpcd - 2015-01-10-f00890cd6eb47ad9bb5da0fb6c50aedc8406e7c5 ubox - 2015-11-22-c086167a0154745c677f8730a336ea9cf7d71031 ubus - 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e ubusd - 2015-05-25-f361bfa5fcb2daadf3b160583ce665024f8d108e uci - 2015-08-27.1-1 uhttpd - 2015-11-08-fe01ef3f52adae9da38ef47926cd50974af5d6b7 uhttpd-mod-ubus - 2015-11-08-fe01ef3f52adae9da38ef47926cd50974af5d6b7 usign - 2015-05-08-cf8dcdb8a4e874c77f3e9a8e9b643e8c17b19131
インストール可能なパッケージのリストからASIX用のkmodを探す。
root@OpenWrt:/# opkg list | grep asix kmod-usb-net-asix - 3.18.23-1 - Kernel module for USB-to-Ethernet Asix convertors kmod-usb-net-asix-ax88179 - 3.18.23-1 - Kernel module for USB-to-Ethernet ASIX AX88179 based USB 3.0/2.0 to Gigabit Ethernet adapters.
インストールする。関連する依存パッケージもインストールされる。
root@OpenWrt:/# opkg install kmod-usb-net-asix kmod-usb-net-asix-ax88179 Installing kmod-usb-net-asix (3.18.23-1) to root... Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/kmod-usb-net-asix_3.18.23-1_brcm2708.ipk. Installing kmod-libphy (3.18.23-1) to root... Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/kmod-libphy_3.18.23-1_brcm2708.ipk. Installing kmod-usb-net (3.18.23-1) to root... Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/kmod-usb-net_3.18.23-1_brcm2708.ipk. Installing kmod-mii (3.18.23-1) to root... Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/kmod-mii_3.18.23-1_brcm2708.ipk. Installing kmod-usb-net-asix-ax88179 (3.18.23-1) to root... Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2708/packages/base/kmod-usb-net-asix-ax88179_3.18.23-1_brcm2708.ipk. Configuring kmod-libphy. Configuring kmod-mii. Configuring kmod-usb-net. failed to find a module named usbnet Configuring kmod-usb-net-asix-ax88179. Configuring kmod-usb-net-asix.
ドライバモジュールを追加したので再起動する。
root@OpenWrt:/# reboot
telnetで再接続して作業を継続する。
起動メッセージには見えている。
root@OpenWrt:/# dmesg | grep six [ 9.689286] asix 1-1.3:1.0 eth1: register 'asix' at usb-bcm2708_usb-1.3, ASIX AX8817x USB 2.0 Ethernet, 00:10:60:2b:a4:05 [ 9.706144] usbcore: registered new interface driver asix
NICにケーブルを差し込む。
コンソール表示に、USBまわりがなんか頻繁にリセットされている状況が出てくる。
パワー足りてないか...
とりあえず、USBキーボードを外してみる。
頻度は下がったけど、リセットはおさまらない。
電源を1Aにパワーアップすることにする。
安定した感じ。
追加したUSB-NICは、eth1として認識しているようだ。
root@OpenWrt:/# dmesg | grep eth1 [ 9.699322] asix 1-1.3:1.0 eth1: register 'asix' at usb-bcm2708_usb-1.3, ASIX AX8817x USB 2.0 Ethernet, 00:10:60:2b:a4:05
いまのところ、設定がないのでOpenWRTでは認識していない。
ここからの設定はブラウザでLuciを使った設定のほうが楽そうなので、そちらに切り替える。
同じセグメントに接続されたMacのブラウザから、ターゲットのIPアドレスを指定して開く。
Luciのログイン画面が表示される。
「No password set!」と出てくるので、その下のリンク「Go to password configuration...」からパスワードを設定する。
設定すると、telnetの接続ができなくなり、sshでの接続に限定される。
sshからは、rootでの接続になってしまうようなので、パスワード認証は不許可にして、自分の端末の公開鍵を登録して、鍵認証でないとログインできないようにしておく。
Router Passwordを入力。
SSH Accessの設定を行う。
interfaceはunspecified。Password authenticationとAllow root logins with passwordのチェックは外す。SSH-Keysに公開鍵をコピペする。
Save&Applyボタンを押す。
telnetで接続できなくなったのを確認する。
$ telnet 192.168.51.87 Trying 192.168.51.87... Connected to 192.168.51.87. Escape character is '^]'. Login failed. Connection closed by foreign host.
sshで公開鍵認証で接続できるのを確認する。
$ ssh root@192.168.51.87 The authenticity of host '192.168.51.87 (192.168.51.87)' can't be established. RSA key fingerprint is 5c:5e:97:8a:e3:1a:02:ad:ca:07:94:99:8d:51:65:7c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.51.87' (RSA) to the list of known hosts. BusyBox v1.23.2 (2016-01-31 10:28:42 CET) built-in shell (ash) _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M ----------------------------------------------------- CHAOS CALMER (15.05.1, r48532) ----------------------------------------------------- * 1 1/2 oz Gin Shake with a glassful * 1/4 oz Triple Sec of broken ice and pour * 3/4 oz Lime Juice unstrained into a goblet. * 1 1/2 oz Orange Juice * 1 tsp. Grenadine Syrup ----------------------------------------------------- root@OpenWrt:~#
Luciから、Network->Intafacesの設定を開く。
現在はLANセグメントに、br-lanが有効になっている。
追加したUSB-NICをWAN側に設定していく。
Add new intarface... ボタンを押す。
Name of the new interfaceはWANに。
Protocol of the new interfaceは、DHCP Clientに。
Cover the following interfaceをeth1にして、Submitボタンを押す。
Interfaces - WANに遷移するので、Firewall SettingsだけWANにチェックを入れて、Save&Applyボタンを押す。
Interfacesに戻るとWANにIPアドレスが割り当てられているのがわかる。
LAN側を変更するので、設定を仮変更する。
まずWANのFirewallの設定を変更しておく。
・Input reject->accept
・Output accept そのまま
・Forward reject->accept
・Masquerading チェック外す
・MSS clamping チェック外す
Save&Applyボタンを押す。
Luciの接続アドレスをUSB NIC側のものに変更する。
LAN側の設定をDHCPサーバーに変更する。
NICのケーブルを外しておく。
InterfacesからLANのEditボタンを押す。
General SetupのProtocolをStatic addressに変更し、Switch protocolボタンを押す。
IPv4 addressを192.168.128.1に。
IPv4 netmaskを255.255.255.0に。
IPv4 gatewayを192.168.128.1に。
IPv4 broadcastを255.255.255.255に。
DHCP Serverの設定はデフォルトのままさわらない。
Save&Applyボタンを押す。
LAN側にMacのケーブルを接続しなおして、192.168.128.1を宛先にLuciを開く。
WAN側のFirewall設定をもとにもどしておく。
これでNATルーターとしての構成はできた。
Mac側からのNAT接続も問題なく外に出られる。
しかし、ASIXドライバのMIIが応答がなくなって、しょっちゅうリセットしている。
これはよくない感じだ。
ASIXドライバは安定していると思うのだけど、このままでは使えない。
電気足りないか...
カニのNICとかなら通るのかねぇ...