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くらい出ます。