The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"TCP Redirect под FreeBSD"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"TCP Redirect под FreeBSD"
Сообщение от Евгений Искать по авторуВ закладки on 02-Июн-01, 22:39  (MSK)
Добрый день!
Тут вот такая задача возникла:
В пределах одной сети есть 2 сервера под фрей - один (REAL) - несет на себе apache, почту (postfix), фтп и прочие рулеза; другой (FAKE) - это тот, на который будут заходить юзеры, в надежде воспользоваться своей почтой, WWW и т.д.
Надо: прозрачно делать редирект с FAKE на REAL

Казалось бы - все просто: пишешь на FAKE (для WWW, к примеру)
rdr xl0 FAKE_ADDR/32 80 -> REAL_ADDR tcp
(если использовать ipnat) или
ipfw add divert natd tcp from any to FAKE_ADDR
natd -n xl0 redirect_port tcp REAL_ADDR:80 80

и все. Не тут то было.
Пакеты действительно уходят с FAKE на REAL, REAL отвечает клиенту, но клиент, получив ответ от REAL вместо FAKE, которому он посылал запрос, посылает RST REALу и повторяет запрос FAKEу !

Помучившись, я изобразил какой-то ужас типа:
ipfw add 100 divert 8668 tcp from any to FAKE_ADDR 80
natd -n xl0 -p 8668 -redirect_port REAL_ADDR:80 80
Это входящий на FAKE пакет пересылается на REAL (CLIENT->FAKE => CLIENT->REAL)
ipfw add 200 divert 8669 tcp from any to REAL_ADDR 80
ipfw add 300 divert 8669 tcp from REAL_ADDR 80 to FAKE_ADDR in
natd -n xl0 -p 8669 xl0
Это aliasing уходящего на REAL и приходящего траффика (то есть FAKE->REAL и обратно REAL->FAKE).
ipfw add 400 divert 8670 tcp from REAL_ADDR 80
to any out
natd -n xl0 -p 8670 xl0
Это REAL->CLIENT => FAKE->CLIENT
И все заработало. Однако ущербность такого решения налицо - удвоенный траффик по сети и куча жрущих ресурсы сервисов. Не предложит ли кто более изящное решение (напр. на основе netcat)?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: TCP Redirect под FreeBSD"
Сообщение от sedan Искать по авторуВ закладки on 03-Июн-01, 21:32  (MSK)
все наступают на одни и те же грабли...
1) Kernel ->>
       .....
       options IPFIREWALL_FORWARD
       .....
2) Ruleset firewall ->>
       ......      
       ipfw add fwd 127.0.0.1,3128 tcp from any to any 80 via fxp0
       ......
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
пример транспарент прокси :)
думаю ента заморочка подойдет :))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: TCP Redirect под FreeBSD"
Сообщение от Lamer Искать по авторуВ закладки on 04-Июн-01, 10:32  (MSK)
Я подругому делаю
в пакаджах в net есть прога rinetd
редиректит всё кроме ftp
в /usr/local/etc/rinetd.conf
напиши одну строчку типа
192.168.1.1 80 192.168.1.1 8080 -прозрачно зарулит в кэш
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Беда не в том, чтобы что-то куда-то зарулить -"
Сообщение от Евгений Искать по авторуВ закладки on 05-Июн-01, 01:35  (MSK)
[font size="1" color="#FF0000"]Последняя редакция от 05-Июн-01 01:43  ()[/font][p]Это ipnat одной строчкой делает. Проблема в том, что все вышеописанные штуки хорошо работают, когда заворачивается траффик, приходящий на какой-то порт данной машине, на другой порт ЭТОЙ ЖЕ МАШИНЫ - например, для прозрачного проксирования. В этом случае машина отвечает с того же адреса, которому был адресован пакет; клиента это устраивает. Если же пакет заворачивается на другой комп, тот отвечает ему со своего адреса; клиент, получив такой ответ, задается классичаским вопросом: "Что за ботва ?!!" и шлет ни в чем на повинному серверу RESET - RST бишь.
То есть пулять траффик надо двусторонне, в чем вся штука.
З.Ы. А fwd в ipfw я первым делом попробовал - заворачивать что-то за пределы данной машины он вообще отказался (или это я где-то лоханулся)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Беда не в том, чтобы что-то куда-то зарулить -"
Сообщение от sedan Искать по авторуВ закладки on 05-Июн-01, 14:06  (MSK)
форвардинг работает не только на одной машине :)
У меня прокся находитса на другой тачиле
значит
не ipfw add fwd 127.0.0.1,3128 tcp from any to any 80 via fxp0
а ipfw add fwd 64.110.67.138,3128 tcp from any to any 80 via fxp0
И РАБОТАЕТ :)))
А вообще и такая фича покатит
ipfw add fwd xxx.yyy.zzz.aaa tcp from any to any
:)))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Не, не прокатит :-("
Сообщение от Евгений Искать по авторуВ закладки on 05-Июн-01, 20:59  (MSK)
Тут нюанс есть небольшой: ты редиректишь все на проксю, которая просто выкидывает запрос клиента в интернет; ответ он получает от удаленного сервера, к которому он и обращался изначально. Мне же надо передавать куда-то на обработку запрос, пришедший на ДАННУЮ машину; соответственно, клиент ждет ответа от данного компа, а не от сервера, куда я этот запрос завернул, во как...
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру