NAT 配下の IPv4 環境から SoftEther で繋いだ Conoha VPS 経由で IPv6 を使う

　IPv4 でも踊る亀が見たかったのでやりました。
　自分が今使っているインターネットへのアクセスラインは、レオネットです。バックボーンは OCN 光の 100Mbps のようですが、LAN 内へは IPv4 のクラス A プライベート IPアドレスがひとつ降って来る環境です。

#目的
　IPv4 の接続ルートは維持しつつ、IPv6 リーチャビリティを個人契約の Conoha VPS 経由で確保します。[KAME Project](http://www.kame.net) へアクセスして、亀が踊っていれば成功です。
　なお、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 を許可する設定を追加するとよいです。



<a href="http://www.dslreports.com/speedtest/10405711"><img src="http://www.dslreports.com/speedtest/10405711.png"></a>