AWS позволяет разработчику создать экземпляр NAT в общедоступной подсети и предоставить частной подсети возможность доступа в Интернет.
Вот процедура создания экземпляра NAT. Для конфигурации iptables это изменение всего в одну строку.
В консоли EC2 отключите проверку источника/назначения, щелкнув правой кнопкой мыши экземпляр, который вы хотите использовать для NAT, и выбрав «Изменить проверку источника/назначения».
Создайте группу безопасности с правилом для входящего трафика, разрешающим ВСЕ из 10.0.0.0/16, и свяжите его с вашим экземпляром NAT.
В экземпляре NAT создайте /etc/network/if-pre-up.d/nat-setup как:
#!/бин/ш
эхо 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/16 -j MASQUERADE
chmod +x скрипт, затем запустите его. Этот сценарий будет автоматически запускаться при перезагрузке компьютера, поэтому ваш NAT выдержит перезагрузку.
Убедитесь, что все ваши частные подсети имеют маршрут по умолчанию для использования экземпляра NAT в качестве шлюза (создайте маршрут для 0.0.0.0/0 и свяжите его с вашим экземпляром NAT в таблицах маршрутов, связанных с вашими частными подсетями).
проверьте свой NAT, пропинговав что-нибудь из экземпляра EC2 в частной подсети
Соединения, инициированные изнутри
Если соединение инициируется изнутри, я предполагаю, что экземпляр NAT работает таким образом.
Экземпляр EC2 A (в частной подсети) хочет получить доступ к веб-серверу C в Интернете.
Экземпляр EC2 A в частной подсети отправляет пакеты экземпляру NAT B.
Экземпляр NAT B пересылает пакеты и выполняет работу SNAT, например.
- изменить исходный ip в пакете.
- зарегистрируйте это активное соединение в таблицах conntrack.
Пакеты приходят на сервер С в инете.
Сервер C отправляет пакеты обратно экземпляру NAT B.
Так как соединение находится в столы conntrack
, все пакеты принимаются.
Соединения, инициированные снаружи
Если кто-то в Интернете напрямую инициирует соединение и отправляет пакеты на экземпляр NAT, например, логин ssh или ping.
что будет делать экземпляр NAT?
Как iptables экземпляра NAT будет обрабатывать трафик на основе конфигурации, описанной в предыдущем абзаце?
Справка
- Суть Github: создание инстанса AWS NAT
- Kabisa: экономия средств благодаря NAT-инстансам
- AWS: экземпляры NAT