Назад | Перейти на главную страницу

Исходящий доступ в Интернет через шлюз NAT для инстансов EC2 + сохранение входящего доступа на отдельных публичных IP-адресах

Я пытаюсь настроить исходящий доступ в Интернет через «NAT-шлюз» для нескольких экземпляров EC2, чтобы, например, curl ifconfig.co возвращает один и тот же IP-адрес для всех экземпляров и внешнего сервера статистики, к которому они подключаются, чтобы показать один и тот же IP-адрес.

В то же время эти экземпляры должны быть доступны по своим общедоступным IP-адресам (каждый экземпляр ec2 имеет собственный общедоступный IP-адрес), быть доступными для ssh, обслуживать веб-контент и быть доступными друг для друга на своих частных IP-адресах.

У экземпляров были только интерфейсы eth0 с адресами подсети 10.0.1.0/24 (www1). Я не вижу интерфейс общедоступного IP-адреса с помощью ifconfig, но я предполагаю, что это ожидаемое поведение для экземпляров ec2. Все они стоят за Elastic Load Balancer.

Я создал вторую подсеть www2 с блоком CIDR = 10.0.3.0/24.

Я создал шлюз NAT, назначил ему эластичный IP-адрес и выбрал подсеть www2. Частный IP-адрес шлюза NAT правильно отображается как 10.0.3.132.

Я создал сетевой интерфейс в EC2-> Сетевые интерфейсы для одного из экземпляров с выбранной подсетью 10.0.3.0 + частное автоматическое назначение IP + группа безопасности, такая же, как и для других экземпляров, которые имеют SSH TCP 22 0.0.0.0/0 для входящих правила и весь трафик 0-65535 0.0.0.0/0 для исходящего трафика.

Экземпляр действительно получил второй интерфейс eth1 после того, как ему автоматически был назначен правильный ip = 10.0.3.31. Вот показ IP-маршрута из этого экземпляра:

ip route show
default via 10.0.1.1 dev eth0
default via 10.0.3.1 dev eth1  metric 10001
10.0.1.0/24 dev eth0  proto kernel  scope link  src 10.0.1.69
10.0.3.0/24 dev eth1  proto kernel  scope link  src 10.0.3.31
169.254.169.254 dev eth0

Вот ifconfig:

ifconfig
eth0      Link encap:Ethernet  HWaddr 0A:65:1C:28:80:7E
          inet addr:10.0.1.69  Bcast:10.0.1.255  Mask:255.255.255.0
          inet6 addr: fe80::865:1cff:fe28:807e/64 Scope:Link
          inet6 addr: 2600:1f18:4328:e200:4f10:db4d:6a56:d900/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:10978429 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8536463 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:26095196998 (24.3 GiB)  TX bytes:2202490320 (2.0 GiB)

eth1      Link encap:Ethernet  HWaddr 0A:9D:28:92:38:0E
          inet addr:10.0.3.31  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::89d:28ff:fe92:380e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:262217 errors:0 dropped:0 overruns:0 frame:0
          TX packets:197708 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:237017161 (226.0 MiB)  TX bytes:50706247 (48.3 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:420172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:420172 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:1399654528 (1.3 GiB)  TX bytes:1399654528 (1.3 GiB)

После этого, если я перейду на панель управления VPC-> Таблицы маршрутов-> Редактировать маршруты для соответствующей таблицы маршрутизации для всех моих экземпляров и установить «nat-06931899c65346b40» вместо igw-fd92cc9a для 0.0.0.0/0 в пункте назначения, я отключусь от сеанс ssh и веб-сайт, размещенный на экземпляре, становятся недоступными. Я думаю, это ожидаемо, так как теперь он находится за NAT.

Кстати, мне не понравилось, что группа безопасности шлюза NAT в EC2-> сетевых интерфейсах пуста, но когда я пытаюсь установить ее так же, как другие экземпляры (или любые другие) с " изменить группы безопасности "Я получаю" У вас нет разрешения на доступ к указанному ресурсу ".

Поэтому я хотел бы, чтобы мои экземпляры были доступны через их общедоступные IP-адреса через http и ssh, но чтобы сообщать тот же IP-адрес с curl ifconfig.co.

Цель не состоит в том, чтобы редактировать таблицу маршрутизации на каждом экземпляре вручную, поскольку мы готовимся к автоматическому масштабированию и используем параметры, предоставляемые веб-консолью aws.

Но даже если я сделаю это вручную, как именно мне отредактировать маршруты для достижения моей цели?

Общая схема сети до добавления шлюза NAT была следующей: Интернет-шлюз VPC <-> ELB <-> экземпляры ec2 (с общедоступными IP-адресами). Веб-контент из экземпляров обслуживается через ELB, но сами экземпляры доступны для ssh напрямую через свои общедоступные IP-адреса.

Заранее спасибо!

Я не вижу способа сделать это без изменения таблиц маршрутизации.

Вам понадобятся две таблицы маршрутов (RT1 и RT2):

RT1, связанный с подсетью 10.0.1.0/24: Destination: 0.0.0.0/0, Target igw-fd92cc9a
RT2, связанный с подсетью 10.0.3.0/24: Destination: 0.0.0.0/0, Target nat-06931899c65346b4

Измените таблицу маршрутизации вашего экземпляра, чтобы дать маршруту по умолчанию через 10.0.3.1 более низкую (более предпочтительную) метрику.