Допустим у нас встала задача быстро развернуть шлюз да выхода в интернет небольшой сети (домашней или небольшого офиса). Фактически задача сводится к установке операционной системы и развёртывании 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"
И запустим сервис:
/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-сервер:
/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 и спокойно выходить в сеть. На этом всё. Приятной работы!