Настройка экземпляра AWS NAT
Этот вопрос изначально был опубликован из-за переполнения стека, они предложили мне опубликовать его здесь (https://stackoverflow.com/questions/76715004/aws-nat-instance-setup).
В настоящее время я изучаю облако AWS и решил создать следующую архитектуру:
- VPC с общедоступной и частной подсетью. Публичная подсеть имеет доступ к Интернету через интернет-шлюз.
- Экземпляр NAT EC2 в общедоступной подсети, который должен действовать как шлюз NAT, чтобы разрешить экземплярам в частной подсети доступ к Интернету.
- Экземпляр в частной подсети для проверки подключения к Интернету.
В качестве ссылки у меня есть следующая документация: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html .
Однако после бесчисленных попыток мне не удалось разрешить частному экземпляру доступ в Интернет. Я опишу все шаги, которые я предпринял. Они должны соответствовать указанным в документации.
- Создайте VPC: используйте консоль aws, чтобы создать виртуальный компьютер по умолчанию с 2 подсетями (1 общедоступная, 1 частная) в 1 зоне доступности.
Все настройки установлены по умолчанию, NACL должен разрешать все, а таблица общедоступных маршрутов указывает на igw 0.0.0.0/0, а обе таблицы маршрутов указывают на локальный cidr vpc.
- Создайте частный экземпляр в частной подсети:
Я использовал настройки по умолчанию, за исключением того, что выбрал частную подсеть, не назначал общедоступный IP-адрес и использовал специальную группу безопасности (), которая должна разрешать все (только чтобы исключить sg).
:
- Создайте экземпляр NAT:
Я запускаю этот экземпляр в публичной подсети, с AMI(Amazon Linux 2023 AMI 2023.1.20230705.0 x86_64 HVM kernel-6.1
).
Я установил для автоматического назначения общедоступного IP-адреса значение true.
Я используюtroubleshooting-sg
.
При создании я отключаю проверку места назначения/источника в конфигурации сети (это нельзя отключить на панели создания, или я не смог ее найти).
Я подключаюсь к экземпляру 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.
Тестирование:
Я подключаюсь к экземпляру 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).