designetwork

ネットワークを軸としたIT技術メモ

ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する

f:id:daichi703n:20170903172344p:plain

こちらの記事でIPv6接続によるフレッツ光インターネットアクセス高速化を試験したが、プロバイダ@niftyが提供するIPv6プラス(MAP-E)は専用機器が必要で、Cisco ASA5505、VyOS、Linux等ではシンプルなIPoE接続しかできず、IPv4サービスの高速化はできなかった。

designetwork.hatenablog.com

日常的に使用するサービス・Webサイトの大部分はIPv4アクセスが必要となるため、プロバイダZOOT NATIVE(インターリンク)のDS-Liteサービスを使用してIPv4 over IPv6 トンネルの環境を構築する。

なお、ZOOT NATIVEのDS-Liteサービスは、インターネットマルチフィードが提供するtransixへの接続を可能とするプロバイダ的なサービスとなっている。

事前準備 ZOOT NATIVE(インターリンク)契約

今回使用するZOOT NATIVEの契約に関してはこちらを参照。2ヶ月の無料お試し期間を利用してDS-Liteによるインターネット速度改善を検証する。

gigazine.net

この記事の中では、正式サポートのブロードバンドルータでの設定例まで記載されているが、今回は汎用性を考慮してLinux (CentOS 7)での接続を試験する。

@niftyのv6オプション解除が必要

ZOOT NATIVEの新規契約時には、他のプロバイダのIPv6接続オプションを使用しているとエラーになる。事前にオプションを解約しておく必要がある。v6プラスについても同様。

エラーはこういった内容。

f:id:daichi703n:20170903163028p:plain

私の場合は@niftyのv6接続オプションを使用中だったため、サポートサイトより解約した。処理に時間を要する場合があるので、早めに申し込みをしておくといい。@niftyだと、夜12時過ぎに当日解約で申し込み、朝起きたらサービスが解除されていた。

ネットワーク構成

一般的にONUは1NIC構成のため、複数のルータで接続を切り替えて試験するのは面倒だ。そのため、私はフレッツONUを一旦スイッチ(Catalyst2960)に接続し、フレッツONU接続用のVLANを作成することで自由度を増している。

f:id:daichi703n:20170903171843p:plain

今回は従来のCisco ASA5505のPPPoE通信を残したまま、Linux ( CentOS ) をoutside (ONU) VLANに接続してIPv6通信をする。

NIC構成

CentOSNIC設定は以下の通りとする。設定はnmtui (Network-Manager)でも可能。

自宅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通信が可能となっていることを確認する。

2409:10:24e0:2000::/64IPv6グローバルアドレスを取得できている。

$ 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

網内対向機器のリンクローカルアドレスが見えている。

$ 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で確認しながら設定した。

linux-hacks.blogspot.jp

$ 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

f:id:daichi703n:20170903163444p:plain

ZOOT NATIVE DS-Lite

ZOOT NATIVE DS-Lite + CentOS7
-> 約66Mbps

十倍以上の速度が出ている。体感的にも各種通信が早くなった気がする。Cat2960がFastEthernet(100Mbps)モデルで、かつLinuxがワンアーム構成なので頭打ちになっているが、環境を整備すればさらなる速度向上が見込める。

f:id:daichi703n:20170903163459p:plain

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インターネットアクセスも可能。

designetwork.hatenablog.com

まとめ - ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する

CentOS ( Linux ) を使用してフレッツ光回線からZOOT NATIVE経由で transix (インターネットマルチフィード) へ DS-Lite (IPv4 over IPv6) インターネット接続した。これにより、IPv4インターネット網への通信速度が10倍程度向上した。引き続き無料期間はDS-Liteを使用し、ZOOT NATIVEを継続利用するか検討する。