フォーム読み込み中
Alibaba Cloud の仮想サーバ(ECS)からインターネットにアクセスしたい時、セキュリティグループでブロックしていなければ、Elastic IP Address(EIP)をバインドするだけで実現可能になります。これは便利である一方で EIP がバインドされていると、ECS からのインターネットトラフィックに対してルートテーブルによる制御できず、全て EIP を経由してインターネットに抜ける仕様となります。
ECS から一部のインターネットアクセスを禁止したい時、セキュリティグループで実現可能ですが、一部のアクセスはインターネットアクセスを許可しつつ、一部はプロキシサーバを経由させたいという要望もよく聞きます。今までこれは実現できませんでしたが、つい最近リリースされた Virtual Private Cloud(VPC)の「IPv4 Gateway」機能によって、EIP を持つ ECS のインターネットトラフィックでもルーティング制御できるようになりました。例えば、信頼する IPアドレス宛のみ直接 EIP 経由させ、それ以外宛先のトラフィックを一度プロキシにリダイレクトし、チェックさせるソリューションに活用できます。早速利用手順を検証してみたので、この機能の詳細を紹介していきたいと思います。
今回の検証では、最初に IPv4 Gateway の有効化有無によるルートテーブル制御効果の違いを確認します。次に、IPv4 Gateway を利用した一部のトラフィックが直接 EIP 経由、一部をプロキシ経由させる制御ができるかの検証を行います。今回の検証は、「8.8.4.4」宛のトラフィックをEIP経由させ、「8.8.8.8」宛のトラフィックをプロキシ経由させる構成で行います。
中国本土リージョンの場合、IPv4 Gateway 機能を利用する前にホワイトリスト申請が必要ですが、今回検証する東京リージョンは申請する必要がありません。
1-1. 下記構成で検証環境の VPC と ECS を作成します。
値 | 備考 | |
---|---|---|
リージョン | 東京 | |
VPC CIDR | 192.168.0.0/16 | |
VswitchA CIDR | 192.168.0.0/24 | |
VswitchB CIDR | 192.168.1.0/24 | |
ECS-A の IP 情報 | EIPあり、192.168.0.1 | クライアント機 |
ECS-B の IP 情報 | EIPあり、192.168.1.1 | プロキシ |
1-2. ルートテーブル A、B を作成し、Vswitch A、B にバインドします。
Destination CIDR block | Next hop | Type | |
---|---|---|---|
ルートテーブル A | 192.168.0.0/24 | - | System Route |
192.168.1.0/24 | - | System Route | |
ルートテーブル B | 192.168.0.0/24 | - | System Route |
192.168.1.0/24 | - | System Route |
1-3. 今回、インターネットの疎通確認には、Google のパブリック DNS を利用します。
Public IP | CIDR |
---|---|
8.8.8.8 | 8.8.8.8/32 |
8.8.4.4 | 8.8.4.4/32 |
IPv4 Gateway を有効化する前に、EIP のみの状態でインターネット通信が可能である一方、ルートテーブルでインターネットアクセスが制御できないことを確認します。
2-1. ECS-A から、「8.8.4.4」および「8.8.8.8」へ Ping が通ることを確認します。
2-2. ルートテーブル A に、「8.8.8.8/32」向けの通信を ECS-B 経由にするカスタムルートエントリを追加します。
Destination CIDR block | Next hop | Type | |
---|---|---|---|
ルートテーブル A | 192.168.0.0/24 | - | System Route |
192.168.1.0/24 | - | System Route | |
8.8.8.8/32 | ECS-B | Custom Route |
2-3.ECS-A から「8.8.8.8」へ Ping を飛ばし、ECS-B で TCPDUMP コマンドを利用して ICMP トラフィックを確認します。
・ECS-A からのトラフィック(なし)
→2-2 のようにルートテーブルを記述しても、ECS-A から「8.8.8.8」へのトラフィックを ECS-B 経由にできないことが確認できました。
IPv4 Gateway を有効化後に、ルートテーブルによってインターネットアクセスが制御可能になることを確認します。
3-1.IPv4 Gateway のコンソールに移動し、「Create IPv4 Gateway」をクリックします。
3-2. 下記情報を入力し、「Created」をクリックします。
VPC:1-1 で作成した VPC
Name:任意入力
3-3. 作成直後の IPv4 Gateway のステータスが「Inactive」ですので、有効化するには「Active」をクリックします。
3-4. 注意事項を確認し、「OK」をクリックします。
注意:従来の VPC では IPv4 Gateway がなくてもインターネットアクセスできる仕様ですが、一度 VPC の IPv4 Gateway を有効化すると、その VPC は IPv4 Gateway へのルーティングがないとインターネットにアクセスできない仕様に変わってしまい、もとに戻す方法(IPv4 Gateway を無効にする)がありません。
3-5. ECS-A から、「8.8.4.4」へ Ping を飛ばし、Ping が通らないことを確認します。
3-6. ECS-A から、「8.8.8.8」へ Ping を飛ばし、ECS-B で TCPDUMP コマンドを利用して ICMP トラフィックを確認します。
・ECS-A から dns.google へのリクエスト(あり)
・dns.google から ECS-A への応答(なし)
→ルートテーブル A の記述の通り、ECS-A から「8.8.8.8」へのトラフィックを ECS-B 経由にできたことが確認できました。
→一方で、ルートテーブル B にはインターネット向けのルーティング情報はありません。「8.8.8.8」から ECS-A への応答が無かったことから、ECS-B からインターネットにアクセスできなかったこと、つまりインターネット向け通信が制御されたことが確認できました。
IPv4 Gateway を有効化後に、ルートテーブルに IPv4 Gateway 経由のルーティングを追加し、EIP 経由通信が可能になるかを確認します。
4-1. ルートテーブルAに、「8.8.4.4/32」向けのルートが IPv4 Gateway を経由するカスタムルートエントリを追加します。
Destination CIDR block | Next hop | Type | |
---|---|---|---|
ルートテーブル A | 192.168.0.0/24 | - | System Route |
192.168.1.0/24 | - | System Route | |
8.8.8.8/32 | ECS-B | Custom Route | |
8.8.4.4/32 | IPv4 Gateway | Custom Route |
4-2. 「8.8.4.4」へ疎通可能になったことを確認します。
上記の構築手順 3 で ECS-A のトラフィックがプロキシに到達しましたが、まだインターネットを抜けていません。最後に、下記 3 点を設定し、ECS-A がプロキシ経由でインターネットを抜ける手順を検証します。
5-1. ルートテーブル B に、「8.8.8.8/32」向けのルートを IPv4 Gateway 経由するカスタムルートエントリを追加します。
Destination CIDR block | Next hop | Type | |
---|---|---|---|
ルートテーブル B | 192.168.0.0/24 | - | System Route |
192.168.1.0/24 | - | System Route | |
8.8.8.8/32 | IPv4 Gateway | Custom Route |
5-2. ECS-B の「/etc/sysctl.conf」に「net.ipv4.ip_forward=1」を追加し、トラフィック転送の有効化をします。
5-3. ルートテーブルコンソールを開き、「Create Route Table」をクリックします。
5-4. 下記情報を入力し、「OK」をクリックします。
VPC:1-1 で作成した VPC
Associated Resource Type:Border Gateway
Name:任意入力
5-5. 「IPv4 Gateway」のインスタンスIDをクリックします。
5-6. 「Bind」をクリックします。
5-7. 下記情報を入力し、「OK」をクリックします。
Route Table: 5-4 で作成したルートテーブル
5-8. ルートテーブルバインド完了後に、デフォルトルートエントリが表示されます。「192.168.0.0/24」右側の「Edit」をクリックします。
5-9. 下記情報を入力し、「OK」をクリックします。
Next Hop Type:ECS Instances
ECS Instances: ECS-B
Name: 任意入力
5-10. ECS-A から、「8.8.8.8」へ Ping を飛ばし、ECS-B で TCPDUMP コマンドを利用して ICMP トラフィックを確認します。
今回は、VPC の新機能である IPv4 Gateway の有効化有無により、トラフィック流れの違いを比較し、そして指定 IPアドレス 宛のみプロキシ経由させる検証もやってみました。
新機能の嬉しい点は、IPv4 Gateway が ECS と EIP の間に入ることで、ルートテーブルの仕様が理解しやすくなりました。特に今までは難しかった、宛先に応じて EIP を経由させたりプロキシ経由させるようなケースは、実現可能になり、ルートテーブル設計の手間を省くことができました。もしインターネットトラフィック制御のニーズがありましたら、本記事を参考にしてみてください。
条件に該当するページがございません