Короткий вопрос:
Я пытаюсь настроить свой собственный экземпляр NAT на AWS, начиная со стандартного экземпляра AWS Linux 2, и кажется, что новый «правильный» способ настройки - использование firewalld вместо iptables, поэтому я ищу эквивалент ответ на этот вопрос, но с firewalld.
Более подробное описание:
Я на 99% уверен, что мои VPC, подсети и таблицы маршрутизации настроены правильно. На экземпляре ec2 я включил пересылку IP4, отключил пересылку ICMP и отключил проверку источника / назначения.
Я считаю, что единственный шаг, который мне не хватает, - это то, что старые AMI экземпляра NAT сообщества запускают сценарий при запуске, который делает следующее:
(iptables -t nat -C POSTROUTING -o eth0 -s ${VPC_CIDR_RANGE} -j MASQUERADE 2> /dev/null ||
iptables -t nat -A POSTROUTING -o eth0 -s ${VPC_CIDR_RANGE} -j MASQUERADE ) ||
die
На основе это практическое руководство, Я пытаюсь воспроизвести ту же функциональность с firewalld, и я сделал
firewall-cmd --zone=internal --add-source=10.0.4.0/22
firewall-cmd --zone=external --add-interface=eth0
firewall-cmd --direct --passthrough ipv4 -t nat -I POSTROUTING -o eth0 -j MASQUERADE -s 10.0.4.0/22
Я также пытался разрешить ping
для тестирования, с
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p icmp -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
Я могу успешно подключиться к экземпляру NAT по ssh, я могу пинговать внешний мир из него, и я могу пинговать его из частной подсети, но я не могу пинговать внешний мир из частной подсети. Я подозреваю, что что-то не так с моим пониманием работы firewalld, когда есть только один PHY (eth0), но ... я застрял. Так,
а) правильно ли мое базовое предположение, что я должен использовать firewalld вместо iptables? б) если да, то как мне заставить NAT работать с ним на одном интерфейсе?
Спасибо!
В EC2 вам необходимо, помимо правильной настройки iptable / nftable, убедиться, что проверки источника назначения отключены на уровне EC2.
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck