Допустим у нас встала задача быстро развернуть шлюз да выхода в интернет небольшой сети (домашней или небольшого офиса). Фактически задача сводится к установке операционной системы и развёртывании DHCP, DNS и NAT. Далее будет показано как можно быстро и легко решить эту задачу используя ОС FreeBSD.
Для начала нужно установить ОС на сервер. Ставить систему можно даже с bootonly CD докачивая необходимое по сети. Нужно поставить только самый минимум.
Допустим что у сервера два интерфейса: le0, который “смотрит” в интернет и em0, к которому подключена локальная сеть. В локальной сети мы будем использовать пространство 172.31.255.0/24, причём первый адрес (172.31.255.1) будет использоваться сервером.
Первым делом нужно добавить в файл /etc/rc.conf строку:
gateway_enable="YES"
Эта строка при загрузке сервера разрешает пересылку IP-пакетов. Без неё не возможно использование сервера в качестве маршрутизатора. Чтобы это изменение вступило в силу до перезагрузки нужно выполнить команду:
sysctl net.inet.ip.forwarding=1
Следующим шагом сконфигурируем DNS. Сначала нужно в файле /etc/namedb/named.conf заменить строку:
listen-on { 127.0.0.1; };
На:
listen-on { any; };
После этого разрешим запуск DNS-сервера добавив в /etc/rc.conf строку:
named_enable="YES"
И запустим сервис:
/etc/rc.d/named start
Проверить работу DNS-сервера можно командой:
nslookup www.ylsoftware.com 127.0.0.1
В случае нормальной работы DNS вывод должен выглядеть примерно вот так:
Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: www.ylsoftware.com Address: 89.108.78.131
Обновляем дерево портов:
portsnap fetch extract
Затем установим DHCP-сервер:
cd /usr/ports/net/isc-dhcp31-server && make install clean
Далее создадим файл /usr/local/etc/dhcpd.conf следующего содержания:
default-lease-time 600; max-lease-time 7200; ddns-update-style none; log-facility local7; subnet 172.31.255.0 netmask 255.255.255.0 { range 172.31.255.100 172.31.255.200; option domain-name-servers 172.31.255.1; option domain-name "office.localdomain"; option routers 172.31.255.1; default-lease-time 600; max-lease-time 7200; }
Конфигурация DHCP-сервера более подробно уже была рассмотрена ранее и сейчас останавливаться на ней мы не будем. Для запуска DHCP-сервера нужно добавить в /etc/rc.conf строки:
dhcpd_enable="YES" dhcpd_ifaces="em0" dhcpd_flags="-q"
Запускаем DHCP-сервер:
/usr/local/etc/rc.d/isc-dhcpd start
Теперь осталось только настроить пакетный фильтр. Из всего многообразия оных во FreeBSD выберем pf. Создадим файл /etc/pf.rules следующего содержания:
# Базовые настройки if_ext = "le0" if_int = "em0" net_int = "172.31.255.0/24" set block-policy drop set state-policy if-bound scrub all reassemble tcp fragment reassemble # NAT для локальной сети nat pass on $if_ext from $net_int -> ($if_ext) static-port # Запрещаем весь лишний трафик block drop all # Разрешаем всё на loopback-интерфейсе pass quick on lo0 all # Разрешаем исходящий трафик pass out quick on $if_ext inet proto tcp from ($if_ext) to any flags S/SA keep state pass out quick on $if_ext inet proto { udp, icmp } from ($if_ext) to any keep state pass out quick on $if_int from ($if_int) to $net_int # Разрешем любой трафик со стороны локальной сети pass in quick on $if_int from $net_int to any keep state
Добавляем в /etc/rc.conf строки:
pf_enable="YES" pf_rules="/etc/pf.rules"
Запускаем пакетный фильтр:
/etc/rc.d/pf start
Теперь компьютеры в локальной сети смогут получать сетевые настройки по DHCP и спокойно выходить в сеть. На этом всё. Приятной работы!