The OpenNET Project / Index page

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

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

"ipfw не форвардит ;-("
Сообщение от Солнышко Искать по авторуВ закладки on 07-Фев-02, 13:54  (MSK)
Ставил transparent proxy. Система у меня FreeBSD 4.4. Поставил OOPS, пропатчил ядро заплаткой gre.c, настроил кошак. Не работает. Проверяю с кошки - она мой кэш-сервер видит. Проверяю с кэш-сервера - пакеты в gre инкапсуляции на сервер идут. Поковырялся в модуле gre.o. Он пакеты нормально распаковывает. Значит дело в форвардинге пакетов.
Разобрался. Проблема в том, что ipfw не форвардит пакеты на Squid или OOPS.
Я в ядре указал опции:
IPFIREWALL
IPFIREWALL_FORWARD
IPFIREWALL_DIVERT
Собрал, прописал в /etc/sysctl.conf:
net.inet.ip.forwarding=1
В /etc/rc.firewall прописал
ipfw add 40 fwd <адрес кэш-сервера>,80 tcp from <адрес кэш-сервера> to any
Не работает! ;-(
Даже если напишу:
ipfw add 40 fwd <адрес ftp-сервера>,21 ip from any to any и наберу
>telnet <адрес кэш-сервера> 21, проваливаюсь на ftp на кэше!
Причем команда ipfw show показывает, что правило пакеты все-таки отлавливает, но не перенаправляет! В чем дело - не пойму. Помогите плиз!!!

И еще. Покопался в исходниках. Файлы /usr/src/sys/netinet/ip_fw.c и ip_output.c Там есть ссылки на опцию ядра IPFIREWALL_FORWARD_DEBUG, но такой опции ни в LINT, ни в /usr/src/sys/conf/options я не нашел. Странно все это. Да и некоторые комментарии в выше обозначенных файлах позабавили...

С уважением, Солнышко

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

 Оглавление

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

1. "RE: ipfw не форвардит ;-("
Сообщение от puchkov emailИскать по авторуВ закладки on 07-Фев-02, 15:05  (MSK)
>Ставил transparent proxy. Система у меня
>FreeBSD 4.4. Поставил OOPS, пропатчил
>ядро заплаткой gre.c, настроил кошак.
>Не работает. Проверяю с кошки
>- она мой кэш-сервер видит.
>Проверяю с кэш-сервера - пакеты
>в gre инкапсуляции на сервер
>идут. Поковырялся в модуле gre.o.
>Он пакеты нормально распаковывает. Значит
>дело в форвардинге пакетов.
>Разобрался. Проблема в том, что ipfw
>не форвардит пакеты на Squid
>или OOPS.
>Я в ядре указал опции:
>IPFIREWALL
>IPFIREWALL_FORWARD
>IPFIREWALL_DIVERT
>Собрал, прописал в /etc/sysctl.conf:
>net.inet.ip.forwarding=1
>В /etc/rc.firewall прописал
>ipfw add 40 fwd <адрес кэш-сервера>,80 tcp from <адрес кэш-сервера> to any
>Не работает! ;-(
>Даже если напишу:
>ipfw add 40 fwd <адрес ftp-сервера>,21 ip from any to any и наберу
>>telnet <адрес кэш-сервера> 21, проваливаюсь на ftp на кэше!
>Причем команда ipfw show показывает, что
>правило пакеты все-таки отлавливает, но
>не перенаправляет! В чем дело
>- не пойму. Помогите плиз!!!
>
>
>И еще. Покопался в исходниках. Файлы
>/usr/src/sys/netinet/ip_fw.c и ip_output.c Там есть
>ссылки на опцию ядра IPFIREWALL_FORWARD_DEBUG,
>но такой опции ни в
>LINT, ни в /usr/src/sys/conf/options я
>не нашел. Странно все это.
>Да и некоторые комментарии в
>выше обозначенных файлах позабавили...

ну во первых ftp через divert работать не будет
во вторых по моему правильной будет строка что-то типа
ipfw add 40 divert <кэш сервер порт> all from any to any 80
и еще по-моему лучше в rc.conf gateaway_enabled ="true" вместо записи в sysctl

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

2. "RE: ipfw не форвардит ;-("
Сообщение от Солнышко Искать по авторуВ закладки on 07-Фев-02, 19:13  (MSK)
Пусть надо форвардить например в такой ситуации:
есть mail-сервер, адрес пусть 10.0.0.1; есть моя машина, адрес 10.0.0.2; На моей машине прописываем:
ipfw add 40 fwd <10.0.0.1>,25 tcp from any to <10.0.0.2> 25
У себя на машине ввожу:
>telnet alexsun 25
Trying alexsun...
И все. Больше ничего не происходит. Решил разобраться. Ковырять решил файл: /usr/src/sys/netinet/ip_output.c
Прописал в нем:
#define IPFIREWALL_FORWARD_DEBUG

Там дальше есть такая конструкция:
#ifdef IPFIREWALL_FORWARD_DEBUG
printf("IPFIREWALL_FORWARD: New dst ip: ");
print_ip(dst->sin_addr);
printf("\n");
#endif

Ну и я по примеру прописал еще в трех местах:
(строчки не указываю, так как после моего ковыряния в этом файле строчки с исходным текстом не совпадают). Искать надо по совпадениям в первой строчке фрагмента текста. Например здесь - по bcopy (... и т.д.

bcopy(dst, &ro_fwd->ro_dst, sizeof(*dst));
/* Added by AlexTheSun, 07.02.2002 */
#ifdef IPFIREWALL_FORWARD_DEBUG
printf("IPFIREWALL_FORWARD: step 1: ");
print_ip(dst->sin_addr);
printf("\n");
#endif
...............
dst = (struct sockaddr_in *)&ro_fwd->ro_dst;
/* Added by AlexTheSun, 07.02.2002 */
#ifdef IPFIREWALL_FORWARD_DEBUG
printf("IPFIREWALL_FORWARD: step 2: ");
print_ip(dst->sin_addr);
printf("\n");
#endif
..................А здесь по последней...
/* Added by AlexTheSun, 07.02.2002 */
#ifdef IPFIREWALL_FORWARD_DEBUG
printf("IPFIREWALL_FORWARD: step 3: ");
printf("%d ", dst->sin_port);
print_ip(dst->sin_addr);
printf("\n");
#endif
error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst, ro->ro_rt);

Пересобрал ядро, пишу:
>telnet alexsun 25
Trying alexsun...
IPFIREWALL_FORWARD: New dst ip: 10.0.0.1
IPFIREWALL_FORWARD: step 1: 10.0.0.1
IPFIREWALL_FORWARD: step 2: 10.0.0.1
IPFIREWALL_FORWARD: step 3: 25 10.0.0.1
IPFIREWALL_FORWARD: step 3: 0 10.0.0.2
Где 0 и 25 в двух последних строчках - номер порта.
Посему выходит, что вроде все нормально и функция if_output (см. последний фрагмент кода) пересылает сформированный пакет в интерфейс.
При этом на mail-сервере ставим:
>tcpdump src 10.0.0.2 and port 25
Listening interface rl0...
И все. Никаких пакетов сюда не доходит. В чем дело?
И причем здесь последняя строчка (....step 3: 0 10.0.0.2)?

В общем здесь все несколько сумбурно наверно написано, возможно и понять сложно, что я пытался здесь объяснить... ну в общем, если кому интересно стало, или кто знает ядро Unix очень хорошо, может что-нибудь подскажет, а?

С уважением, Солнышко

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


Удалить

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




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

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