Свой роутер на freebsd

Роутер на FreeBSD

Подробная инстукция по установке и настройке роутера на ОС FreeBSD 12.2 при помощи ipfw kernel NAT и dnsmasq.

Исходные данные

Имеем на машине 2 сетевых интерфейса:

em0 — для внешней сети 192.168.1.0/24

em1 — для внутренней сети 192.168.50.0/24

Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1

Наша задача — настроить доступ в Интернет для внутренней сети. Для этого необходимо выполнить несколько этапов:

  • обновить FreeBSD и исходники
  • собрать и установить ядро с поддержкой firewall и NAT
  • включить в загрузку системы необходимые службы и параметры
  • создать правила для firewall и NAT
  • установить и настроить службы dns и dhcp при помощи dnsmasq
  • проверить работу на другой машине в сети

Для начала выкачиваем обновления FreeBSD и устанавливаем их

# freebsd-update fetch # freebsd-update install

Затем переходим в корень, скачиваем исходники src и распаковываем их

# cd / # fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.2-RELEASE/src.txz # tar xjf src.txz

После распаковки переходим в каталог конфигурации ядра и копируем ядро по умолчанию в новое — ROUTER

# cd /usr/src/sys/amd64/conf # cp GENERIC ROUTER

Затем открываем новый конфиг ядра

# vi /usr/src/sys/amd64/conf/ROUTER

и добавим следующие опции:

options IPFIREWALL options IPDIVERT options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=5 options IPFIREWALL_NAT options LIBALIAS options ROUTETABLES=2 options DUMMYNET options HZ="1000"

Описание добавленных опций:

  • IPFIREWALL — включает поддержку ipfw
  • IPDIVERT — опция для работы NAT
  • IPFIREWALL_VERBOSE — включает логирование работы ipfw
  • IPFIREWALL_VERBOSE_LIMIT=5 — ограничение на количество одинаковых записей в логах, защита от атак
  • IPFIREWALL_NAT — поддержка ipfw NAT
  • LIBALIAS — поддержка библиотек libalias
  • ROUTETABLES=2 — две таблицы маршрутизации
  • DUMMYNET — включение функции шейпера трафика
  • HZ=»1000″ — ускорение работы гигабитного сетевого адаптера
Читайте также:  Поменять пароль роутер делинк

Теперь переходим в каталог /usr/src, собираем и устанавливаем ядро

# cd /usr/src # make buildkernel KERNCONF=ROUTER # make installkernel KERNCONF=ROUTER

После этого в файл /etc/rc.conf необходимо добавить такие строчки:

defaultrouter="192.168.1.1" gateway_enable="YES" firewall_enable="YES" firewall_nat_enable="YES" firewall_nat_interface="em0" firewall_script="/etc/ipfw.conf" natd_enable="YES" natd_interface="em0"

Также в файл /etc/resolv.conf пропишем IP-адреса DNS-серверов:

nameserver 127.0.0.1 nameserver 8.8.8.8 nameserver 8.8.4.4

Затем в файле /etc/sysctl.conf пропишем необходимые параметры:

и включение ограничений на количество одинаковых записей в логах

net.inet.ip.fw.verbose_limit=5

Теперь создадим файл /etc/ipfw.conf

и впишем в него необходимые параметры и правила для firewall и NAT:

exface="em0" inface="em1" in_ip="192.168.50.1" cmd="ipfw -q" $cmd -f flush $cmd add 100 allow ip from any to any via lo0 $cmd add 200 deny ip from any to 127.0.0.1/8 $cmd add 300 deny ip from 127.0.0.1/8 to any $cmd add 400 allow all from any to any via $inface $cmd nat 1 config log if $exface reset same_ports deny_in $cmd add 1030 nat 1 ip from any to any via $exface

Теперь можно запустить службу ipfw

Далее устанавливаем dnsmasq

если использовать порты, то

# cd /usr/ports/dns/dnsmasq/ # make install clean

и внесём его в файл /etc/rc.conf для автоматической загрузки

Затем переименуем конфиг dnsmasq по умолчанию, создадим новый и откроем его для редактирования

# mv /usr/local/etc/dnsmasq.conf /usr/local/etc/dnsmasq.conf.old # touch /usr/local/etc/dnsmasq.conf # vi /usr/local/etc/dnsmasq.conf

сделаем его содержание примерно таким:

domain-needed bogus-priv interface=em1 resolv-file=/etc/resolv.conf dhcp-range=192.168.50.31,192.168.50.130,24h cache-size=150

Можно теперь запустить службу dnsmasq

Проверяем на другой машине. На борту Windows 7 и установленный Chrome. Сетевые настройки тянет с DHCP:

Откроем Состояние сети и убедимся в правильности подтянутых настроек

Открываем Chrome и входим в Интернет

Если всё это получилось, значит dnsmasq работает правильно.

Похожие посты:

Источник

Оцените статью
Adblock
detector