У меня есть сервер 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