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

Правило постмаршрутизации в таблице NAT

У меня странный вопрос по поводу 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

Совпадение. Я играл с этим на днях. Вышеупомянутое сработало, но в статьях, которые я читал, иногда говорится, что «это не обрабатывает весь трафик» без дополнительных объяснений.