iptables を使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをターゲットとする Gateway Load Balancer をテストしたいと考えています。インスタンスは Amazon Linux 2023 を実行します。
簡単な説明
Amazon Linux 2023 を実行している Amazon EC2 インスタンスで iptables ルールを設定して、Gateway Load Balancer が環境内でどのように機能するかをテストします。Iptables ルールは、ファイアウォールの接続問題を特定するのにも役立ちます。Gateway Load Balancer がインスタンス経由でトラフィックを正常にルーティングしている場合は、接続の問題はファイアウォールに関連するものです。
iptables は、Gateway Load Balancer のテストにのみ使用してください。
解決方法
Gateway Load Balancer の IP アドレスを書き留めておきます。
iptables ルールで変数を設定するには、Gateway Load Balancer のエラスティックネットワークインターフェイス用の IP アドレスおよび、そのアベイラビリティーゾーンが必要です。
IP アドレスを特定するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインで、[ネットワークインターフェイス] を選択します。
- [検索] を選択し、ドロップダウンリストから [説明] を選択します。
- [Description =] フィールドにお使いの Gateway Load Balancer の名前を入力してから、該当する Gateway Load Balancer を選択します。
Gateway Load Balancer で有効な各サブネットのネットワークインターフェイスのリストが表示されます。各ネットワークインターフェイスには、IP アドレスとアベイラビリティーゾーンが関連付けられています。
iptables ルールを設定する
SSH を使用して、Gateway Load Balancer の背後でターゲットまたはファイアウォールとして使用する EC2 インスタンスにアクセスします。以下のコマンド例では、Availability Zone A はソースゾーンであり、Availability Zone B と C は、そのソースゾーンがトラフィックを送信する先のゾーンです。
Gateway Load Balancerと EC2 インスタンスの IP アドレスを設定する
Gateway Load Balancerとインスタンスの IP アドレスを入力します。
export GWLB_IP_A=<GLWB ENI IP from Availability Zone A>
export INSTANCE_IP=<EC2 instance's IP>
注: Availability Zone A の GLWB IP および EC2 インスタンスの IP は、お使いのもので置き換えてください。
(オプション) クロスゾーントラフィック用の追加テーブルの設定
クロスゾーントラフィックを有効にした場合は、次のコマンドを実行します。
export GWLB_IP_B=<GLWB ENI IP from Availability Zone B>
export GWLB_IP_C=<GLWB ENI IP from Availability Zone C>
注: Availability Zone B GLWB ENI IP および Availability Zone C の GLWB ENI IP は、実際の値で置き換えてください。すべてのターゲット EC2 インスタンスにあるすべてのアベイラビリティゾーンに、Gateway Load Balancer のネットワークインターフェイス用の iptables ルールが必要です。
iptables を設定する
iptables をインストールして有効にするには、次のコマンドを実行します。
sudo sysctl -w net.ipv4.ip_forward=1
sudo yum install -y iptables-services
sudo systemctl enable iptables
sudo systemctl start iptables
各組み込みチェーンのデフォルトポリシーを ACCEPT に設定する
デフォルトポリシーを設定するには、次のコマンドを実行します。
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
NAT をフラッシュし、テーブル、チェーンを破棄し (-F)、設定を削除する
NAT テーブルをフラッシュし、テーブル、チェ-ンをフラッシュし、設定を削除するには、次のコマンドを実行します。
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
トラフィックを Gateway Load Balancerに再ルーティングするように NAT テーブルを設定する
トラフィックを再ルーティングするには、次のコマンドを実行します。
sudo iptables -t nat -A PREROUTING -p udp -s $GWLB_IP_A -d $INSTANCE_IP -i enX0 -j DNAT --to-destination $GWLB_IP_A:6081
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s $GWLB_IP_A -d $GWLB_IP_A -o enX0 -j MASQUERADE,/code>
(オプション) NAT ルールを追加してクロスゾーントラフィックを管理する
クロスゾーントラフィックの NAT ルールを追加するには、次のコマンドを実行します。
sudo iptables -t nat -A PREROUTING -p udp -s $GWLB_IP_B -d $INSTANCE_IP -i enX0 -j DNAT --to-destination $GWLB_IP_B:6081
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s $GWLB_IP_B -d $GWLB_IP_B -o enX0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p udp -s $GWLB_IP_C -d $INSTANCE_IP -i enX0 -j DNAT --to-destination $GWLB_IP_C:6081
sudo iptables -t nat -A POSTROUTING -p udp --dport 6081 -s $GWLB_IP_C -d $GWLB_IP_C -o enX0 -j MASQUERADE
iptables を保存する
iptables を保存するには、以下のコマンドを実行します。
sudo service iptables save
状態を確認する
iptables ルールが正しく設定されていることを確認するには、以下のコマンドを実行します。
sudo service iptables status
Gateway ロードバランサーのヘルスチェックを実行する
Gateway ロードバランサーの正常性を確認するには、次のコマンドを実行します。
sudo su
yum install -y httpd
service httpd start
chkconfig httpd on
echo "Health check page" >>/var/www/html/index.html
exit