中国のパブリッククラウド上でIPv6を使うには


はじめに

モチベーション

これまでほとんど利用されていなかった中国のIPv6界隈で大きな動きがある。それでは実際触ってみよう、と思ったら予想以上に敷居が高かった。というか、普通の日本にいる日本人には無理だ。如何にそれが無理かも含めてここにメモしとく。
以下は2019年2月11日に調べた結果だ。去年末から各社すごいスピードでIPv6対応始めてるので、もしかしたら数日後には陳腐化しているかもしれない。

調査

メジャーなパブリッククラウドのそれぞれのIPv6対応状況を調べてみた。NAT64やロードバランサーは受け身としてしか使えない。やっぱりIPv6アドレスを持った仮想Linuxが欲しい。KingSoft Cloudの北京リージョンでも使えるには使えそうだ。実際にVPCにIPv6 addressを付与出来たけど、この先はベアメタルインスタンスが必要だった。高額すぎる。結論からいうとお手軽にIPv6ネイティブなインスタンスが使えるのは中国アカウントのAlibaba Cloudのみ。中国アカウントを使うことが中国人以外では著しく困難なので、中国人の協力者を見つけよう。各クラウドの対応状況は以下の通り。

仮想サーバ NAT64 ロードバランサー
Alibaba Cloud ◯内モンゴル
(Gateway型)
Tencent Cloud × ×
Baidu Cloud ×
(ElasticIP型)
×
KingSoft Cloud ◯北京
(ベアメタルのみ)
×
Ucloud × ◯(?型) ×

KingSoft Cloud(金山云)はベアメタルサーバインスタンスであるEPCのみ。最低6万円ぐらいから。家庭内稟議通りません。

中国に環境を作る

中国でIPv6を使えるLinux instanceを作成するには

VPCがネイティブにIPv6に対応していて、気軽にさわれそうなのはAlibaba Cloudの中国向けアカウントの内モンゴルリージョンのみ。つまりAlibaba Cloudの中国向けアカウントが必要。そしてAlibaba Cloudの中国人向けアカウントを使うためには中国の電話(+86)と中国の銀行口座が最低必要。日本人でも現地に行けば取得できますが、持っている人は少ないですね。。。この二つを取得するか、持ってる協力者が必要。以下、中国アカウントを使えるという前提です。

Alibaba Cloudの中国アカウントとは

Alibaba Cloudには3種類ある。1)中国、2)International、そして日本のSBクラウドが運用する3)日本アカウントだ。IPv6が使えるのはAlibaba Cloudの中国アカウントである中国站にログインできるアカウントのみだ。

VPCの作成

内モンゴル(Hohhot Region)のVPCのみがIPv6対応なのでここにVPCを作成。

IPv6をAllocate。初めての場合はIPv6の利用申請の画面に案内されるので、利用申請する(2018年12月)。

VPCには/56が割り当てられる。同時にVSwitchを作成してIPv6 CIDRを割り当てる。VSwitchへの割り当ては/64単位固定みたい。十進法で0-255までを入力する。

ECSの作成

次に内モンゴルリージョンの今作ったVPC/VSwich上にECSインスタンスを作成する。詳細は割愛するけど購入する際にネットワークのところで"Assign IPv6 Address Free of Charge"というのがでてくるのでチェックする。

ECSが起動したらログインしてみよう。期待に反してIPv6 Adressが無いことに気付くはずだ。

# ip addr
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
2: eth0: <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
    inet 10.0.0.82/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever

LinuxのインスタンスでIPv6を有効にするにはスクリブトをダウンロードして実行し、IPv6を有効にする必要がある。下記はubuntu16の例だ。そしてダウンロードされたスクリプトのファイル名が微妙だ。

# wget http://ecs-image-utils.oss-cn-hangzhou.aliyuncs.com/ipv6/debian/ecs-utils-ipv6?spm=a2c4g.11186623.2.18.4c2237da4VXvzL 
# chmod +x ecs-utils-ipv6\?spm\=a2c4g.11186623.2.18.4c2237da4VXvzL 
# ./ecs-utils-ipv6\?spm\=a2c4g.11186623.2.18.4c2237da4VXvzL 

