我想使用 iptables 来测试我的网关负载均衡器,它以 Amazon Elastic Compute Cloud (Amazon EC2) 实例为目标。该实例运行 Amazon Linux 2023。
简短描述
在运行 Amazon Linux 2023 的 Amazon EC2 实例上配置 iptables 规则,以测试网关负载均衡器在您的环境中的工作情况。Iptables 规则还可以帮助您确定防火墙的连接问题。如果网关负载均衡器成功地通过实例路由流量,则表明连接问题与防火墙有关。
仅使用 iptables 来测试您的网关负载均衡器。
解决方法
记下网关负载均衡器 IP 地址
要配置 iptables 规则中的变量,您需要网关负载均衡器的弹性网络接口的 IP 地址及其可用区。
要查找 IP 地址,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格中选择 Network Interfaces(网络接口)。
- 选择 Search(搜索),然后从下拉列表中选择 Description(描述)。
- 在 Description =(描述 =)字段中,输入您的网关负载均衡器的名称,然后选择您的网关负载均衡器。
您会收到网关负载均衡器中每个已激活的子网的网络接口列表。每个网络接口都有一个 IP 地址和与之关联的可用区。
配置 iptables 规则
使用 SSH 来访问您将在网关负载均衡器后面用作目标或防火墙的 EC2 实例。在以下示例命令中,可用区 A 是源区,源区将流量发送到可用区 B 和 C。
为网关负载均衡器和 EC2 实例设置 IP 地址
输入网关负载均衡器和实例的 IP 地址:
export GWLB_IP_A=<GLWB ENI IP from Availability Zone A>
export INSTANCE_IP=<EC2 instance's IP>
注意:将可用区 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>
注意:将可用区 B 中的 GLWB ENI IP 和可用区 C 中的 GLWB ENI IP 替换为您的值。对于每个目标 EC2 实例上的每个可用区,您都必须为它们设置网关负载均衡器的网络接口的 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 和 mangle 表、链 (-F) 和删除设置
要刷新 NAT 和 mangle 表、链接和删除设置,请运行以下命令:
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X
配置 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
进行网关负载均衡器运行状况检查
要检查网关负载均衡器的运行状况,请运行以下命令:
sudo su
yum install -y httpd
service httpd start
chkconfig httpd on
echo "Health check page" >>/var/www/html/index.html
exit