IPv4 でも踊る亀が見たかったのでやりました。
自分が今使っているインターネットへのアクセスラインは、レオネットです。バックボーンは OCN 光の 100Mbps のようですが、LAN 内へは IPv4 のクラス A プライベート IPアドレスがひとつ降って来る環境です。
#目的
IPv4 の接続ルートは維持しつつ、IPv6 リーチャビリティを個人契約の Conoha VPS 経由で確保します。KAME Project へアクセスして、亀が踊っていれば成功です。
なお、RA や DHCPv6 での LAN 向けアドレス配布は、対象の PC が 1 台であることからしないこととします。
#構成
PC---(BBRT)--(GW)---(IPv4 Internet)---VPS---(IPv6 Internet)
- GWはBBRT向けにクラスAプライベートアドレスを、BBRTはLAN向けにクラスCアドレスを、それぞれDHCPで配布しています。
#環境
- Conoha VPS 512MB プラン - Ubuntu 16.04
- Windows 10 Pro バージョン 1607 x64
#IPv6 アクセスのための他の案
- VPS に squid を入れる :IPv6 だけを proxy する設定ができない
- グローバル固定 IPv6 割当サービス (http://v6ip.tsukuba.wide.ad.jp/) :スループットは 10Mbps 程度で普通 ([^1]: 簡単なのでこちらもおすすめです)
#Conoha 経由で IPv6
##事前に準備すること
- Ubuntu 16.04 512M プラン
- VPS側 softether server x64 を導入
- ローカルブリッジに tap を選択
- PC側 softether bridge を導入
- ローカルブリッジにLANカードを選択
- AAAA レコードを返してくれる DNS サーバを IPv4 側に設定 [^2]:8.8.8.8 とか。
##Windows側でリンクローカルアドレス確認
事前準備で、VPS の tap とPCのリンクローカルアドレスには、双方 Ping が通るようになっているはずです。
- fe80::313a:ed15:ba07:9d97 :PC側リンクローカルアドレス
C:\WINDOWS\system32>ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv6 アドレス . . . . . . . . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::313a:ed15:ba07:9d97%8
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.1
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.254
##VPS に入れるコマンド
まず、ifconfig で IPv6 アドレスを選定。今回は 16 個の追加アドレスのうち、末尾 0 のアドレスにしました。
それから、tap のリンクローカルアドレスを確認します。
- 2400:8500:1301:740:a133:XXX:XXX:2330/64
- fe80::2ac:e6ff:fe70:86e/64
root@conoha:~# ifconfig
ens3 Link encap:Ethernet HWaddr 02:01:85:82:5a:e9
inet addr:133.XXX.XXX.233 Bcast:133.XXX.XXX.255 Mask:255.255.254.0
inet6 addr: 2400:8500:1301:740:133:XXX:XXX:233/128 Scope:Global
inet6 addr: fe80::1:85ff:fe82:5ae9/64 Scope:Link
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233d/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233c/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233b/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233a/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2339/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2338/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2337/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2336/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2335/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2334/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2333/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2332/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2331/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:2330/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233f/64 Scope:Global
inet6 addr: 2400:8500:1301:740:a133:XXX:XXX:233e/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1749880 errors:0 dropped:0 overruns:0 frame:0
TX packets:1605631 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1244575191 (1.2 GB) TX bytes:1296402001 (1.2 GB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1851 errors:0 dropped:0 overruns:0 frame:0
TX packets:1851 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:145837 (145.8 KB) TX bytes:145837 (145.8 KB)
tap_tap Link encap:Ethernet HWaddr 00:ac:e6:70:08:6e
inet6 addr: fe80::2ac:e6ff:fe70:86e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:485387 errors:0 dropped:25 overruns:0 frame:0
TX packets:786393 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:121082207 (121.0 MB) TX bytes:998594524 (998.5 MB)
次に、VPS の IPv6 デフォルトルート(デフォルトゲートウェイ)を確認します。Flag が GD で ::/0 の、Next Hop がそれです。
- fe80::740:1
root@conoha:~# route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
2400:8500:1301:740:133:XXX:XXX:233/128 :: U 256 0 0 ens3
2400:8500:1301:740::/64 :: U 256 1 6 ens3
fe80::/64 :: U 256 1 3443 ens3
fe80::/64 :: U 256 1 10 tap_tap
::/0 fe80::740:1 UGDAe 1024 1485218 ens3
::/0 :: !n -1 11187467 lo
::1/128 :: Un 0 2 124 lo
2400:8500:1301:740::/128 :: Un 0 1 0 lo
2400:8500:1301:740:133:XXX:XXX:233/128 :: Un 0 2 10 lo
2400:8500:1301:740:a133:XXX:XXX:2331/128 :: Un 0 2 44 lo
2400:8500:1301:740:a133:XXX:XXX:2332/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2333/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2334/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2335/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2336/128 :: Un 0 2 1 lo
2400:8500:1301:740:a133:XXX:XXX:2337/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2338/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:2339/128 :: Un 0 1 0 lo
2400:8500:1301:740:a133:XXX:XXX:233a/128 :: Un 0 2 1 lo
2400:8500:1301:740:a133:XXX:XXX:233b/128 :: Un 0 2 93 lo
2400:8500:1301:740:a133:XXX:XXX:233c/128 :: Un 0 2 72 lo
2400:8500:1301:740:a133:XXX:XXX:233d/128 :: Un 0 2 11 lo
2400:8500:1301:740:a133:XXX:XXX:233e/128 :: Un 0 2 278 lo
2400:8500:1301:740:a133:XXX:XXX:233f/128 :: Un 0 2 11889 lo
fe80::/128 :: Un 0 1 0 lo
fe80::/128 :: Un 0 1 0 lo
fe80::1:85ff:fe82:5ae9/128 :: Un 0 2 1693 lo
fe80::2ac:e6ff:fe70:86e/128 :: Un 0 2 4886 lo
ff00::/8 :: U 256 1 27191 ens3
ff00::/8 :: U 256 1 3071 tap_tap
::/0 :: !n -1 11187467 lo
root@conoha:~# ip -6 route
2400:8500:1301:740:133:XXX:XXX:233 dev ens3 proto kernel metric 256 pref medium
2400:8500:1301:740::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev tap_tap proto kernel metric 256 pref medium
default via fe80::740:1 dev ens3 proto ra metric 1024 expires 1726sec hoplimit 64 pref high
root@conoha:~# ip -6 neigh
2400:8500:1301:740:133:XXX:XXX:234 dev ens3 lladdr 02:01:85:82:5a:ea STALE
fe80::313a:ed15:ba07:9d97 dev tap_tap lladdr d4:3d:7e:be:60:e3 REACHABLE
fe80::740:1 dev ens3 lladdr 00:05:73:a0:00:6f router REACHABLE
fe80::2ae:76ff:fe00:ae76 dev tap_tap lladdr 00:ae:76:66:b2:a6 PROBE
2400:8500:1301:740::1 dev ens3 lladdr 00:05:73:a0:00:6f router STALE
fe80::1:85ff:fe82:5aea dev ens3 lladdr 02:01:85:82:5a:ea STALE
fe80::1:85ff:fe82:5a33 dev ens3 lladdr 02:01:85:82:5a:33 STALE
fe80::88fd:4c82:b12a:4ccb dev tap_tap lladdr 00:ac:ca:ba:16:67 STALE
fe80::f816:3eff:fe23:6ba3 dev ens3 lladdr fa:16:3e:23:6b:a3 STALE
fe80::740:2 dev ens3 lladdr 74:a2:e6:8b:fb:3f router REACHABLE
fe80::14df:8ca3:452f:2910 dev tap_tap lladdr 20:3c:ae:8a:01:61 STALE
2400:8500:1301:740:a133:XXX:XXX:2330 dev tap_tap lladdr d4:3d:7e:be:60:e3 STALE
fe80::f816:3eff:fed8:6c7f dev ens3 lladdr fa:16:3e:d8:6c:7f STALE
2400:8500:1301:740:a133:XXX:XXX:2331 dev tap_tap lladdr d4:3d:7e:be:60:e3 STALE
##VPS の設定
forwarding を有効にすると、VPS のデフォルトゲートウェイが消えるので、accept_ra に 2 を入れて消えないようにします。
proxy_ndp は、入れておかないと traceroute6 が VPS で止まって通信もできませんでしたが、有効化したらうまくいきました。
echo 2 > /proc/sys/net/ipv6/conf/ens3/accept_ra
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
echo 1 > /proc/sys/net/ipv6/conf/ens3/proxy_ndp
PC側に割り振る IPv6 アドレスを、VPS から消去します。そして、tap と繋いだ PC 側のリンクローカルアドレスを next hop に。さらに、IPv6 アドレスに対する ndp proxy を、ens3 に設定します。
ip -6 addr del 2400:8500:1301:740:a133:XXX:XXX:2330/64 dev ens3
ip -6 route add 2400:8500:1301:740:a133:XXX:XXX:2330/128 via fe80::313a:ed15:ba07:9d97 dev tap_tap
ip -6 neigh add proxy 2400:8500:1301:740:a133:XXX:XXX:2330 dev ens3
##PC の設定
- IPv6 ユニキャストグローバルアドレス :IPv6 アドレスを設定
- デフォルトゲートウェイアドレス :tap のリンクローカルアドレスを設定
#結果
C:\Users\User>tracert -4 google.com
google.com [216.58.197.14] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 <1 ms <1 ms <1 ms 192.168.1.254
2 <1 ms <1 ms <1 ms 10.55.215.1
3 21 ms 20 ms 22 ms 118.23.42.246
4 2 ms 2 ms 2 ms 118.23.42.173
5 4 ms 3 ms 3 ms 118.23.52.97
6 4 ms 2 ms 2 ms 61.207.46.213
7 11 ms 12 ms 10 ms 125.170.96.53
8 13 ms 14 ms 14 ms 125.170.96.30
9 23 ms 22 ms 21 ms 153.149.221.14
10 13 ms 12 ms 14 ms 180.37.200.22
11 14 ms 14 ms 15 ms 211.122.28.194
12 30 ms 26 ms 34 ms 108.170.243.33
13 11 ms 11 ms 10 ms 108.170.238.101
14 13 ms 11 ms 12 ms kix06s02-in-f14.1e100.net [216.58.197.14]
トレースを完了しました。
C:\Users\User>tracert -6 google.com
google.com [2404:6800:400a:804::200e] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 20 ms 20 ms 20 ms va133-XXX-XXX-233-f.a023.g.tyo1.static.cnode.io [2400:8500:1301:740:a133:XXX:XXX:233f]
2 86 ms 71 ms 59 ms 2400:8500:1301:740::1
3 28 ms 25 ms 25 ms 2400:8500:1300:1026::1
4 20 ms 20 ms 21 ms 2400:8500:1300:1078::1
5 20 ms 21 ms 20 ms 2400:8500:1300:1038::1
6 21 ms 21 ms 20 ms ae-25.r00.tokyjp05.jp.bb.gin.ntt.net [2001:218:2000:5000::3c5]
7 26 ms 22 ms 20 ms ae-6.r31.tokyjp05.jp.bb.gin.ntt.net [2001:218:0:2000::351]
8 23 ms 22 ms 21 ms ae-6.r02.tokyjp03.jp.bb.gin.ntt.net [2001:218:0:2000::192]
9 22 ms 22 ms 27 ms 2001:218:2000:5000::47e
10 27 ms 23 ms 22 ms 2001:4860:0:1001::2
11 22 ms 21 ms 21 ms 2001:4860::1:0:bcda
12 32 ms 30 ms 29 ms 2001:4860::1:4000:c874
13 30 ms 31 ms 31 ms 2001:4860:0:100a::1
14 28 ms 28 ms 35 ms 2001:4860:0:1::1d77
15 30 ms 35 ms 33 ms kix03s01-in-x0e.1e100.net [2404:6800:400a:804::200e]
トレースを完了しました。
IPv6 パケットの IPv4 カプセル化による処理遅延も、ほとんどありません。
C:\WINDOWS\system32>ping -4 133.XXX.XXX.233
133.XXX.XXX.233 [133.XXX.XXX.233]に ping を送信しています 32 バイトのデータ:
133.XXX.XXX.233 からの応答: バイト数 =32 時間 =23ms TTL=47
133.XXX.XXX.233 からの応答: バイト数 =32 時間 =22ms TTL=47
133.XXX.XXX.233 からの応答: バイト数 =32 時間 =20ms TTL=47
133.XXX.XXX.233 からの応答: バイト数 =32 時間 =21ms TTL=47
133.XXX.XXX.233 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 20ms、最大 = 23ms、平均 = 21ms
C:\WINDOWS\system32>ping -6 2400:8500:1301:740:a133:XXX:XXX:233f
2400:8500:1301:740:a133:XXX:XXX:233f [2400:8500:1301:740:a133:XXX:XXX:233f]に ping を送信しています 32 バイトのデータ:
2400:8500:1301:740:a133:XXX:XXX:233f からの応答: 時間 =20ms
2400:8500:1301:740:a133:XXX:XXX:233f からの応答: 時間 =23ms
2400:8500:1301:740:a133:XXX:XXX:233f からの応答: 時間 =41ms
2400:8500:1301:740:a133:XXX:XXX:233f からの応答: 時間 =31ms
2400:8500:1301:740:133:XXX:XXX:233 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 20ms、最大 = 41ms、平均 = 28ms
亀も踊った・・・!
なお、Ping6 を通すには、Windows ファイヤウォールの受信の規制から、既存のポリシーを有効化するのではうまく行かなかったため、新しくポリシーを作成し、ICMPv6 を許可する設定を追加するとよいです。