Всех приветствую.
Есть ситуёвина:
С одного сервера (IP - $ServIP) , необходимо перебросить одно TCP-соединение на заданный комп ( $ServHelper ), причём так, чтобы удалённая сторона ( $ServClient ), с которой он работает, об этом не знала (ну то есть думал что что весь инициатор трафика сервер $ServIP).
На сервере - Linux, iptables. Root'овый доступ разумеется имеется

.
В общем, делаю так (
ferm, но думаю все и так понятно ):
Код:
chain FORWARD {
interface $INET{
proto ( tcp icmp ) saddr ( $ServClient $ServHelper ) ACCEPT;
}
}
table nat {
chain PREROUTING interface $INET daddr $WINIP{
proto tcp saddr ( $ServHelper ) DNAT to-destination $ServClient;
proto tcp saddr ( $ServClient ) DNAT to-destination $ServHelper;
}
chain POSTROUTING outerface $INET saddr $ServHelper SNAT to-source $ServIP;
}
Ну у меня еще подобная схема в другой сети, куда соединение перебрасывается, но это не суть.
Так вот, это все прекрасно работает.
НО, как только я в $ServClient вписываю айпишник, который доступен по IPSec - хрен, все сразу мертворожденное. Причем, смотрел tshark'ом, вроде на $ServClient все форвардится, а вот его ответы не возвращаются...
Может кто-нибудь подсказать в чем может быть дело? IPSec так не получится зарулить?
Мне кажется что сервер должен просто НАТить и ему должно быть пофигу IPSec дальше или нет. Дело в том, что IPSec туннель просто он же держит (racoon).
Но факт остаётся фактом - либо что-то дополнительное надо учесть, либо еще что, но просто так, сменив айпиху - не работает.
У меня есть пуру подозрений:
- Могут быть проблемы с сетевыми уровнями и очерёдностью обработки. Что раньше происходит - трансляция адресов, или шифрование IPSec?
- Еще есть предположение, что в шифрованном туннеле, может не совпадать айпишник, тогда, видимо, его надо на каком-то другом уровне сравнивать, или на другом интерфейсе даже...
В общем, очень прошу подсказать кого-то, кто со всем этим сталкивался - переброс позарез нужно организовать.