Как вы настраивали VPC с несколькими подсетями и маршрутизацией?
План и пример настройки VPC с несколькими подсетями и маршрутизацией
-
Проектирование
-
Выделите CIDR для VPC (например, 10.0.0.0/16).
-
Решите, какие подсети нужны: публичные (для балансировщиков / bastion), приватные с выходом в интернет (для приложений через NAT), изолированные (для БД без внешнего доступа).
-
Распределите подсети по зонам доступности (AZ) — минимум по 2 AZ для отказоустойчивости. Пример: 10.0.1.0/24 и 10.0.2.0/24 — публичные в AZ-a/б, 10.0.11.0/24 и 10.0.12.0/24 — приватные.
-
Создание базовых ресурсов (пример AWS CLI)
aws ec2 create-vpc --cidr-block 10.0.0.0/16
aws ec2 create-subnet --vpc-id vpc-xxx --cidr-block 10.0.1.0/24 --availability-zone eu-central-1a
aws ec2 create-subnet --vpc-id vpc-xxx --cidr-block 10.0.11.0/24 --availability-zone eu-central-1a
Создайте Internet Gateway (IGW) и прикрепите к VPC:
aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway --vpc-id vpc-xxx --internet-gateway-id igw-xxx
-
Маршрутизация для публичных подсетей
-
Создайте route table для публичных подсетей и добавьте запись:
aws ec2 create-route-table --vpc-id vpc-xxx
aws ec2 create-route --route-table-id rtb-public --destination-cidr-block 0.0.0.0/0 --gateway-id igw-xxx
aws ec2 associate-route-table --subnet-id subnet-public-1 --route-table-id rtb-public
-
Убедитесь, что у инстансов в публичной подсети назначен публичный IP / Elastic IP и security group разрешает входящие порты.
-
NAT для приватных подсетей
-
Создайте NAT Gateway в публичной подсети (нужен Elastic IP). Для высокой доступности — NAT Gateway в каждой AZ и маршрут в соответствующей таблице приватной подсети, чтобы не платить за кросс-AZ трафик.
aws ec2 allocate-address
aws ec2 create-nat-gateway --subnet-id subnet-public-1 --allocation-id eipalloc-xxx
aws ec2 create-route --route-table-id rtb-private --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-xxx
-
Для тестовых задач можно использовать NAT instance (требует отключения source/dest check).
-
Специфичные маршруты и сервисные точки
-
Если нужен доступ к S3 без выхода в интернет — создайте VPC Endpoint (Gateway type) и добавьте маршрут/политику.
-
Для VPN/DirectConnect используйте Virtual Private Gateway (VGW) и включите route propagation в таблицах маршрутов, чтобы автоматически получать объявления от он-прем сети.
-
Ассоциации таблиц маршрутов
-
Каждая подсеть должна быть ассоциирована с правильной таблицей маршрутов (публичные → rtb-public, приватные → rtb-private-db и т.д.). Ассоциации могут быть заменяемыми (explicit association).
-
Безопасность и сегментация
-
Security Groups — stateful, прикрепляются к инстансу (разрешают только нужные порты).
-
NACL — stateless, применяются к подсетям, используют порядковые правила (используйте экономно и только для особых случаев).
-
Bastion/jump-host в публичной подсети с ограничением по IP и MFA/SSH keys. Рекомендуется Systems Manager / Session Manager для подключения без открытых портов.
-
Дополнительно: мониторинг и hardening
-
Включите VPC Flow Logs для аудита трафика.
-
Используйте минимум прав (IAM роли для инстансов).
-
Резервирование NAT Gateway в каждой AZ, DNS hostnames/resolve включены в VPC при необходимости.
-
Отладка типичных проблем
-
Нет интернет-доступа: проверьте, прикреплён ли IGW, есть ли маршрут 0.0.0.0/0 в таблице подсети, назначен ли публичный IP.
-
Приватные инстансы не выходят наружу: проверьте маршрут на NAT Gateway и статус NAT (и Elastic IP).
-
Проблемы соединения между подсетями: проверьте таблицы маршрутов (подсеть в VPC маршрутизируется автоматически в пределах VPC), security groups и NACL.
-
Для VPN/peering: убедитесь, что route propagation или статические маршруты добавлены и нет пересечения CIDR.
Код/инфраструктура лучше автоматизировать (Terraform/CloudFormation/ARM) — тогда конфигурация воспроизводима и контролируема.