こちらの記事でIPv6接続によるフレッツ光インターネットアクセス高速化を試験したが、プロバイダ@niftyが提供するIPv6プラス(MAP-E)は専用機器が必要で、Cisco ASA5505、VyOS、Linux等ではシンプルなIPoE接続しかできず、IPv4サービスの高速化はできなかった。
日常的に使用するサービス・Webサイトの大部分はIPv4アクセスが必要となるため、プロバイダZOOT NATIVE(インターリンク)のDS-Liteサービスを使用してIPv4 over IPv6 トンネルの環境を構築する。
なお、ZOOT NATIVEのDS-Liteサービスは、インターネットマルチフィードが提供するtransixへの接続を可能とするプロバイダ的なサービスとなっている。
事前準備 ZOOT NATIVE(インターリンク)契約
今回使用するZOOT NATIVEの契約に関してはこちらを参照。2ヶ月の無料お試し期間を利用してDS-Liteによるインターネット速度改善を検証する。
この記事の中では、正式サポートのブロードバンドルータでの設定例まで記載されているが、今回は汎用性を考慮してLinux (CentOS 7)での接続を試験する。
- @niftyのv6オプション解除が必要
- ネットワーク構成
- NIC構成
- NICのFirewall設定
- SELinux無効化
- CentOSでのルーティング有効化
- IPv6アドレス・疎通確認
- IPv4 over IPv6トンネル設定
- 疎通確認
- 速度比較
- IPoEも使用可能
- まとめ - ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する
@niftyのv6オプション解除が必要
ZOOT NATIVEの新規契約時には、他のプロバイダのIPv6接続オプションを使用しているとエラーになる。事前にオプションを解約しておく必要がある。v6プラスについても同様。
エラーはこういった内容。
私の場合は@niftyのv6接続オプションを使用中だったため、サポートサイトより解約した。処理に時間を要する場合があるので、早めに申し込みをしておくといい。@niftyだと、夜12時過ぎに当日解約で申し込み、朝起きたらサービスが解除されていた。
ネットワーク構成
一般的にONUは1NIC構成のため、複数のルータで接続を切り替えて試験するのは面倒だ。そのため、私はフレッツONUを一旦スイッチ(Catalyst2960)に接続し、フレッツONU接続用のVLANを作成することで自由度を増している。
今回は従来のCisco ASA5505のPPPoE通信を残したまま、Linux ( CentOS ) をoutside (ONU) VLANに接続してIPv6通信をする。
NIC構成
CentOSのNIC設定は以下の通りとする。設定はnmtui (Network-Manager)でも可能。
- inside側NIC
自宅LANセグメントでPCからのデフォルトGWとなるインタフェース。IPアドレス・DNSは環境に合わせて適宜設定する。
$ sudo cat /etc/sysconfig/network-scripts/ifcfg-ens160 TYPE=Ethernet BOOTPROTO=none DEFROUTE=no IPV4_FAILURE_FATAL=yes IPV6INIT=yes IPV6_AUTOCONF=no IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens160 UUID=531a8e7d-07d1-4b71-9d27-96433ca6f8fc DEVICE=ens160 ONBOOT=yes DNS1=192.168.1.77 DNS2=8.8.8.8 DOMAIN=designet.local ZONE=trusted IPADDR=192.168.1.8 PREFIX=24 IPV6_PRIVACY=no
- outside側物理NIC
VMware ESXiの構成の制限より、outside側インタフェースはスイッチにtrunk接続する。物理インタフェースとしてはIPv4/v6アドレスは設定する必要はない。
$ sudo cat /etc/sysconfig/network-scripts/ifcfg-ens192 TYPE=Ethernet DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=no IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens192 UUID=05c28633-5849-4892-bdc0-08e69b574ac1 DEVICE=ens192 ONBOOT=yes ZONE=trusted PEERDNS=yes PEERROUTES=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_PRIVACY=no
- outsideサブインタフェース
ONU-VLANに接続するVLANサブインタフェース。IPv4アドレスは持たず、IPv6アドレスはautoconfでRA・DHCPv6により取得する。これがトンネルのアンダーレイインタフェースとなる。
$ sudo cat /etc/sysconfig/network-scripts/ifcfg-outside VLAN=yes TYPE=Vlan PHYSDEV=ens192 VLAN_ID=99 REORDER_HDR=yes GVRP=no MVRP=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=outside UUID=9e20f5e5-3a57-4441-9b78-cb784c42d3fe ONBOOT=yes ZONE=trusted IPV6_PEERDNS=yes IPV6_PEERROUTES=yes
NICのFirewall設定
inside, outsideともにtrustで全許可とする。outside側はDHCPv6など制限することが望ましいが、一旦試験用として許可する。※サーバ自身のSSHなどのセキュリティ設定は個別に実施
$ sudo firewall-cmd --zone=trusted --change-interface=ens160 The interface is under control of NetworkManager, setting zone to 'trusted'. success $ sudo firewall-cmd --zone=trusted --change-interface=ens192 The interface is under control of NetworkManager, setting zone to 'trusted'. success $ sudo firewall-cmd --zone=trusted --change-interface=ens192.99 The interface is under control of NetworkManager, setting zone to 'trusted'. success
SELinux無効化
SELinuxを無効化する。有効になっているとルーティング(インタフェース・NICまたぎ)の通信が破棄されてしまう。
$ sudo setenforce 0 $ getenforce Permissive
CentOSでのルーティング有効化
Linuxはデフォルトではルーティング(インタフェース・NICまたぎ)の通信が許可されていない。設定変更してルーティングを有効化する。トンネル上での通信なのでIPv4のみでOK。IPv6もルーティングさせる場合はipv6の設定も変更する。
$ cat /proc/sys/net/ipv4/ip_forward 0 $ su - # echo 1 >/proc/sys/net/ipv4/ip_forward # cat /proc/sys/net/ipv4/ip_forward 1
なお、この設定方法だと再起動等で設定がリセットされるため、別途永続化する設定が必要。Linuxそのものの設定方法を参照。
IPv6アドレス・疎通確認
ZOOT NATIVEの契約が完了していることを確認した上で、outsideインタフェースでIPv6アドレスの取得、IPv6通信が可能となっていることを確認する。
- IPv6アドレス
2409:10:24e0:2000::/64
のIPv6グローバルアドレスを取得できている。
$ ip -6 a 15: ens192.99@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 inet6 2409:10:24e0:2000:b8bb:e04d:d79a:xxxx/64 scope global noprefixroute dynamic valid_lft 2591913sec preferred_lft 604713sec inet6 fe80::2fc9:356d:ef33:cee9/64 scope link valid_lft forever preferred_lft forever
- IPv6ネイバー
網内対向機器のリンクローカルアドレスが見えている。
$ ip -6 neigh fe80::221:d8ff:fe9a:d1c1 dev ens192.99 lladdr 00:21:d8:9a:d1:c1 router REACHABLE
- IPv6デフォルトルート
網内対向機器のリンクローカルアドレス宛にIPv6デフォルトルートが設定されている。設定されない場合はip -6 route add
で自分でも設定可能。
$ ip -6 r default via fe80::221:d8ff:fe9a:d1c1 dev ens192.99 proto static metric 400
- DS-Lite疎通確認
DS-Lite IPv4 over IPv6トンネルの対向機器宛の疎通確認をする。対向アドレスは2404:8e00::feed:100
(2017/9月現在) 今後変更の可能性あり。随時ZOOT NATIVE(インターリンク)、transix(インターネットマルチフィード)の最新情報を確認する。
$ ping6 2404:8e00::feed:100 PING 2404:8e00::feed:100(2404:8e00::feed:100) 56 data bytes 64 bytes from 2404:8e00::feed:100: icmp_seq=1 ttl=59 time=5.71 ms 64 bytes from 2404:8e00::feed:100: icmp_seq=2 ttl=59 time=2.71 ms ^C --- 2404:8e00::feed:100 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 2.719/4.216/5.713/1.497 ms $ traceroute6 2404:8e00::feed:100 traceroute to 2404:8e00::feed:100 (2404:8e00::feed:100), 30 hops max, 80 byte packets 1 2409:10:24e0:2000::fffe (2409:10:24e0:2000::fffe) 1.071 ms 1.061 ms 1.581 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 2404:8e00:feed:ff07::2 (2404:8e00:feed:ff07::2) 5.506 ms 10.365 ms 9.893 ms 7 2404:8e00::feed:100 (2404:8e00::feed:100) 17.772 ms 17.704 ms 11.916 ms
うまく接続できない場合はNetworkの再起動などを実施する。
(うまく接続できない場合) $ sudo systemctl restart network
IPv4 over IPv6トンネル設定
ちょうどいい設定例がなかったが、こちらを参考にしつつhelpで確認しながら設定した。
$ ip -6 tunnel help Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ] [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ] [ remote ADDR local ADDR ] [ dev PHYS_DEV ] [ encaplimit ELIM ] [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ] [ dscp inherit ] [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
- 設定コマンド
ipip6 (IPv4 over IPv6) トンネルを作成する。トンネル名はds-liteとする。(任意)
remoteはインターネットマルチフィードの対向機器アドレス、localはoutside側インタフェースにDHCPv6で割り当てられたIPアドレスを使用する。
$ sudo ip -6 tunnel add ds-lite mode ipip6 remote 2404:8e00::feed:100 local 2409:10:24e0:2000:b8bb:e04d:d79a:xxxx dev ens192.99
実際のトラフィックが流れるトンネルインタフェースのFW設定はdropで全拒否(戻りパケットは許可される)
$ sudo firewall-cmd --zone=drop --change-interface=ds-lite success
トンネルインタフェースを有効化する。
$ sudo ip link set dev ds-lite up
- IPv4ルーティング(デフォルトルート)設定
トンネルインタフェース宛にIPv4デフォルトルートを設定する。
$ sudo ip route add 0.0.0.0/0 dev ds-lite
- 状態確認
インタフェースの状態はこのようになる。
$ ip a 77: ds-lite@if4: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN qlen 1 link/tunnel6 2409:10:24e0:2000:b8bb:e04d:d79a:4a82 peer 2404:8e00::feed:100 inet6 fe80::9805:daff:fe9c:5d8b/64 scope link valid_lft forever preferred_lft forever $ ip -6 tunnel show ip6tnl0: ipv6/ipv6 remote :: local :: encaplimit 0 hoplimit 0 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000) ds-lite: ip/ipv6 remote 2404:8e00::feed:100 local 2409:10:24e0:2000:b8bb:e04d:d79a:4a82 dev if4 encaplimit 4 hoplimit 64 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000) $ ip r default dev ds-lite scope link 192.168.1.0/24 dev ens160 proto kernel scope link src 192.168.1.8 metric 100
疎通確認
IPv4でDS-Liteトンネル経由で通信できることを確認する。
逆引きDNSの結果より transix.jp (インターネットマルチフィード)を経由して通信できている。
$ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 ike-gw00.transix.jp (14.0.9.66) 3.063 ms 2.763 ms 2.737 ms 2 ike-bbrt10.transix.jp (14.0.9.65) 2.994 ms 2.927 ms 2.940 ms 3 210.173.176.243 (210.173.176.243) 3.799 ms 3.778 ms 3.747 ms 4 108.170.242.129 (108.170.242.129) 3.877 ms 108.170.242.97 (108.170.242.97) 4.138 ms 108.170.242.129 (108.170.242.129) 3.725 ms 5 108.170.236.179 (108.170.236.179) 4.530 ms 108.170.236.195 (108.170.236.195) 4.575 ms 216.239.54.21 (216.239.54.21) 4.622 ms 6 google-public-dns-a.google.com (8.8.8.8) 4.211 ms 4.377 ms 4.341 ms
inside側のMacからはCentOS7を経由して同様に通信できている。
Mac: $ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets 1 o-cent-rt01.designet.local (192.168.1.8) 2.404 ms 0.978 ms 1.001 ms 2 ike-gw00.transix.jp (14.0.9.66) 3.785 ms 3.350 ms 6.000 ms 3 ike-bbrt10.transix.jp (14.0.9.65) 4.419 ms 4.177 ms 4.495 ms 4 210.173.176.243 (210.173.176.243) 5.231 ms 4.827 ms 5.182 ms 5 108.170.242.193 (108.170.242.193) 5.537 ms 108.170.242.97 (108.170.242.97) 5.386 ms 5.042 ms 6 72.14.236.107 (72.14.236.107) 5.284 ms 209.85.143.51 (209.85.143.51) 5.706 ms 216.239.41.247 (216.239.41.247) 5.453 ms 7 google-public-dns-a.google.com (8.8.8.8) 5.106 ms 4.944 ms 5.183 ms
速度比較
従来の@nifty IPv4 PPPoEと、ZOOT NATIVE DS-Lite (IPv4 over IPv6)での通信速度を比較する。
従来IPv4 PPPoE
@nifty IPv4 PPPoE + Cisco ASA5505
-> 約5.8Mbps
ZOOT NATIVE DS-Lite
ZOOT NATIVE DS-Lite + CentOS7
-> 約66Mbps
十倍以上の速度が出ている。体感的にも各種通信が早くなった気がする。Cat2960がFastEthernet(100Mbps)モデルで、かつLinuxがワンアーム構成なので頭打ちになっているが、環境を整備すればさらなる速度向上が見込める。
traceroute
そもそものtracerouteでの中継装置の応答速度でも10倍程度の差が出ている。やはりIPv4 PPPoE網での遅延が大きかったということがわかる。
下記はIPv4 PPPoEでの測定結果。DS-Liteは前述の通り。
Mac: $ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets 1 asa5505 (192.168.1.5) 9.144 ms 1.565 ms 1.376 ms 2 133.160.170.13 (133.160.170.13) 36.559 ms 44.012 ms 174.003 ms 3 133.160.170.117 (133.160.170.117) 174.886 ms 130.233 ms 177.554 ms 4 133.160.148.209 (133.160.148.209) 189.458 ms 171.760 ms 87.412 ms 5 133.160.182.129 (133.160.182.129) 170.154 ms 133.160.182.41 (133.160.182.41) 143.139 ms 133.160.182.33 (133.160.182.33) 174.666 ms 6 210.173.176.245 (210.173.176.245) 43.980 ms 131.435 ms 37.133 ms 7 108.170.242.193 (108.170.242.193) 137.539 ms 38.798 ms 108.170.242.97 (108.170.242.97) 135.910 ms 8 209.85.255.33 (209.85.255.33) 177.034 ms 72.14.236.129 (72.14.236.129) 41.840 ms 209.85.255.173 (209.85.255.173) 37.989 ms 9 google-public-dns-a.google.com (8.8.8.8) 44.316 ms 49.897 ms 49.448 ms
IPoEも使用可能
ZOOT NATIVEはDS-LiteとともにIPoE方式でのIPv6ネイティブ通信もサポートしている。そのため、こちらの記事で書いたCisco ASA 5505 での IPv6 NAPT方式によるIPv6インターネットアクセスも可能。
まとめ - ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する
CentOS ( Linux ) を使用してフレッツ光回線からZOOT NATIVE経由で transix (インターネットマルチフィード) へ DS-Lite (IPv4 over IPv6) インターネット接続した。これにより、IPv4インターネット網への通信速度が10倍程度向上した。引き続き無料期間はDS-Liteを使用し、ZOOT NATIVEを継続利用するか検討する。