するとIPv6 addressが降ってくる

# ip addr
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 00:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.82/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2408:4004:100:2400:xxxx:xxxx:xxxx:xxxx/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:xxxx:xxxx:xxxx/64 scope link 
       valid_lft forever preferred_lft forever
# route -6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2408:4004:100:2400::/64        ::                         U    256 0     1 eth0
fe80::/64                      ::                         U    256 0     0 eth0
::/0                           2408:4004:100:2400:ffff:ffff:ffff:fff7 UG   1024 1   199 eth0
::/0                           ::                         !n   -1  1   206 lo
::1/128                        ::                         Un   0   2     4 lo
2408:4004:100:2400:xxxx:xxxx:xxxx:xxxx/128 ::                         Un   0   2     1 lo
fe80::216:xxxx:xxxx:xxxx/128   ::                         Un   0   2    12 lo
ff00::/8                       ::                         U    256 0     0 eth0
::/0                           ::                         !n   -1  1   206 lo

Next hopがGUAになってるあたりがちょっと微妙だ。
以上でこのインスタンス自体のIPv6は有効になったが、実際に外部通信するにはもう一手間必要で、IPv6 Internet帯域を購入する必要がある。VPCのコメニューからIPv6 Gatewayを選択してManageのリンクに飛ぶ。

メニューからIPv6 Internet Bandwidthを選び、今作ったECSのCreate IPv6 Internet Bandwidthに飛ぶ

これでIPv6 Internetとつながる。

# ping6 v6pc.jp
PING v6pc.jp(2400:6700:ff00::36f9:e38d) 56 data bytes
64 bytes from 2400:6700:ff00::36f9:e38d: icmp_seq=1 ttl=250 time=239 ms
64 bytes from 2400:6700:ff00::36f9:e38d: icmp_seq=2 ttl=250 time=240 ms
64 bytes from 2400:6700:ff00::36f9:e38d: icmp_seq=3 ttl=250 time=240 ms
64 bytes from 2400:6700:ff00::36f9:e38d: icmp_seq=4 ttl=250 time=241 ms

最後に

これは私の趣味の活動です。所属する団体の考え方は全く反映していません。

2019/2/22追記 ubuntu 18について

本日2019/2/22時点でUbuntu 18版のツールが公開されていないようだ。ubuntu16と色々違うので上記ubuntu 14/16版のツールではIPv6が動かない。というわけで、以下、手動で設定する方法

情報取得

IPv6を設定する該当インスタンスから下記実行

ipv6 address取得

# curl -L -s 100.100.100.200/latest/meta-data/network/interfaces/macs/[eth0の
Mac Address]/ipv6s
[2408:4004:100:xxxx::1]

ipv6 cidr取得

# curl -L -s 100.100.100.200/latest/meta-data/network/interfaces/macs/[eth0の
Mac Address]/vswitch-ipv6-cidr-block
[2408:4004:100:xxxx::/64]

ipv6 gateway取得

# curl -L -s 100.100.100.200/latest/meta-data/network/interfaces/macs/[eth0の
Mac Address]/ipv6-gateway
[2408:4004:100:2400:ffff:ffff:ffff:fff7]

ipv6有効化

# cat /etc/sysctl.conf
~~~ 省略
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.lo.disable_ipv6=0
net.ipv6.conf.eth0.disable_ipv6 =0
~~~ 省略

#cat /etc/default/ufw 
~~~ 省略
IPV6=yes
~~~ 省略

#sysctl -p

ipv6 interface設定

ubuntu18からnetplanがnetwork interface設定の標準的方法となった。
下記下から3行、IPv6のアドレスに関連する部分を追記する

# cat /etc/netplan/99-netcfg.yaml 
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: yes
      dhcp6: no
      addresses:
        - 2408:4004:100:xxxx::1/64
      gateway6: 2408:4004:100:xxxx:ffff:ffff:ffff:fff7

# netplan apply