armボードESPRESSObinで、DS-Liteを使うルータを作成した記録。
まずポチる
自分の場合は、米amazonでポチりました。ついでに、12V電源と32GBマイクロSDカードも一緒に。USB給電もできますが、SATAデバイスを使う場合は、12V電源を使わないと、SATAの電源が12Vなのでこれが給電できないのではないかと思います。
OSインストール
OSには、Ubuntu16.04LTSを使用。ここを参考に、マイクロUSBへイメージをコピーします。
シリアルコンソール
起動の様子は、Linuxからだと、Kermitを使ってシリアルコンソールにつなげてみることができます。
(別OSから) $ sudo apt install ckermit
(別OSから) $ sudo kermit
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 (64-bit)
Copyright (C) 1985, 2011,
Trustees of Columbia University in the City of New York.
Type ? or HELP for help.
(/root/) C-Kermit>
(/root/) C-Kermit>set line /dev/ttyUSB0
(/root/) C-Kermit>set speed 115200
/dev/ttyUSB0, 115200 bps
(/root/) C-Kermit>set carrier-watch off
(/root/) C-Kermit>set flow-control none
(/root/) C-Kermit>set handshake none
(/root/) C-Kermit>set prefixing all
(/root/) C-Kermit>set streaming off
(/root/) C-Kermit>set parity none
(/root/) C-Kermit>connect
Connecting to /dev/ttyUSB0, speed 115200
Escape character: Ctrl-\ (ASCII 28, FS): enabled
Type the escape character followed by C to get back,
or followed by ? to see other options.
----------------------------------------------------
(ここでESOPRESSObinの電源ON)
不安定
自分の場合は、マイクロSDカードから起動後、すぐカーネルクラッシュして全然安定しませんでした。なので、試しにUSBメモリから起動したところ、嘘のように安定しました。
SDカードへOSをインストールしたときと動揺の手順でUSBメモリへOSをインストールし、こちらの手順に従い、USBから起動します。
USB起動をデフォルトで行うようにするには、run bootusbの前に、saveを打てば良いです。
カーネルビルド
その後、メインラインのkernel-4.14からSDカードもサポートされるようになったので、今ではメインラインのカーネルをビルドして、SDカードから起動して使用しています。
DS-Lite
ネットワークデバイス設定
ネットワークに接続するには、まずデバイスの設定が必要です。ESPRESSObinのネットワークデバイスは、通常のEthernetデバイスではなく、スイッチデバイスが使われているためちょっと特殊です。
eth0上にwanというデバイスを構築します。また、内部ネットワーク用に、lan0を作ってブリッジを設定します。/etc/network/interfaceは次のとおりです。
auto eth0
iface eth0 inet static
address 0.0.0.0
mtu 3000
auto wan
iface wan inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
auto lan0
iface lan0 inet static
address 0.0.0.0
# auto lan1
# iface lan1 inet static
# address 0.0.0.0
auto br0
iface br0 inet static
address 192.168.10.1
network 192.168.10.0
netmask 255.255.255.0
broadcast 192.168.10.255
dns-domain hoge.fuga.com
bridge_ports lan0 lan1
これは、DHCPでなくスタティックアドレスの設定例です。なお、Mac addressは、同じものが割り振られるようです。私は、lan1を有効にしたらマックアドレスが被っているせいか、おかしな動きをしたので有効にしていません。
IPv6の取得
ipv6のアドレスの取得には、dibbler-clientというものを使用しました。
$ sudo apt install dibbler-client
設定(/etc/dibbler/client.conf)は、以下の通りです。
log-mode short
log-level 7
iface wan {
# ask for address
ia
pd
}
確か、サービスを有効にしてIPアドレスを取得したのだと思います。
$ sudo service dibbler-client start
これで、IPv6がwan側に設定されるので、メモします。確か、ifconfigで見たと思います。
$ ifconfig wan
wan Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
inet6 addr: yyyy::yyyy:yyyy:yyyy:yyyy/64 Scope:Link
inet6 addr: xxxx:xxxx:xxxx:x:xxxx:xxxx:xxxx:xxxx/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:12662357 errors:0 dropped:0 overruns:0 frame:0
TX packets:6227358 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13480241728 (13.4 GB) TX bytes:1420375188 (1.4 GB)
この中のinet6...Scope:Globalのほうが、外部ネットワークに接続されているipv6のアドレスです。
defaut gwは、traceroute6で調べました。
traceroute6 www.google.co.jp
traceroute to www.google.co.jp (2404:6800:400a:806::2003), 30 hops max, 80 byte packets
1 zzzz:zz:zzzz:z:zzz:zzzz:zzzz:zzzz (zzzz:zz:zzzz:z:zzz:zzzz:zzzz:zzzz) 0.612 ms 0.699 ms 0.849 ms
2 * * *
3 * * *
4 * * *
:
このipv6のアドレスは半固定らしく、変わることもあるようですが、これを固定アドレスで先程のinterfaceに設定してしまいました。これは自己責任でお願いします。何かいい方法があったら教えてください。
auto wan
iface wan inet6 static
address xxxx:xxxx:xxxx:x:xxxx:xxxx:xxxx:xxxx
netmask 64
gateway zzzz:zz:zzzz:z:zzz:zzzz:zzzz:zzzz
IPv4→IPv6の変換の部分は、/etc/network/if-up.d/000iptunnelなどとして書くのが本当のような気がしますが、うまく行かなかったので、/etc/rc.localに書きました。下に出てくるIPx6のxxxのアドレスは、グローバルアドレスと同じになります。
REMOTE='2404:8e00::feed:100'
LOCAL='xxxx:xxxx:xxxx:x:xxxx:xxxx:xxxx:xxxx'
# echo $LOCAL
# IPIP6 tunnel linkup
ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev wan
ip link set dev ip6tnl1 up
ifconfig ip6tnl1 mtu 3000
# IPv4 routing
route add default dev ip6tnl1
これで、設定は完了です。リブートしてもつながることを確認しましょう。
この設定で、私の場合は一番いいときで200Mbpsくらい出ます。
