rilpoint_mw113

Компиляция ядра FreeBSD

Рано или поздно (скорее всего рано :) ) вам понадобится изменить ядро системы. Например включить ipfw, или просто почистить от ненужного мусора. Существует мнение, что это сложно и опасно. Ничего подобного! И Вы в этом сейчас убедитесь...

Рассмотрим весь процесс пересборки ядра:

1. Стандартный файл ядра, с которым устанавливается система, и который содержит настройки, рассчитанные на загрузку ОС, в большинстве конфигураций находится здесь: /sys/i386/conf/GENERIC. Это файл не надо править НИ ПРИ КАКИХ СИТУАЦИЯХ. Для нового ядра нужно скопировать GENERIC в туже папку под другим названием (в моем случае /sys/i386/conf/MYKERN).

cp /sys/i386/conf/GENERIC /sys/i386/conf/MYKERN

2. Теперь давайте его отредактируем, включив IPFW (для примера). Вы можете использовать любой редактор текстовых файлов, который вам больше нравится. Я предпочитаю "ee".

  1. ee /sys/i386/conf/MYKERN

Первое, что надо изменить это параметр "ident GENERIC" на "ident MYKERN". Именно по этому параметру компилятор будет находить требуемый для компиляции конфиг ядра, а не по названию файла и вполне логично делать их одинаковыми (ident и имя файла).

Все изменения (кроме закомментирования ненужного оборудования) я делаю в самом конце файла. И вам советую поступать так же, не будет долгих поисков "И где же я тут правил?". Добавим в конец файла следующие строки:

options IPFIREWALL # включаем поддержку ipfw на уровне ядра options IPDIVERT # включаем поддержку перенаправления пакетов (нужно для NATD)

Вышли с сохранением изменений. Конфиг для компиляции ядра с поддержкой ipfw готов.


[править] Другие полезные опции при сборке ядра

options IPFIREWALL # собственно файрволл options IPFIREWALL_VERBOSE # логгинг пакетов, если в правиле

                                       # написано `log`

options IPFIREWALL_VERBOSE_LIMIT=5 # ограничение логов (повторяющихся) - на

                                         # случай атак типа флудинга
                                         # (я, правда, 100 ставлю)

options IPFIREWALL_FORWARD # перенаправление (форвардинг) пакетов

                                       # например, для прозрачного прокси

options IPDIVERT # если нужен NAT (трансляция адресов) options DUMMYNET # если понадобится ограничивать скорость

                                       # инета пользователям (обычно - да :))

options IPFIREWALL_DEFAULT_TO_ACCEPT # дефолтовое правило (последнее)

                                         # будет разрешающим (во всех других)
                                         # случаях - запрещающее

[править] Сетевое быстродействие

maxusers 512 options NMBCLUSTERS=65535 options NBUF=4096 /sbin/sysctl -w net.inet.tcp.sendspace=131072 /sbin/sysctl -w net.inet.tcp.recvspace=131072


3. Сборка и установка нового ядра.

переходим в каталог /usr/src/:

"# cd /usr/src/"

собираем ядро:

"# make BUILDKERNEL KERNCONF=MYKERN"

вместо MYKERN должен стоять ident вашего конфига устанавливаем ядро:

"# make INSTALLKERNEL KERNCONF=MYKERN"

вместо MYKERN должен стоять ident вашего конфига

Если при выполнении сборки выдана ошибка и сборка остановлена, значит вы допустили ошибки в конфиге. Понятно что их нужно исправить :) И будьте осторожны! Если Вы работаете на удаленной машине, не трогайте сетевые настройки, и не включайте ipfw в закрытый режим, не проверив работоспособность его конфигурации на другой машине.

3б. второй способ (старый)

cd /usr/src/sys/i386/config/ cp GENERIC MYKERNEL /usr/sbin/config MYKERNEL cd ../../compile/MYKERNEL make depend && make make install

Все! Осталось только перезагрузиться: "shutdown -r now"

краткая инструкция по компиляции ядра FreeBSD:

cd /usr/src/sys/i386/conf
mkdir /root/kernel
cp GENERIC NEWKERNEL
ee NEWKERNEL
cp NEWKERNEL /root/kernel
/usr/sbin/config NEWKERNEL
cd ../compile/NEWKERNEL
make depend
make
make install

FreeBSD 6.2

cd /usr/src/sys/i386/conf
mkdir /root/kernel
cp GENERIC NEWKERNEL
ee NEWKERNEL
cp NEWKERNEL /root/kernel
/usr/sbin/config NEWKERNEL
cd ../compile/NEWKERNEL
make cleandepend; make depend
make
make install

опции для ipfw,natd:

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_DEFAULT_TO_ACCEPT
options DUMMYNET
options IPDIVERT
options IPFIREWALL_FORWARD

опции для ipfilter,ipnat,ipsec:

options         INET
options         IPFILTER
options         IPFILTER_LOG
options         IPSEC
options         IPSEC_ESP
pseudo-device   gif

опции для netgraph:

options         NETGRAPH                #netgraph(4) system 
options         NETGRAPH_ASYNC 
options         NETGRAPH_BPF 
options         NETGRAPH_CISCO 
options         NETGRAPH_ECHO 
options         NETGRAPH_ETHER 
options         NETGRAPH_FRAME_RELAY 
options         NETGRAPH_HOLE 
options         NETGRAPH_IFACE 
options         NETGRAPH_KSOCKET 
options         NETGRAPH_L2TP 
options         NETGRAPH_LMI 
# MPPC compression requires proprietary files (not included) 
#options        NETGRAPH_MPPC_COMPRESSION 
options         NETGRAPH_MPPC_ENCRYPTION 
options         NETGRAPH_ONE2MANY 
options         NETGRAPH_PPP 
options         NETGRAPH_PPPOE 
options         NETGRAPH_PPTPGRE 
options         NETGRAPH_RFC1490 
options         NETGRAPH_SOCKET 
options         NETGRAPH_TEE 
options         NETGRAPH_TTY 
options         NETGRAPH_UI 
options         NETGRAPH_VJC

работа с модулями ядра FreeBSD

Посмотреть список подгруженных модулей:

root@gw# kldstat
Id Refs Address    Size     Name
 1    8 0xc0400000 6a6424   kernel
 2    1 0xc0aa7000 122a4    geom_mirror.ko
 3    1 0xc1587000 15000    linux.ko
 4    1 0xc1b77000 3000     ng_ipacct.ko