Привет. везде linux c ядром 2.6.16.18
для упрощения задачи, везде полиси файрволов ставим в ACCEPT.
дано:
router.ext 20.0.0.1 внешний и router.int 10.0.0.1 внутренний
server 10.0.0.2
host 10.0.0.3необходимо с host сделать: telnet router.int 80 (или router.ext) и попасть на сервис на server
делаем стандартный проброс портов:
$any="0.0.0.0/0"
iptables -t nat -A PREROUTING -p tcp -d 20.0.0.1 --dport 80 -s $any -j DNAT --to 10.0.0.2:80
iptables -t nat -A PREROUTING -p tcp -d 10.0.0.1 --dport 80 -s $any -j DNAT --to 10.0.0.2:80
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.2 --dport 80 -s 10.0.0.0/24 -j SNAT --to 10.0.0.1
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d $any -j SNAT --to 20.0.0.1
радуемся жизни: выход через 20.0.0.1 для сети 10.0.0.0/24 работает, порт пробрасывается для всех.
но вот в router появляется router.ext2 30.0.0.1 и мы только для host делаем его гейтвеем
ip rule add from 10.0.0.3 table 1
ip route add default via 30.0.0.1 dev eth2 table 1
ну и в таблицу нат-а, в самое начало добавляем
iptables -t nat -A POSTROUTING -s 10.0.0.3 -d $any -j SNAT --to 30.0.0.1
наружу от 30.0.0.1 всё работает, внутри сети 10.0.0.10 всё также работает, однако проброс порта c host на server не работает.. отваливается с ошибкой no route to host
Помогите вникнуть, где грабли? ведь добавленный гейтвей никаким боком не должен тут влиять, ведь к router.ext обращаюсь как host, а не как заНАТченный router.ext2... или я неправильно понял маршрутизацию