Допустим у нас встала задача быстро развернуть шлюз да выхода в интернет небольшой сети (домашней или небольшого офиса). Фактически задача сводится к установке операционной системы и развёртывании DHCP, DNS и NAT. Далее будет показано как можно быстро и легко решить эту задачу используя ОС FreeBSD 8.0.

Для начала нужно установить ОС на сервер. Ставить систему можно даже с 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"<br><br>



И запустим сервис:

/etc/rc.d/named start



Проверить работу DNS-сервера можно командой:

nslookup www.ylsoftware.com 127.0.0.1



В случае нормальной работы DNS вывод должен выглядеть примерно вот так:

Server:		127.0.0.1<br>Address:	127.0.0.1#53<br><br>Non-authoritative answer:<br>Name:	www.ylsoftware.com<br>Address: 89.108.78.131



Обновляем дерево портов:

portsnap fetch extract



Затем установим DHCP-сервер:

/usr/ports/net/isc-dhcp31-server && make install clean



Далее создадим файл /usr/local/etc/dhcpd.conf следующего содержания:

default-lease-time 600;<br>max-lease-time 7200;<br>ddns-update-style none;<br>log-facility local7;<br><br>subnet 172.31.255.0 netmask 255.255.255.0 {<br>  range 172.31.255.100 172.31.255.200;<br>  option domain-name-servers 172.31.255.1;<br>  option domain-name "office.localdomain";<br>  option routers 172.31.255.1;<br>  default-lease-time 600;<br>  max-lease-time 7200;<br>}



Конфигурация DHCP-сервера более подробно уже была рассмотрена ранее и сейчас останавливаться на ней мы не будем. Для запуска DHCP-сервера нужно добавить в /etc/rc.conf строки:

dhcpd_enable="YES"<br>dhcpd_ifaces="em0"<br>dhcpd_flags="-q"



Запускаем DHCP-сервер:

/usr/local/etc/rc.d/isc-dhcpd start



Теперь осталось только настроить пакетный фильтр. Из всего многообразия оных во FreeBSD выберем pf. Создадим файл /etc/pf.rules следующего содержания:

# Базовые настройки<br>if_ext = "le0"<br>if_int = "em0"<br>net_int = "172.31.255.0/24"<br>set block-policy drop<br>set state-policy if-bound<br><br>scrub all reassemble tcp fragment reassemble<br><br># NAT для локальной сети<br>nat pass on $if_ext from $net_int -> ($if_ext) static-port<br><br># Запрещаем весь лишний трафик<br>block drop all<br><br># Разрешаем всё на loopback-интерфейсе<br>pass quick on lo0 all<br><br># Разрешаем исходящий трафик<br>pass out quick on $if_ext inet proto tcp from ($if_ext) to any flags S/SA keep state<br>pass out quick on $if_ext inet proto { udp, icmp } from ($if_ext) to any keep state<br>pass out quick on $if_int from ($if_int) to $net_int<br><br># Разрешем любой трафик со стороны локальной сети<br>pass in quick on $if_int from $net_int to any keep state<br><br>



Добавляем в /etc/rc.conf строки:

pf_enable="YES"<br>pf_rules="/etc/pf.rules"



Запускаем пакетный фильтр:

/etc/rc.d/pf start



Теперь компьютеры в локальной сети смогут получать сетевые настройки по DHCP и спокойно выходить в сеть. На этом всё. Приятной работы!

Источник