AWS NAT 实例设置

AWS NAT 实例设置

这个问题最初发布到 stack overflow,他们建议我在这里重新发布(https://stackoverflow.com/questions/76715004/aws-nat-i​​nstance-setup)。

我目前正在学习 AWS 云,并决定构建以下架构作为挑战:

  • 具有公有子网和私有子网的 VPC。公有子网可通过互联网网关访问互联网。
  • 公共子网中的 NAT EC2 实例,应充当 NAT 网关,以允许私有子网中的实例访问互联网。
  • 私有子网中的一个实例,用于测试互联网连接。

我有以下文档作为参考:https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html

但是,经过无数次尝试,我还是无法让私人实例访问互联网。我将概述我采取的所有步骤。它们应该与文档中的内容相匹配。

  • 创建 VPC:使用 aws 控制台在 1 个 AZ 中创建具有 2 个子网(1 个公共子网、1 个私有子网)的默认 vpc。

在此处输入图片描述

所有设置均为默认设置,NACL 应允许所有内容,公共路由表将 0.0.0.0/0 指向 igw,两个路由表都将 vpc cidr 指向本地。

  • 在私有子网中创建私有实例:

我使用了默认设置,除了我选择了私有子网,没有分配公共 IP,并使用了自定义安全组(troubleshooting-sg),它应该允许所有内容(只是为了排除 sg)。

troubleshooting-sg

在此处输入图片描述 在此处输入图片描述

  • 创建 NAT 实例:

我使用 AMI () 在公共子网中启动此实例Amazon Linux 2023 AMI 2023.1.20230705.0 x86_64 HVM kernel-6.1

我将自动分配公共 IP 设置为 true。

我用troubleshooting-sg

创建时,我禁用网络配置中的目标/源检查(这无法在创建面板中禁用,否则我找不到它)。

在此处输入图片描述

我通过 ssh 进入 NAT 实例以配置 iptables。我运行以下命令:

sudo yum update -y
sudo sysctl -w net.ipv4.ip_forward=1
sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo yum install -y iptables-services
sudo systemctl enable iptables.service
sudo systemctl start iptables.service

在此处输入图片描述

NAT实例配置已完成。

  • 更新私有路由表以指向 NAT 实例。

在此处输入图片描述

0.0.0.0/0 应该被路由到 NAT 实例。

测试:

我通过 ssh 进入 NAT 实例。互联网访问已验证。

我使用 ssh 密钥从 NAT 实例通过 ssh 进入私有实例。

从这个例子来看,我无法访问互联网:

在此处输入图片描述

仅供参考,如果我从私有路由表中删除 NAT 实例,我会得到以下结果:

在此处输入图片描述

我不太确定该如何继续。问题似乎出在 NAT 实例的配置上,但我已经遵循(我认为)所有必要的步骤。

我很想了解一些关于如何进一步解决这个问题的想法。

谢谢!

答案1

大部分看起来还不错,我在这里看到的唯一明显的问题是以下命令:

sudo sysctl -w net.ipv4.ip_forward=1
sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

重启后将无法继续存在。此外,启用/启动 iptables 服务可能会删除您手动输入的任何 iptables 命令 - 您可以使用以下命令进行检查:

sudo iptables -L

并使用以下方式检查转发

cat /proc/sys/net/ipv4/ip_forward

一旦 iptables 配置正常工作,我相信保存设置的命令是:

iptables-save > /etc/sysconfig/iptables

对于 sysctl 内容,在 /etc/sysctl.d/ 中添加一个新文件(请参阅 /etc/sysctl.conf 了解语法)

答案2

经过多次尝试,配置脚本在 Amazon Linux 2023 上完美运行(AMI 类似“al2023-ami-2023*”),NAT实例为:

sudo yum install iptables-services -y
sudo systemctl enable iptables
sudo systemctl start iptables

# Turning on IP Forwarding
sudo touch /etc/sysctl.d/custom-ip-forwarding.conf
sudo chmod 666 /etc/sysctl.d/custom-ip-forwarding.conf
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/custom-ip-forwarding.conf
sudo sysctl -p /etc/sysctl.d/custom-ip-forwarding.conf

# Making a catchall rule for routing and masking the private IP
sudo /sbin/iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE
sudo /sbin/iptables -F FORWARD
sudo service iptables save

我希望这对你有帮助。

相关内容