У меня странный вопрос по поводу NAT с использованием iptables.
Когда я выполняю SNAT в цепочке постмаршрутизации в таблице NAT в конце правила, должен ли я давать -J ACCEPT?
Я вижу, что счетчики правила постмаршрутизации увеличиваются, но пакет не покидает машину. Значит ли это, что пакет автоматически отбрасывается?
Нет. Для каждого правила существует только одна цель (-j). В -j SNAT
является эксклюзивным, вы не можете указать две цели для правила. Если вам нужно принять пакет, цель «ACCEPT» должна использоваться в цепочке «FORWARD» таблицы «filter».
Пакеты отбрасываются только в том случае, если есть правило для их отбрасывания или если политика по умолчанию для цепочки «FORWARD» - «DROP». В обоих случаях эти счетчики обновляются.
Скорее всего, маршрутизация не включена или ваши таблицы маршрутизации не заполнены.
Чтобы включить маршрутизацию:
sysctl net.ipv4.ip_forward=1
Думаю, все, что вам нужно, это (eth0 смотрит наружу):
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
и конечно
echo 1 > /proc/sys/net/ipv4/ip_forward
Совпадение. Я играл с этим на днях. Вышеупомянутое сработало, но в статьях, которые я читал, иногда говорится, что «это не обрабатывает весь трафик» без дополнительных объяснений.