FreeBSD. Маршрутизатор
Конфигурирование ядра
Вариант1. Установка исходников ядра с CD через sysinstall
- Запускаем sysinstall
- Configure - Distributions - src
- Выбираем base и sys
Вариант 2. Установка исходников ядра с CD через консоль
mount /cdrom
mkdir -p /usr/src/sys
ln -s /usr/src/sys /sys
cat /cdrom/src/ssys.[a-d]* | tar -xzvf -
cat /cdrom/src/sbase.[a-d]* | tar -xzvf -
Копируем файл конфигурации ядра "/usr/src/sys/i386/conf/GENERIC", а затем создаем символическую ссылку на этот файл в каталоге i386
cd /usr/src/sys/i386/conf
mkdir /root/kernels
cp GENERIC /root/kernels/MYKERNEL
ln -s /root/kernels/MYKERNEL
Редактируем файл конфигурации ядра
nano /usr/src/sys/i386/MYKERNEL
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=10 options IPDIVERT options IPFIREWALL_DEFAULT_TO_ACCEPT options DUMMYNET
Здесь IPFIREWALL означает включение программы файервола ipfw, IPFIREWALL_VERBOSE означает ведение логов ipfw, IPFIREWALL_VERBOSE_LIMIT=10 ограничичивает максимальное число записей, которые могут быть сделаны в секунду. Учитывайте то, что если вы поставите большое число для IPFIREWALL_VERBOSE_LIMIT, то ваш винчестер может засорится от быстрорастущих логов. IPDIVERT означает включение демона маскарадинга natd, IPFIREWALL_DEFAULT_TO_ACCEPT означает, что ваш файервол по дефолту будет открытым. Если вы не указываете этой опции, то при старте файервола любой доступ из сети к компьютеру будет закрыт.
Советую включить опцию IPFIREWALL_DEFAULT_TO_ACCEPT, потому что как только вы разберетесь с правилами у ipfw, то сможете закрыть все, что не нужно и оставить только используемые порты. DUMMYNET означает, что вы сможете контролировать скорость передачи через ваш компьютер
Сборка
/etc/make.conf
MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs #Эта переменная устанавливает список модулей, которые нужно построить вместо построения всех модулей. WITHOUT_MODULES = linux acpi sound ntfs #В этой переменной перечисляются основные модули, которые необходимо исключить из процесса сборки.
cd /usr/src
make buildkernel KERNCONF=MYKERNEL
make installkernel KERNCONF=MYKERNEL
Новое ядро будет скопировано в каталог /boot/kernel как /boot/kernel/kernel, а старое ядро будет перемещено в /boot/kernel.old/kernel
Скажем ядру, чтобы при старте он понимал, что этот компьютер - роутер.
nano /etc/rc.conf
gateway_enable="YES" firewall_enable="YES" firewall_quiet="YES" firewall_type="OPEN" natd_enable="YES"
Сетевая карта, которая подключена к интернету имеет название em1 и ее ip-адрес в интернете 194.67.18.8, а сетевая карта, которая подключена к локальной сети имеет название em0 и ее ip-адрес в локальной сети 10.0.0.1
nano /etc/natd.conf
use_sockets yes same_ports yes unregistered_only yes interface em1
nano /usr/local/etc/rc.d/ipfw_natd.sh
#!/bin/sh natd -f /etc/natd.conf -n em1 ipfw add 500 divert natd all from any to any via em1
Это означает, что мы включаем маскарадинг с помощью natd через ipfw, разрешаем всем соединяться с сервером, как если бы он был без файрвола и разрешаем всем из локальной сети ходить в интернет.
chmod +x /usr/local/etc/rc.d/ipfw_natd.sh
reboot
Ниже приведен пример, показывающий как можно выделить себе и начальнику по отдельному каналу, а всем остальным дать только 64К. em1 - это сетевая карточка, подключенная к интернету.
#!/bin/sh ipfw -f flush natd -f /etc/natd.conf -n em1 ipfw add 500 divert natd all from any to any via em1 ipfw add 1001 pipe 1 ip from 192.168.111.33 to any out via em1 ipfw add 1002 pipe 2 ip from any to 192.168.111.33 in via em1 ipfw pipe 1 config bw 16Kbytes ipfw pipe 2 config bw 16Kbytes ipfw add 1003 pipe 3 ip from 192.168.111.34 to any out via em1 ipfw add 1004 pipe 4 ip from any to 192.168.111.34 in via em1 ipfw pipe 3 config bw 32Kbytes ipfw pipe 4 config bw 32Kbytes ipfw add 1005 pipe 5 ip from 192.168.111.0/24 to any out via em1 ipfw add 1006 pipe 6 ip from any to 192.168.111.0/24 in via em1 ipfw pipe 5 config bw 64Kbytes ipfw pipe 6 config bw 64Kbytes