У меня есть сервер Ubuntu, настроенный как маршрутизатор шлюза с eth0 (ext подключен к маршрутизатору dsl) и eth1 (внутренняя сеть)

У меня есть Source NAT включен, чтобы разделить внешний IP со всеми внутренними хостами, также сервер ubuntu отправляет DHCP клиентам только на eth1)

При создании брандмауэра iptables в окне ubuntu, если я попытаюсь указать подсети (например, внутренние в 192.168.2.0) или интерфейсы (eth1), тогда весь трафик перейдет к политике FORWARD по умолчанию (DROP). Если я пропущу какие-либо аргументы (например, iptables -A FORWARD -p icmp -j ACCEPT), тогда этот протокол будет работать и не будет проходить через интерфейсы.

Эта проблема также относится к цепочке INPUT, поэтому, если я попытаюсь указать ICMP ACCEPT из 192.168.2.0/24, это истечет время ожидания, но если я просто укажу принять ICMP, я смогу пропинговать eth1)

Я прилагаю правила для пересылки ниже ... Я потратил много времени, пытаясь понять проблему, но безрезультатно. Кто-нибудь может посоветовать, какую фундаментальную ошибку я здесь совершаю?)

-A FORWARD -p tcp -j ACCEPT -m comment --comment "all tcp from internal"
-A FORWARD -p udp -j ACCEPT -m comment --comment "all udp from internal"
-A FORWARD -i eth1 -p icmp -j ACCEPT

(выше не работает)

-A FORWARD -p icmp -j ACCEPT

(протокол указан отдельно, и он работает)

-A FORWARD -p icmp -j REJECT
-P FORWARD DROP

0