>>#ip rule list
>>0: from all lookup 255
>>32762: from 10.20.20.20 lookup isp2
>>32763: from 10.20.20.9 lookup isp2
>>32764: from 10.10.10.0/24 lookup isp1
>>32765: from 100.0.0.100 lookup isp1
>>32766: from all lookup main
>>32767: from all lookup default
>это нужно было сразу запостить, тут нагляднее гораздо
>если написать from 10.0.0.2 lookup isp2 то все пойдут через второго. но
>когда пакет попадает в роутинг - src address еще не странслирован,
>т.е. именно 10.0.0.2 (не важно, проходил ли пакет через таблицу нат,
>"встречные" транслируются автоматически по connection tracking'у, но все равно - dst
>адрес до маршрутизации, а src - _после_ оной).
>соотв в твоем неудачном случае - либо разносить полиси роутинг и НАТ
>на разные хосты, или пробрасывать порт каким-нибудь tcpd или тому подобной
>"недопроксей". честно этого не сделать. ...
размышляя о дальнейшем возможном ходе дискуссии с Эдмоном придумал решение, которое будет работать в вашем случае (если у вас ядро 2.6, а не 2.4)
предпосылками являются а) то, что хук mangle в PREROUTING срабатывает _до_ nat (в POST тоже, но в данном случае это не важно. картинку можно посмотреть все в том же netfilter hacking how-to), и б) наличие модуля connmark в ядре 2.6.
в mangle/PREROUTING мы имеем еще нетронутые внешние адреса веб-сервиса. соотв. используя state match, можно анализировать коннектообразующие пакеты и метить connmark'ами соотв.
потом, там же в mangle/PREROUTING, используя connmark выставлять packet mark для _всех_ пакетов соединения, уже не анализируя их адресов (этот шаг необходим т.к. в RPDB можно указывать в качестве ключа packet mark, но не conn mark - routing code вообще ничего не знает о коннэкшнах и их отслеживании).
и наконец RPDB (Routing Policy Database) использующая packet mark для выбора таблицы маршрутов.
итого:
iptables -t mangle -A PREROUTING -m state --state NEW -d 10.10.10.10 -j CONNMARK --set-mark 10
iptables -t mangle -A PREROUTING -m state --state NEW -d 10.20.20.20 -j CONNMARK --set-mark 20
iptables -t mangle -A PREROUTING -m connmark --mark 10 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m connmark --mark 20 -j MARK --set-mark 2
ip rule add fwmark 1 prio ... table isp1
ip rule add fwmark 2 prio ... table isp2
ну с остальным сам разберешься..
\^P^/