вторник, 8 мая 2012 г.

FreeBSD Kernel NAT

Для оптимизации загрузки сервера решил поднять "ядерный NAT". Преимущества этого чуда достаточно подробно описаны в этой статье.
Итак, приступим! Для начала следует пересобрать ядро, предварительно добавив в него необходимые опции.

Копируем оригинальное ядро:
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/punkhs

Редактируем конфиг ядра:
ee /usr/src/sys/i386/conf/punkhs

Добавляем необходимые опции:
# Настройки для NAT
options IPFIREWALL   # Включаем фаерволл
options IPFIREWALL_VERBOSE  # Включаем логирование для фаерволла
options IPFIREWALL_VERBOSE_LIMIT=1000 # Ограничиваем логи кол-вом строк (1000)
options IPFIREWALL_NAT   # Включаем поддержку kernel NAT
options IPFIREWALL_FORWARD  # Изменение назначения пакетов
options IPFIREWALL_DEFAULT_TO_ACCEPT # Правило по умолчанию
options LIBALIAS   # Необходимо для kernel NAT
options ROUTETABLES=2   # Поддержка двух таблиц маршрутизации
options IPDIVERT # Необходимо для kernel NAT
options DUMMYNET   # Для Kernel NAT + Ограничение пропускной способности
options HZ="1000"   # Для DUMMYNET

Сохраняем конфиг (Ctrl+C -> exit) и приступаем к сборке ядра:
cd /usr/src
make buildkernel KERNCONF=punkhs

По завершению процесса необходимо установить новое ядро:
make installkernel KERNCONF=punkhs

Ядро установлено! Самое время перезагрузиться!
shutdown -r now