Я пытаюсь сделать эквивалент этого правила iptables в firewalld
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Как я могу это сделать?
Чтобы настроить маскировку на внешней зоне, введите:
# firewall-cmd --zone=external --add-masquerade
внешний: Для использования во внешних сетях с включенным маскированием, особенно для маршрутизаторов. Вы не доверяете другим компьютерам в сети не навредить вашему компьютеру. Принимаются только выбранные входящие соединения.
внутренний: Для использования во внутренних сетях. Вы в основном доверяете другим компьютерам в сети, чтобы не нанести вред вашему компьютеру. Принимаются только выбранные входящие соединения.
Для справки:
В качестве альтернативы вы можете добавить правило в свой: /etc/firewalld/direct.xml файл например.
<?xml version="1.0" encoding="utf-8"?>
<direct>
...
<rule priority="0" table="filter" ipv="ipv4" chain="POSTROUTING">-table nat -jump MASQUERADE --source 10.8.0.0/24 --out-interface eth0</rule>
</direct>
Затем:
firewall-cmd --reload
Вы не используете такие правила напрямую. Вы просто помещаете свой интерфейс (eth0) в внешний zone, которая уже предварительно настроена в RHEL7 / CentOS7 и для нее включен маскарад, или вы можете включить маскарад в зоне, в которой находится ваш интерфейс. По умолчанию она общедоступна. Итак, правильный ответ будет либо:
# firewall-cmd --zone=public --add-masquerade
или
# firewall-cmd --change-zone=eth0 --zone=external
Это действительно все, что вам нужно сделать. Чтобы включить NAT только для определенной подсети или диапазона, вам потребуется Rich Rule или Direct rule. Это немного сложнее. Вы также можете просто отказаться от пакетов для других, что тоже вариант.