IPv6網を経由してAmazon VPCとIPv4ネットワークをEC2とYAMAHAルーターで接続する

2016.07.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
VPCのプライベート接続でオンプレミスのIPv6網と接続する機会があり、IPv4で上手く使う手がないかと試行錯誤した結果をメモとして残しておきます。

前提となる構成

拠点ネットワークとAmazon VPCはIPv4、経由するIPv6網内がIPv6という構成です。拠点側ルーターとAWS側ルーター *1間でv4v6変換をするのがシンプルですが、今回はAWS側ルーターに制約があり、AWS側ルーターとGatewayインスタンス(EC2)間でISATAPトンネルを張り、GatewayインスタンスにIPv6アドレスを割り当てています。下図のイメージです。

v4v601

そこで今回は、拠点側ルーターとGatewayインスタンスのIPv6アドレス同士でIPv4 over IPv6となるIPIPトンネルを張ることにしました。

v4v602

検証は以下の環境で行いました。

  • 拠点側ルーター : YAMAHA RTX810
  • EC2 : Amazon Linux 2016.03.3

EC2の構成

Gatewayインスタンスを構成していきます。まずは、前提となるISATAPトンネルの設定を参考までに示します。

$ sudo ip tunnel add sit1 mode isatap local <EC2のPrivate IP>
$ sudo ip tunnel prl dev sit1 prl-default <IPv6網側ルーターのIPv4アドレス>
$ sudo ip addr add <EC2のISATAP IPv6アドレス> dev sit1
$ sudo ip link set sit1 up
$ sudo route add -A inet6 default gw <IPv6網側ルーターのISATAP IPv6アドレス> sit1

では、本題のIPIPトンネルの設定です。ip -6 tunnel addコマンドでmodeipip6(IPv4 over IPv6トンネル)を指定するのがポイントです。それ以外は一般的なLinuxトンネルの設定と変わりません。

$ sudo ip -6 tunnel add tun0 mode ipip6 local <EC2のISATAP IPv6アドレス> remote <拠点側ルーターのIPv6アドレス>
$ sudo ip link set tun0 up
$ sudo ip route add <拠点ネットワークのCIDR> dev tun0

確認してみます。

$ ip -6 tun
tun0: ip/ipv6 remote <拠点側ルーターのIPv6アドレス> local <EC2のISATAP IPv6アドレス> encaplimit 4 hoplimit 64 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000)
ip6tnl0: ipv6/ipv6 remote :: local :: encaplimit 0 hoplimit 0 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000)
$ ip route
default via 10.255.2.129 dev eth0
10.255.2.128/26 dev eth0  proto kernel  scope link  src 10.255.2.190
169.254.169.254 dev eth0
<拠点ネットワークのCIDR> dev tun0  scope link
$

OKですね。合わせて、VPCの他のインスタンスからGatewayインスタンスのトンネル経由でアクセスするよう、EC2インスタンスおよびVPCの設定を追加します。

[Linux] IP転送の有効化

以下のコマンドでカーネルでのIP転送を有効にします。再起動後も有効にしたいのであれば、/etc/sysctl.confを編集しましょう。

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
1
$

[AWS] Gatewayインスタンスの送信元/送信先チェックの無効化

EC2インスタンスの定番設定ですね。拠点ネットワーク宛てのトラフィックはVPCによってデフォルトで破棄されてしまうため、EC2インスタンス一覧から右クリック - [ネットワーキング] - [送信元/送信先の変更チェック]を選択し、[無効化]をクリックします。

ip4ip603

[AWS] VPCルーティングテーブルに拠点ネットワークのルーティングを追加

拠点ネットワークと通信したいVPCサブネットにひもづくルーティングテーブルに、拠点ネットワークのルーティングを追加します。ターゲットはGatewayインスタンスを指すように選択します。

ip4ip604

また、VPC側のMTUはインスタンスタイプによっては9001(Jumbo Frame)になっているので、GatewayインスタンスでMSSクランプを有効にすると安定するかもしれません。

[AWS] セキュリティグループの設定

GatewayインスタンスのISATAPトンネルのために、IPv6網側ルーターからのIPv6(プロトコル番号41)を許可しましょう。具体的な設定は以下の記事と同様です。

IP転送自体はISATAPトンネルの中で行われるため、セキュリティグループの設定は必要ありません。Webインスタンスなどでは、拠点ネットワークからの接続についての許可設定を適宜追加しましょう。

YAMAHAルーターの構成

ルーター側にもVPCのルーティングの追加とIPIPトンネルの設定を投入します。

ip route <VPCのCIDR> gateway tunnel 1 
  :(中略)
tunnel select 1
 tunnel encapsulation ipip
 tunnel endpoint address <EC2のISATAP IPv6アドレス>
 ip tunnel mtu 1452
 ip tunnel tcp mss limit auto
 tunnel enable 1

シンプルですね。

今回使用したRTX810では、デフォルトでWAN側インターフェース(lan2)のIPv6ファイヤーウォール設定にIP in IP( encapsulation)(プロトコル番号4)の許可ルールが無いため、以下の通りinのフィルタ設定に追加しました。

ipv6 lan2 secure filter in 101030 101031 101032 101033 101034 101035 200000
  :(中略)
ipv6 filter 101035 pass * * 4

これでOKです。お互いにpingなどでIPv4アドレス宛に通信できることを確認しましょう。

まとめ

Amazon VPCとオンプレミスを繋ぐちょっと変わった構成として、EC2インスタンスとYAMAHAルーター間でIPv4 over IPv6のIPIPトンネルを構成する例をご紹介しました。IPv4 over IPv6の変換技術はIPIP以外にMAPや4rdなどいろいろあるので、そちらも試してみたいですね。実装もDS-Lite向けのISC AFTRなんてのもあったりします。

また、現在の構成だとGatewayインスタンスがSPOF(単一障害点)なので、Multi-AZ構成も練ってみたいところです。

なお、結果的に拠点側ルーターの構成はDS-Liteとほぼ同等なので、YAMAHA以外のルーターについては下記サイトの情報が有効かも知れません。

参考URL

脚注

  1. ここで言うAWS側ルーターは、Direct ConnectやVPNのCustomer Routerないし、その周辺のルーターを指します。