Amazon AWS EC2 VPCのIPv6対応 インスタンスからのIPv6アドレス通信


やったこととサマリ

構築した環境と疎通を試したIPv6通信

オハイオリージョンの同一サブネット内に ubuntu 16.04 LTS のインスタンスを2つ立てて、下記のIPv6通信をしてみた。

  1. 同一サブネット内のインスタンス間の直接IPv6通信
    • グローバルユニキャストアドレス経由
    • リンクローカルユニキャストアドレス経由
  2. All Node Address (ff02::1) リンクローカルマルチキャストアドレスあての通信
  3. stateful DHCPv6に頼らず勝手IPv6アドレスをインスタンスに付与しての通信

サマリ

  • インスタンス間の直接IPv6通信はグローバルアドレス, リンクローカルアドレスともに制限なくできた。
  • All Node Address (ff02::1) へのping6 (ICMP echo request送信) で近隣ノード(デフォルトルータを含む)を見つけられない。
  • 勝手にIPv6アドレスを割り当てても使えずAWSのインフラが割り当てたIPv6アドレスだけしか使えない。現時点(2017.1.15)ではVPN用途でユーザが自前のグローバルIPv6アドレスを持ち込んだり、プライベートIPv4アドレスの感覚で、ユニークローカルIPv6アドレス(ULA)を付けられない様子。

構成図

VPCの同一サブネット内にインスタンスを2つ立てた。

                                             +---------+
                                             |    GW   |
                                             +----+----+
                                                  |RA fe80::4fd:d1ff:fec8:f9cf
                                                  |↓
   2001:1f16:XXXX:YYYY::/64([P1]と表記)            |
   --+------------------------------------+-------+--------
     |                               |
     |     [P1]:f557:112e:f9bd:c7f3  |     [P1]:d326:143a:2015:79fa
     |eth0 fe80::4df:a5ff:fe6c:5d57  |eth0 fe80::4f0:13ff:feeb:c61d
+----+----+                     +----+----+
| ubuntu1 |                     | ubuntu2 |
+---------+                     +---------+

インスタンス間の直接IPv6通信

ubuntu1 to ubuntu2 (グローバルユニキャストアドレス)

OK

ubuntu1# ping6 2600:1f16:XXXX:YYYY:d326:143a:2015:79fa
PING 2600:1f16:8df:XXXX:YYYY:112e:f9bd:c7f3(2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f3) 56 data bytes
64 bytes from 2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f3: icmp_seq=1 ttl=64 time=0.523 ms
64 bytes from 2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f3: icmp_seq=2 ttl=64 time=0.603 ms
^C

ubuntu1 to ubutu2 (リンクローカルユニキャストアドレス)

OK

ubuntu1# ping6 fe80::4f0:13ff:feeb:c61d%eth0
PING fe80::4f0:13ff:feeb:c61d%eth0(fe80::4f0:13ff:feeb:c61d) 56 data bytes
64 bytes from fe80::4f0:13ff:feeb:c61d: icmp_seq=1 ttl=64 time=0.466 ms
64 bytes from fe80::4f0:13ff:feeb:c61d: icmp_seq=2 ttl=64 time=0.553 ms
^C

ubuntu1 to All Nodes Address (リンクローカルマルチキャスト)

ubuntu1# ping6 ff02::1%eth0
64 bytes from fe80::4df:a5ff:fe6c:5d57: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from fe80::4df:a5ff:fe6c:5d57: icmp_seq=2 ttl=64 time=0.032 ms

同一リンク内にいるはずの、ubuntu2からもデフォルトルータからECHO replyは来ず、自分自身からのみ返事がくる。ubuntu2側のeth0を見ていてもECHO requestが来ないので、インスタンス間にある仮想スイッチで止められている動きだった。

ubunut1の近隣キャッシュを見ると

ubuntu1# ip -6 nei
fe80::4f0:13ff:feeb:c61d dev eth0 lladdr 06:f0:13:eb:c6:1d STALE
fe80::4fd:d1ff:fec8:f9cf dev eth0 lladdr 06:fd:d1:c8:f9:cf router STALE

ICMP ECHO requst/reply は疎通しないもののの、ubuntu2,デフォルトルータいずれも近隣探索は成功しておりMACアドレスの解決はできている。仮想スイッチは近隣探索は通している。

RAで通知されたデフォルトルータへのアクセス

