インターリンク(Interlink)がZOOT NATIVEというIPv6 IPoEサービスを開始しました。この方式にするとIPv4のPPPoEよりも速くなる(遅くならない)という話なので試してみました。
ZOOT NATIVEは基本的にIPv6のサービスですが、今回はトンネルを作成してIPv4でInternetに接続してみます。
IPv6で通信するための設定方法は、IPv6とIPv4のデュアルスタックで接続にあります。この方法は、ひかり電話契約のないユーザにオススメの方法です。ひかり電話契約がある場合は、DHCPv6-PDでIPv6のサブネットワークを作成のように素直にネットワークを接続する方法もあります。
環境
- フレット光ネクスト ファミリー・ハイスピードタイプ(NTT西日本)
- ひかり電話オプション契約あり
- Raspberry Pi B+ Raspbian(Debian jessei)
Raspberry Piの内蔵Ethernet(eth0)にLANを接続し、USB 2.0接続の100BASE-TX Ethernetアダプター(eth1)にフレッツ光ネクストのルータ(PPPoEブリッジ機能を有効)を接続しています。
パソコンのUbuntu 16.04でも、ここで紹介した方法で接続できました。
ZOOT NATIVEの申し込み
申し込みは、インターリンクのWebページから簡単に行えました。ただし事前に次のものを準備しておく必要があります。
- クレジットカード
- フレッツ光のお客様IDとアクセスキー
4月5日の朝に申し込んで、翌4月6日の朝に使用できるようになったというメールが届きました。
設定方法
Raspberry Piを通信の中継だけでなく一般的な市販ルータが持つDNS機能とアドレスの自動割当機能を持たせます。そのためIPv6上でIPv4を使うDS-Liteトンネルの作成以外に、DNSやDHCPサーバ用の設定が入っています。
DNS(unbound)をインストール
まず最初にLANのDNS(キャッシュ)となるunbound
をインストールします。ISPのDNSを使用できるならば、このステップは不要です。
$ sudo apt-get install unbound
unbound
は、/etc/unbound/unbound.conf.d/
にある*.confを起動時に設定ファイルとして読み込みます。そこでunbound-local.conf
というファイルを作成して設定を書き込みます。
/etc/unbound/unbound.conf.d/unbound-local.conf
server:
#interface: 0.0.0.0
interface: 127.0.0.1
interface: 10.0.0.254
access-control: 10.0.0.0/24 allow
IPv6のアドレスにはbindしないで、LANと自分自身からの問い合わせにのみ答えるようにしました。
ルータのアドレスを固定
ルータのIPv4アドレスは、LAN内のデフォルトルートとなるので固定されている必要があります。そこでDHCPクライアントを停止して、LANに接続しているeth0のIPv4アドレスを指定します。
まずはDHCPクライアントを停止します。
$ sudo systemctl stop dhcpcd.service
$ sudo systemctl disable dhcpcd.service
固定アドレスは、/etc/network/interfaces
に設定ます。アドレスと同時にルータ自身が参照するDNS(自分自身)を指定します。
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.0.254
netmask 255.255.255.0
dns-nameservers 127.0.0.1
dns-search example.jp
これで再起動してもアドレスは変わらず、常に同じIPv4アドレスを使うようになります。
トンネルの出口確認
IPv4で通信できるようにするDS-Liteトンネルの設定には、トンネルの出口に当たるゲートウェイ(AFTR)のIPv6アドレスが必要です。
AFTRのIPv6アドレスは、NVR510の設定マニュアルに書かれていました。ただしこのアドレスは固定ではなく予告なく変更されることがあるそうなので、接続できなくなった場合は設定を変更する必要があります。
私はNTT西日本を使っているので、AFTRとして2404:8e01::feed:100
または2404:8e01::feed:101
を使用します。
実際にAFTRと通信できるかping6
コマンドで確認しておきます。
$ ping6 -c 2 2404:8e01::feed:100
PING 2404:8e01::feed:100(2404:8e01::feed:100) 56 data bytes
64 bytes from 2404:8e01::feed:100: icmp_seq=1 ttl=58 time=5.26 ms
64 bytes from 2404:8e01::feed:100: icmp_seq=2 ttl=58 time=4.97 ms
--- 2404:8e01::feed:100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 4.978/5.120/5.262/0.142 ms
ufwをインストール
ルータなので不要な通信を制限します。そのため通信を制限するufw
をインストールします。ufw
を使用しない場合は、IPv4をインターフェイス間で転送するように/etc/sysctl.conf
を編集してIPv4をルーティングするようにします。
$ sudo apt-get install ufw
/etc/ufw/ufw.conf
ENABLED=yes
# allow ssh connection
# これがないとRaspberry PiにLANからsloginできなくなる。
ufw allow 22/tcp
IPv4をルーティングするように設定します。また必要ならば不要な通信を制限する設定を追加します。
/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
/etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
DEFAULT_INPUT_POLICY="DROP"
DEFAULT_OUTPUT_POLICY="ACCEPT"
転送ルーティングのポリシーをACCEPTにすることは通常危険ですが、トンネル出口でアドレス変換が行われていて外から入ってくる通信はないので良いことにしました。
ufw
の自分宛ルーティングポリシーはDROPとなっています。そこで/etc/ufw/before.rules
を編集して、LANからDNS(port 53)への通信を許可する次のルールを最後のCOMMITの前に追加します。
# 以下を追加する。
# Accpet for DNS from LAN
-A ufw-before-input -i eth0 -p udp --dport 53 -j ACCEPT
-A ufw-before-input -i eth0 -p tcp --dport 53 -j ACCEPT
ufw
の設定がすんだら、DS-LiteでIPv4をトンネルするために必要なモジュールを起動時に読み込むように設定ます。
/etc/modules
ip6_tunnel
ここまできたら、一旦再起動して設定を反映させておきます。
DS-Liteトンネルを作成
DS-Liteトンネルは、DS-Lite(RFC6333)対応ルータをLinux (Raspberry Pi) で作るのシェルスクリプトを使って作成します。
/etc/network/dig-tunnel.sh
#!/bin/bash
# Ref. http://techlog.iij.ad.jp/contents/dslite-raspi
# gw.transix.jp
REMOTE='2404:8e01::feed:100'
#IFACE='eth1'
IFACE=$1
# get my IPv6 address
for i in $(seq 0 9); do
LOCAL=`ip -6 addr show $IFACE scope global |grep inet6 | awk '{print $2}'`
if [[ $LOCAL != '' ]]; then
break
fi
sleep 1
done
if [[ $LOCAL == '' ]]; then
exit
else
echo $LOCAL
fi
# IPIP6 tunnel linkup
ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev $IFACE
ip link set dev ip6tnl1 up
# IPv4 routing
route delete default
route add default dev ip6tnl1
それでは実際にスクリプトを起動してトンネルを掘ってみます。
$ sudo ifconfig up eth1
$ sudo /etc/network/dig-tunnel.sh eth1
トンネルが掘れているか確認します。
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether b8:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 10.0.0.254/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
link/tunnel6 :: brd ::
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet6 2409:xxx::xxxx/64 scope global mngtmpaddr dynamic
valid_lft 14125sec preferred_lft 12325sec
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
5: ip6tnl1@eth1: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1
link/tunnel6 2409::xxx peer 2404:8e01::feed:100
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default * 0.0.0.0 U 0 0 0 ip6tnl1
10.0.0.0 * 255.255.255.0 U 0 0 0 eth0
$ ping -c 2 www.yahoo.co.jp
PING edge.g.yimg.jp (183.79.248.252) 56(84) bytes of data.
64 bytes from 183.79.248.252: icmp_seq=1 ttl=59 time=4.35 ms
64 bytes from 183.79.248.252: icmp_seq=2 ttl=59 time=4.92 ms
--- edge.g.yimg.jp ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1003ms
rtt min/avg/max/mdev = 4.357/4.640/4.924/0.291 ms
トンネルの自動作成
問題なく接続できることを確認したら、起動した時に自動的にトンネルを掘ってルータとして機能するようにします。
トンネル作成は、/etc/network/interfaces
に設定ます。
# これまでの設定に追加
auto eth1
iface eth1 inet manual
pre-up /sbin/ifconfig eth1 up
post-up /etc/network/dig-tunnel.sh eth1
ここで再起動して自動的にトンネルが掘れているか確認します。
DHCPサーバをインストール
最後にLAN内の端末を自動設定できるようにDHCPサーバをインストールします。
$ sudo apt-get install isc-dhcp-server
/etc/default/isc-dhcp-server
# eth0(LAN)にのみDHCPサーバとして働く。
#INTERFACES=""
INTERFACES="eth0"
/etc/dhcp/dhcpd.conf
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
option domain-name "example.jp";
option domain-name-servers 10.0.0.254;
option routers 10.0.0.254;
subnet 10.0.0.0 netmask 255.255.255.0 {
pool {
range 10.0.0.1 10.0.0.10;
}
}
通信速度を測定
Raspberry Pi B+をルータとしたDS-Lite接続でどのくらいの速度が出るかBNRスピードテストでテストしてみました。
Ras Pi |
Ubuntu 16.04 |
IPv4 PPPoE |
22.53Mbps(n=3) |
91.02Mbps(n=6) |
88.54Mbps(n=2) |
テストは一番スピードが出ると予想される早朝に測定しました。Ras PiとUbuntu 16.04はZOOT NATIVEで、IPv4 PPPoEはZOOT NEXTの結果です。
Raspberry Pi B+をルータにした場合は、USB 2.0接続のEthernetアダプターが100BASE-TXのためかCPUの性能が律速なのか、DS-Liteトンネルの性能をフルには発揮できていないようです。
フレッツ光ネクストのハイスピードタイプはPPPoEの通信速度に制限がかけられているという話で、DS-Liteにするとその制限がなくなり本来のIPv6による通信速度に近づくという話でした。しかし今回は、DS-Liteによる通信では、期待されたPPPoEを大きく越えるような高速な通信はできませんでした。
DS-LiteトンネルとPPPoEであまり差がなかった原因は、ルータにしているパソコンの性能が律速になっている可能性はあります。しかしこのパソコンはCore 2 Duoマシンで、速度測定中の負荷を見てもそれほど忙しくしているようには見えません。
ZOOT NATIVEはオススメ?
スピード命で固定のIPv4アドレスが不要ならば、ZOOT NATIVEオススメかな。でも積極的にZOOT NEXTから乗り換えるという程でもないかな。
ゴールデンタイムはZOOT NATIVEの圧勝
残念ながら私の環境ではPPPoEを大きく越える通信速度は見られませんでした。ただしDS-Liteによるトンネルのメリットは、最高速度だけでなくゴールデンタイムでも通信速度が低下しないという点です。
多くの人がネットを使うだろう土曜日の夜にZOOT NEXT(PPPoE)とZOOT NATIVE(IPoE + DS-Lite)で通信速度を測定してみました。なおルータにはRaspberry Piではなく、Ubuntu 16.04マシンを使用しています。
回線 |
平日の早朝 |
土曜日の夜 |
ZOOT NEXT |
98.6Mbps(n=3) |
3.37Mbps(n=8) |
ZOOT NATIVE |
83.4Mbps(n=3) |
86.8Mbps(n=8) |
このようにPPPoEであるZOOT NEXTに見られた夜間の速度低下が全く見られませんでした。信じられなくて、NETXとNATIVEを交互に8回も測定してしまいました。ただし速度低下が見られなかったのは、まだサービス開始から時間が経っていないのユーザが少ないからという可能性があります。
ZOOT NEXTのままで十分
ZOOT NATIVEの欠点は、IPv4の固定アドレスオプションが無いことです。また接続料金が倍になります。
ZOOT NEXT |
ZOOT NATIVE |
1,080円 |
2,160円 |
現在の通信速度に問題があるならば、料金が倍になったとしてもこれよりも高い設定のISPは普通にあるので乗り換える価値は非常にあります。しかし夜間に通信速度が低下するとは言っても、Huluなどで動画を見るのに全く支障がありません。今回測定してみて初めてこんなに速度が低下するのかと気がついたくらいです。
そうすると普通に使える速度なら満足でIPv6の通信が不要なうちは、積極的にZOOT NATIVEに切り替える理由は見当たらない気がします。ZOOT NATIVEは常にフルスピードを求めるユーザ向けということでしょうか。せっかく2ヶ月の無料体験期間を設けてくれているのにごめんなさい。
参照と脚注