ZOOT NATIVE (DS-Lite)でネット接続


インターリンク(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とアクセスキー1

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クライアントを停止します2

$ 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トンネルの設定には、トンネルの出口に当たるゲートウェイ(AFTR3)のIPv6アドレスが必要です。

AFTRのIPv6アドレスは、NVR510の設定マニュアルに書かれていました。ただしこのアドレスは固定ではなく予告なく変更されることがあるそうなので、接続できなくなった場合は設定を変更する必要があります4

私は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にすることは通常危険ですが、トンネル出口でアドレス変換が行われていて外から入ってくる通信はないので良いことにしました5

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などで動画を見るのに全く支障がありません6。今回測定してみて初めてこんなに速度が低下するのかと気がついたくらいです。

そうすると普通に使える速度なら満足でIPv6の通信が不要なうちは、積極的にZOOT NATIVEに切り替える理由は見当たらない気がします。ZOOT NATIVEは常にフルスピードを求めるユーザ向けということでしょうか。せっかく2ヶ月の無料体験期間を設けてくれているのにごめんなさい。

参照と脚注

  1. フレッツ光のお客様IDとアクセスキーは、フレッツ光を申し込んだ時の書類に記載されていました。

  2. 単純に固定アドレスを使いたいだけの場合は、DHCPクライアントを停止する必要はありません。/etc/dhcpcd.confに固定アドレスを使用するための設定を加えるだけで十分です。今回は、トンネルを掘るシェルスクリプトを起動したかったのでこのようにしました。

  3. AFTRは、Address Family Transition Routerの略。

  4. AFTRのIPv6のアドレスが変わった時、IPv6での通信だけで新しいAFTRを探せるのかな?

  5. 外から入ってくる通信は、全て出て行った通信への返信なのでルータを通過させて問題はない。

  6. ZOOT NEXTとAsahiNetは問題ありませんが、WakWakを使っていた時は非常に通信速度が落ちて動画配信サービスをまともには使えませんでした。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です