Страница 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. И вот тут у меня возникает ряд вопросов.
- Как узнать опции, с которыми было сконфигурировано данное ядро? Понятно, что сейчас у меня стандарное ядро, и его опции указаны в /usr/src/sys/i386/conf/GENERIC. Но меня интересует можно ли узнать опции ядра случае, когда само ядро есть, а файл с его настройками потерялся, удалился, испортился или засекретился?
- В ядре GENERIC вообще нет опций связанных с IPFW - файрволл подгружается модулем. Соответственно, хотелось бы узнать с какими настройками был собран этот модуль?
- Наконец, можно ли пересобрать не все ядро, а лишь отдельный его модуль?
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
форвард это опция не модуля а ядра
потому что оно стек перестраивает по другому
поэтому форвард нужно в ядро добавлять