ubuntu1# ip -6 route
fe80::/64 dev eth0  proto kernel  metric 256  pref medium
default via fe80::4fd:d1ff:fec8:f9cf dev eth0  proto ra  metric 1024  expires 1799sec hoplimit 64 pref medium

ubuntu1# ping6 fe80::4fd:d1ff:fec8:f9cf%eth0
^C

リンクローカルユニキャストアドレスでデフォルトルータへICMP ECHO requstを飛ばしても返事なし。

インスタンスに勝手IPv6アドレスをつける

prefix::1 (グローバルユニキャストアドレス)をつける

stateful DHCPv6で割り当てられるIPv6アドレス(マネージメントコンソールで確認できるIPv6アドレス)ではないアドレスを手動でつけて通信を試みる。

ubuntu1 to Internet (インスタンス to Internet)

ubuntu1# ip -6 addr add 2001:1f16:XXXX:YYYY::1/64 dev eth0

DADの重複検知がないことを確認して

# ping6 ipv6.google.com
PING ipv6.google.com(2607:f8b0:4001:c09::71) 56 data bytes
^C

結果: IPv6インターネットへの通信不可

ubuntu1 to ubuntu2 (インスタンス同士)

ubuntu1# ping6 2600:1f16:XXXX:YYYY:d326:143a:2015:79fa
PING 2600:1f16:XXXX:YYYY:d326:143a:2015:79fa(2600:1f16:XXXX:YYYY:d326:143a:2015:79fa) 56 data bytes
^C

近隣要請に対して近隣通知が返ってこず近隣探索に失敗している。

ubuntu1# ip -6 nei
2600:1f16:XXXX:YYYY:d326:143a:2015:79fa dev eth0  INCOMPLETE

結果: 通信不可

管理されているアドレスに近いグローバルユニキャストアドレスをつける

DHCPv6で取れるアドレス (2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f3) + 1 をつける

ubuntu1# ip -6 addr add 2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f4/64 dev eth0

ubuntu1 to Internet

ubuntu1# ping6 ipv6.google.com
PING ipv6.google.com(in-in-x8a.1e100.net) 56 data bytes
^C

結果: 通信不可

ubuntu1 to ubuntu2

ubuntu1# ping6 2600:1f16:XXXX:YYYY:d326:143a:2015:79fa
PING 2600:1f16:XXXX:YYYY:d326:143a:2015:79fa(2600:1f16:XXXX:YYYY:d326:143a:2015:79fa) 56 data bytes
From 2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f4 icmp_seq=1 Destination unreachable: Address unreachable
From 2600:1f16:XXXX:YYYY:f557:112e:f9bd:c7f4 icmp_seq=2 Destination unreachable: Address unreachable
^C

結果: 通信不可

グローバルユニキャストアドレス(ULAを含む)はユーザが勝手持込IPv6アドレスを付けられない様子。

リンクローカルユニキャストアドレス

ubuntu1 のリンクローカルアドレスとして手動で fe80::1234 を付ける

ubuntu1# ip addr del fe80::4df:a5ff:fe6c:5d57/64 dev eth0
ubuntu1# ip addr add fe80::1234/64 dev eth0

ubuntu2のリンクローカルアドレスへICMP ECHO requestを飛ばすが返事はない。ubuntu2の近隣探索にも失敗している。

ubuntu1# ping6 fe80::4f0:13ff:feeb:c61d%eth0
PING fe80::4f0:13ff:feeb:c61d%eth0(fe80::4f0:13ff:feeb:c61d) 56 data bytes
From fe80::1234 icmp_seq=1 Destination unreachable: Address unreachable
From fe80::1234 icmp_seq=2 Destination unreachable: Address unreachable
^C

ubuntu1# ip -6 nei
fe80::4f0:13ff:feeb:c61d dev eth0  INCOMPLETE

リンクローカルアドレスも勝手アドレスを付けらず、インフラ(仮想スイッチ)がアドレス(/128)単位でアクセス制限をしているようである。個々のインスタンスを管理するためにstateful DHCPv6を使うのが合理的であるし、ネットワークも割り当てたIPv6アドレスでない勝手IPv6アドレスによる通信を抑止しているようだ。

関連記事

■ Amazon EC2 VPCのIPv6対応 インスタンスへのIPv6アドレス付与は m-flagつきRA + stateful DHCPv6
http://qiita.com/ip6/items/5c307af204ea83097755