Здравствуйте, grey_olli, Вы писали:
J>>>>Есть задача реализовать прозрачный прокси,
J>>А картинка довольно простая:
_>_>клиент (C) роутер (R) прокси (P) сервер (S)
_> 10.0.0.4 ------ 10.0.0.3 ----- 10.0.0.2 ----- 10.0.0.1
_>
J>>Разумеется, подсети могут быть (и вероятно и будут) разными.
_>то есть картинка
_>_>клиент (C) роутер (R) сервер (S)
_> 10.0.0.4 ------ 10.0.0.3,10.0.1.1,10.0.2.2 ----- 10.0.2.1
_> \
_> ----- 10.0.1.2
_> прокси (P)
_>
_>не рассматривается и трафик к прокси всегда в тот же интерфейс что и к серверу?
J>>...
_>по моему достаточно корректировки маршртов (+ NAT) на шлюзе. В какой ситуации вы считает, что нужно трогать еще и сервер?
Роутер (R) не принадлежит нам, и мы можем рассчитывать только лишь на простейший его функционал (маршрутизацию на наш прокси), NAT'а там может и не быть (и не быть возможности его установить). Т.е. рассчитывать на какую бы то ни было топологию сети мы не можем, тем более навязывать свои изменения (добавление NAT и изменение IP-адреса и подсети сервера).
Наша же задача — внедрением своего прокси (P) как можно меньше повлиять на систему и сохранить максимум информации о существующей топологии в трафике (т.е. как раз избежать добавления NAT).
_>Без iptables или реализации части его функционала в своем коде вам не обойтись.
На своей машине (прокси (P)) я могу вытворять что угодно — хоть ядро со своими патчами, не говоря об использовании iptables. Но от других машин я могу ожидать лишь простейших изменений конфигурации (добавление маршрута, например), основывать архитектуру на добавлении правил iptables или функций NAT где-то на роутере (R) или тем более сервере (S) нет никакой возможности.
Отсюда и требование, чтобы сети казалось, что прокси (P) просто форвардит весь трафик (что и наводит на мысль о роутере). Хотя с другой стороны переконфигурацией своего прокси мы должны поддержать и описанную вами схему, когда вся наша связь с сетью проходит через "их" роутер с NAT'ом. Но это лишь один из возможных вариантов, реализация которого не вызывает вопросов. Меня же интересует "худший случай", когда топология прямолинейная и сервер использует IP-адреса клиентов, скажем, для реализации како-либо политики безопасности.