IPv6網を経由してAmazon VPCとIPv4ネットワークをEC2とYAMAHAルーターで接続する
ども、大瀧です。
VPCのプライベート接続でオンプレミスのIPv6網と接続する機会があり、IPv4で上手く使う手がないかと試行錯誤した結果をメモとして残しておきます。
前提となる構成
拠点ネットワークとAmazon VPCはIPv4、経由するIPv6網内がIPv6という構成です。拠点側ルーターとAWS側ルーター *1間でv4v6変換をするのがシンプルですが、今回はAWS側ルーターに制約があり、AWS側ルーターとGatewayインスタンス(EC2)間でISATAPトンネルを張り、GatewayインスタンスにIPv6アドレスを割り当てています。下図のイメージです。
そこで今回は、拠点側ルーターとGatewayインスタンスのIPv6アドレス同士でIPv4 over IPv6となるIPIPトンネルを張ることにしました。
検証は以下の環境で行いました。
- 拠点側ルーター : 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
コマンドでmode
にipip6
(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インスタンス一覧から右クリック - [ネットワーキング] - [送信元/送信先の変更チェック]を選択し、[無効化]をクリックします。
[AWS] VPCルーティングテーブルに拠点ネットワークのルーティングを追加
拠点ネットワークと通信したいVPCサブネットにひもづくルーティングテーブルに、拠点ネットワークのルーティングを追加します。ターゲットはGatewayインスタンスを指すように選択します。
また、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
脚注
- ここで言うAWS側ルーターは、Direct ConnectやVPNのCustomer Routerないし、その周辺のルーターを指します。 ↩