Для оптимизации работы сервера решил собрать ядро с поддержкой «kernel NAT», предварительно добавив в него необходимые опции.
Копируем оригинальное ядро:
Для i386
ADVERTISEMENT
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ROUTER
Для amd64
cp /usr/src/sys/amd64/conf/GENERIC /usr/src/sys/amd64/conf/ROUTER
Редактируем конфиг ядра:
ee /usr/src/sys/i386/conf/ROUTER
ee /usr/src/sys/amd64/conf/ROUTER
Добавляем необходимые опции:
#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 HZ="1000" # Для DUMMYNET options DUMMYNET # Для Kernel NAT + Ограничение пропускной способности
Меняем в конфиге
ident GENERIC
на
ident ROUTER
Если хотим чтобы фаервол был с разрешающим правилом по умолчанию, убираем # с
options IPFIREWALL_DEFAULT_TO_ACCEPT
Сохраняем конфиг и приступаем к сборке ядра:
cd /usr/src make buildkernel KERNCONF=ROUTER
По окончанию процесса сборки ядра необходимо его установить:
make installkernel KERNCONF=ROUTER
Когда ядро установлено, можно и перезагрузиться!
shutdown -r now
В FreeBSD10 options IPFIREWALL_FORWARD не нужно добавлять.
Читать тут