Страница 1 из 1

transparent squid и пр.

Добавлено: 2009-07-18 21:52:06
bmth
Дано: FreeBSD 7.0, ядро GENERIC, ipnat, ipfw, squid 2.7.
Требуется: организовать прозрачный прокси

Проблема возникает тут:

Код: Выделить всё

gw#ipfw add fwd 172.16.0.1:3128 tcp from 172.16.0.0/16 to any http
ipfw: getsockopt(IP_FW_ADD): Invalid argument
На форуме и в интернете есть масса информации тему transparent proxy вообще и этой ошибки в частности, но я хотел бы разобраться немного в другом.

IPFW подгружается модулем (/etc/rc.conf):

Код: Выделить всё

firewall_enable="YES"
firewall_type="/etc/ipfw.rules"
Вполне успешно в него подгружаются правила стандартной открытой конфигурации, которые я вынес в отдельный файл для удобства последующего редактирования (/etc/ipfw.rules):

Код: Выделить всё

add 00100 allow ip from any to any via lo0
add 00200 deny ip from any to 127.0.0.0/8
add 00300 deny ip from 127.0.0.0/8 to any
add 65000 allow ip from any to any
add 65535 deny ip from any to any
Так что все вроде работает, проблема возникает только с правилами перенаправления (fwd). Вероятную причину я вижу в том, что в конфигурации ядра отсутствует опция IPFIREWALL_FORWARD. И вот тут у меня возникает ряд вопросов.
  1. Как узнать опции, с которыми было сконфигурировано данное ядро? Понятно, что сейчас у меня стандарное ядро, и его опции указаны в /usr/src/sys/i386/conf/GENERIC. Но меня интересует можно ли узнать опции ядра случае, когда само ядро есть, а файл с его настройками потерялся, удалился, испортился или засекретился?
  2. В ядре GENERIC вообще нет опций связанных с IPFW - файрволл подгружается модулем. Соответственно, хотелось бы узнать с какими настройками был собран этот модуль?
  3. Наконец, можно ли пересобрать не все ядро, а лишь отдельный его модуль?

Re: transparent squid и пр.

Добавлено: 2009-07-18 21:55:49
paradox
К
ак узнать опции, с которыми было сконфигурировано данное ядро? Понятно, что сейчас у меня стандарное ядро, и его опции указаны в /usr/src/sys/i386/conf/GENERIC. Но меня интересует можно ли узнать опции ядра случае, когда само ядро есть, а файл с его настройками потерялся, удалился, испортился или засекретился?
никак
В ядре GENERIC вообще нет опций связанных с IPFW - файрволл подгружается модулем. Соответственно, хотелось бы узнать с какими настройками был собран этот модуль?
по умолчанию
Наконец, можно ли пересобрать не все ядро, а лишь отдельный его модуль?
попробуйте

Re: transparent squid и пр.

Добавлено: 2009-07-18 23:44:45
bmth
paradox писал(а):
bmth писал(а):В ядре GENERIC вообще нет опций связанных с IPFW - файрволл подгружается модулем. Соответственно, хотелось бы узнать с какими настройками был собран этот модуль?
по умолчанию
а где их найти? в /usr/src/sys/modules/ipfw/ один только мейкфайл =\

Re: transparent squid и пр.

Добавлено: 2009-07-18 23:48:14
bmth
А вообще, хотелось бы не вкомпиливать ipfw в ядро - оставить модулем, но при этом получить поддержку форвардинга. Сейчас ее нет:

Код: Выделить всё

ipfw2 (+ipv6) initialized, divert loadable, rule-based forwarding disabled, default to deny, logging disabled

Re: transparent squid и пр.

Добавлено: 2009-07-19 0:00:52
paradox
а мне хотелось бы замок из золота
на необитаемом острове
но увы стоко золота токо в фортноксе
и америка не дает добро что бы я его у них вывез

поэтому и без пересборки ядра форвард вы никак не получите одной лиш пересборкой модуля фаервола

Re: transparent squid и пр.

Добавлено: 2009-07-19 1:58:39
bmth
я не говорю про пересборку одного лишь модуля ipfw, я говорю про включение форвардинга в модуле

Re: transparent squid и пр.

Добавлено: 2009-07-19 2:19:35
paradox
ну вот ответте мне на вопрос какая опция в конфиге ядра заставляет модуль быть статически вкомпиленым в ядро

уж наверняка не фаервол-форвард

Re: transparent squid и пр.

Добавлено: 2009-07-19 3:12:57
bmth
Ага, понятно. Просто я думал, что IPFIREWALL_FORWARD подразумевает наличие IPFIREWALL.

Тут возникла другая проблема... после пересборки ядра не меняется его идентификатор (sysctl kern.ident) =/ Не говоря уже о том, что форвардинг не начинает работать как надо.

Дошел уже до такого эксперимента:

Код: Выделить всё

gw./usr/src/# cp sys/i386/conf/GENERIC sys/i386/conf/MYKERNEL
gw./usr/src/# ee sys/i386/conf/MYKERNEL <- тут просто меняю параметр ident на MYKERNEL
gw./usr/src/# make buildkernel KERNCONF=MYKERNEL
gw./usr/src/# make installkernel KERNCONF=MYKERNEL
gw./usr/src/# reboot
....
gw./root/# uname -a
FreeBSD gw 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
gw./root/# sysctl kern.ident
kern.ident: GENERIC
Я так понимаю, что каким-то образом подгружается старое ядро. Смущает, что kern.bootfile указывает на новое ядро, в котором указан правильный ident, а строки root@logan.cse.buffalo.edu просто нет.

Re: transparent squid и пр.

Добавлено: 2009-07-19 3:20:34
paradox
та ну просто фантастика
ls -l /usr/obj/src/sys/ итд кто там что там смотри имя ядра
собиралось ли твой MYKERNEL

Re: transparent squid и пр.

Добавлено: 2009-07-19 4:02:05
bmth
Фантастика объяснилась очень просто - у меня было битым зеркало на gmirror =) соотв. на диске, с которого происходит загрузка, находилась устаревшая файловая система, а все мои изменения записывались на другой диск.

Re: transparent squid и пр.

Добавлено: 2009-07-19 4:53:13
bmth
все настроил, спасибо за наводящие мысли.
p.s. ipfirewall_forward не заработал без ipfirewall =/ видимо неспроста эта возможность не вкомпилирована в модуль ipfw

Re: transparent squid и пр.

Добавлено: 2009-07-19 5:13:28
paradox
форвард это опция не модуля а ядра
потому что оно стек перестраивает по другому
поэтому форвард нужно в ядро добавлять