Как вы настраивали VPC с несколькими подсетями и маршрутизацией?

План и пример настройки VPC с несколькими подсетями и маршрутизацией

  1. Проектирование

  2. Выделите CIDR для VPC (например, 10.0.0.0/16).

  3. Решите, какие подсети нужны: публичные (для балансировщиков / bastion), приватные с выходом в интернет (для приложений через NAT), изолированные (для БД без внешнего доступа).

  4. Распределите подсети по зонам доступности (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 — приватные.

  5. Создание базовых ресурсов (пример 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
  1. Маршрутизация для публичных подсетей

  2. Создайте 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) — тогда конфигурация воспроизводима и контролируема.