0

Интернет шлюз на freebsd

Настраиваем шлюз в Интернет на базе FreeBSD

Использование FreeBSD на небольших роутерах для связи с внешним миром уже давно перестало быть чем-то выдающимся. Эта простая в использовании, нетребовательная к ресурсам и обслуживанию операционная система почти идеально подходит для решения подобных задач.

Аппаратное обеспечение. Чтобы вывести внутреннюю сеть в Интернет, достаточно компьютера Pentium III 600 МГц, 256 Мб RAM, 10 Гб HDD, 2 сетевые карты. Конфигурация взята с запасом, для полноценной работы сети малого офиса (около 50 пользователей) вполне хватило бы Pentium II 400 МГц, c 128 Мб RAM. Но в дальнейшем может возникнуть желание установить на этот же шлюз, к примеру, прокси-сервер, лучше выбрать конфигурацию более высокого уровня.

Операционная система: FreeBSD 5.5 или 6.1.

Дополнительно: из-за того, что данный компьютер подлежит непрерывному использованию, рекомендую доставить внутрь корпуса дополнительные вентиляторы чтобы обеспечить принудительное нагнетание/отток воздуха для охлаждения. Практически все современные корпусы ATX позволяют сделать это.

Поскольку все необходимые модули включены в состав операционной системы, больше нам ничего не потребуется.

Настройка сетевых интерфейсов

Будем считать, что уже имеется компьютер подходящей конфигурации с установленной нужной версией FreeBSD.

Необходимо уточнить имена интерфейсов сетевых карт, под которыми их распознает операционная система.

Должно появиться что-то подобное:

rl0: flags=8843 mtu 1500
options=8
ether 00:xx:xx:xx:xx:xx
media: Ethernet autoselect (100baseTX )
status: active
xl0: flags=8843 mtu 1500
options=9
ether 00:zz:zz:zz:zz:zz
media: Ethernet autoselect (100baseTX )
status: active
plip0: flags=108810

mtu 1500
lo0: flags=8049 mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000

В компьютере установлены две сетевые карты c именами интерфейсов rl0 и xl0.

В нашем случае интерфейс rl0 будет «смотреть» во внешний мир, а xl0 – во внутреннюю сеть. IP- адрес внутреннего интерфейса: 192.168.9.2 , маска подсети 255.255.255.0, имя интерфейса xl0; IP-адрес внешнего интерфейса 83.xxx.xxx.xxx, маска подсети 255.255.255.224, имя интерфейса rl0.

Уточнить, сетевым картам каких производителей соответствуют те или иные сетевые адреса, можно, заглянув в файл GENERIC в каталоге /usr/src/sys/i386/conf:

# more /usr/src/sys/i386/conf/ GENERIC

В нем находим соответствующие строчки:

device rl # RealTek 8129/8139

device xl # 3Com 3c90x (“Boomerang”, “Cyclone”)

Таким образом, интерфейс rl0 соответствует сетевой карте RealTek 8129/8139 и ее аналогам. Сетевой интерфейс xl0 соответствует сетевой карте 3Com.

Отдельно стоит упомянуть о файле GENERIC. Это файл конфигурации ядра, устанавливаемого по умолчанию при инсталляции FreeBSD. Он организован так, чтобы система могла поддерживать большинство наиболее используемых устройств, в том числе и указанные сетевые карты. Очень часто дальнейшие модификации ядра строятся на модифицированной копии этого файла. В данном случае, мы именно так и поступим:

Шлюз провайдера – по умолчанию 83.xxx.xxx.1.
В сети присутствуют компьютеры пользователей – 192.168.9.31, 192.168.9.32.
Наш домен (условно) – ourdomain.ru.
Имя хоста (компьютера) – ourhost.ourdomain.ru.

Выполняем настройку сетевых карт. Можно использовать утилиту sysinstall (/stand/sysinstall для FreeBSD 5.5 и /usr/sbin/sysinstall для FreeBSD 6.1) Но поскольку нам известны все необходимые параметры, то для упрощения процесса и экономии времени мы будем задавать параметры путем редактирования соответствующих конфигурационных файлов.

Для редактирования будем использовать текстовый редактор vi, присутствующий практически в любой системе UNIX. Для администраторов, пока незнакомых с редактором, могу порекомендовать замечательную статью Максима Мошкова http://www.lib.ru/unixhelp/vi.txt и http://www.lib.ru/unixhelp/vibegin.txt.

Настройки сетевых интерфейсов во FreeBSD хранятся в файле /etc/rc.conf. Открываем его на редактирование:

И добавляем следующие строки:

# Задаем внутренний интерфейс
ifconfig_xl0="inet 192.168.9.2 netmask 255.255.255.0"
# Задаем внешний интерфейс
ifconfig_rl0="inet 83.xxx.xxx.xxx netmask 255.255.255.224"
# Задаем шлюз провайдера по умолчанию
defaultrouter="83.xxx.xxx.1"
# Имя хоста
hostname="ourhost.ourdomain.ru"
# Указываем, что сервер будет работать как маршрутизатор
gateway_enable="YES"

После чего перезагружаем компьютер:

В данный момент компьютер можно было и не перезагружать. Но мы хотим достоверно убедиться, что наши интерфейсы установлены корректно и работают, поэтому я все же рекомендую перезагрузиться.

После загрузки проверяем:

Вывод команды ifconfig:

rl0: flags=8843 mtu 1500
options=8
inet6 fe80::215:58ff:fe3e:8fb1%rl0 prefixlen 64 scopeid 0x1
inet 83.xxx.xxx.xxx netmask 0xffffffe0 broadcast 83.xxx.xxx.yyy
ether 00:xx:xx:xx:xx:xx
media: Ethernet autoselect (100baseTX )
status: active
xl0: flags=8843 mtu 1500
options=9
inet6 fe80::20a:5eff:fe62:ade2%xl0 prefixlen 64 scopeid 0x2
inet 192.168.9.2 netmask 0xffffff00 broadcast 192.168.9.255
ether 00:zz:zz:zz:zz:zz
media: Ethernet autoselect (100baseTX )
status: active
plip0: flags=108810

mtu 1500
lo0: flags=8049 mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet 127.0.0.1 netmask 0xff000000

Файл rc.conf, на мой взгляд, можно назвать ключевым файлом конфигурации. Очень большое число параметров, используемых системой, задается в виде соответствующих переменных в этом файле. В том числе настройки сетевых интерфейсов, файервола и NAT, используемых нами.

Настройка шлюза

Мы будем использовать «родной» для FreeBSD файервол IPFW. Для этого мы должны внести некоторые изменения в ядро системы. Если возникли дополнительные вопросы по перекомпиляции ядра, советую прочитать дополнительный материал: http://freebsd.org.ru/how-to/kernelconfig.html.

Заметьте, что нужно использовать исходные тексты ядра для соответствующей архитектуры. Поскольку архитектура нашего компьютера базируется на платформе i386, то и ядро должно быть скомпилировано в соответствии с платформой. Для владельцев компьютеров других платформ я рекомендую обратиться к соответствующей литературе.

Исходники ядра по умолчанию лежат в каталоге /usr/src/sys/i386/conf. Соответственно переходим в данный каталог:

Как правило, изменяют файл GENERIC, содержащий опции ядра, устанавливаемого по умолчанию. Для этого делаем копию данного файла:

# cp GENERIC ourkernel

Открываем на редактирование новый файл ourkernel:

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

#
options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE ?
#enable logging to syslogd(8)
options IPFIREWALL_FORWARD ?
#enable transparent proxy support
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
#
options DUMMYNET
#
options IPDIVERT #divert sockets

После сделанных изменений можно приступать к перекомпиляции ядра.

# config ourkernel
# cd /usr/src/sys/i386/compile/ourkernel
# make depend
# make
# make install

Если после перезагрузки сервер работает нормально, приступаем к настройке файервола.

Читайте также:  В экселе выбрать из раскрывающегося списка

Для организации работы файервола используются следующие переменные, добавляемые при необходимости в файл rc.conf.

Разрешает или запрещает использование файервола:

# Set to YES to enable firewall functionality
firewall_enable="NO"

Имя и местоположение файла, отвечающего за инициализацию файервола.

# Which script to run to set up the firewall
firewall_script="/etc/rc.firewall"

Файл rc.firewall не рекомендуется редактировать. Вместо этого лучше воспользоваться соответствующей переменной firewall_type или более простым способом, описываемым ниже.

При установке данного правила в «YES» подавляется вывод на дисплей:

Разрешить/запретить ведение лога событий:

Тип настройки файервола:

по умолчанию FreeBSD использует правила из файла /etc/rc.firewall.

В нем есть несколько готовых шаблонов:

open – файервол разрешает прохождение всех пакетов.

client – рекомендуется для защиты только этого компьютера. То есть файервол настроен как стандартный клиентский компьютер. Он разрешает все исходящие соединения и запрещает все входящие соединения, кроме соединений по 25 порту.

simple – предполагается для настроек простых шлюзов и т. д. То есть в качестве простейшего файервола, защищающего внутреннюю сеть от проникновения извне. Мы будем настраивать более гибкую систему правил, поэтому данный шаблон нами не используется не будет.

closed – Разрешается трафик через локальный интерфейс lo0. Прохождение остального трафика определяется правилом по умолчанию. Как правило, это запрет любого доступа, исключая внутренний интерфейс lo0 (попросту говоря, разрешен только доступ «к самому себе»)

UNKNOWN – запретить загрузку файервольных правил из конфигурационного скрипта по умолчанию. Файервол никак не настраивается. Будет он пропускать трафик или нет, зависит от конфигурации ядра системы. Используется по умолчанию.

Эту же переменную в значении «filename» – «имя_файла» – можно использовать для задания собственного конфигурационного файла для файервола.

будет загружать настройки из созданного файла /etc/rc.firewall.newconfig.

«firewall_flags=””» – служит для передачи дополнительных аргументов при использовании firewall_type со значением filename.

Наша задача состоит в том, чтобы создать систему, отвечающую следующим критериям:

Возможность модификации «на лету», незаметно для пользователей. Поэтому такие операции, как разрыв соединений и тем более перезагрузка для нас нежелательны.

Гарантия того, что наша система будет работать на большинстве машин.

В нашем примере скрипта все компьютеры локальной сети делятся на две условные группы: одна группа привилегированная – это те, кому разрешен доступ в Интернет, используя наиболее употребительные сервисы, такие как:

HTTP – порт 80;
HTTPS – порт 443;
FTP – порты 20, 21 и от 1025 до 65535;
SMTP-протокол для пересылки почты – порт 25;
POP3-протокол для приема сообщений – порт 110.

Есть и другая группа, компьютерам из которой разрешен доступ только к внешнему корпоративному серверу c IP-адресом 83.xxx.xxx.2 (только протоколы SMTP и POP3).

Мы должны добиться, чтобы можно было изменять привилегированную группу, что называется, «на лету», по возможности не разрывая установленных соединений. Для этого мы из нашего скрипта вызываем дополнительный скрипт rc.firewall.local.inet. Достаточно отредактировать и перезапустить этот дополнительный скрипт, не затрагивая всех остальных настроек файервола.

Дополнительно мы должны предусмотреть ситуацию, когда меняются параметры сети, такие как IP-адрес шлюза провайдера. Для этого мы будем использовать в скрипте локальные переменные. Например, при изменении шлюза по умолчанию достаточно изменить значение переменной intgateway и перезапустить скрипт rc.firewall.run.

Вот наш пример скрипта:

# vi rc.firewall.run
#!/bin/sh
extip="83.xxx.xxx.xxx"
intip="192.168.9.2"
intnet="192.168.9.0/24"
mailserver="83.xxx.xxx.2"
intgateway="83.xxx.xxx.1"
#
/sbin/ipfw -f flush &
#
/sbin/ipfw add 180 divert natd ip from $ to any out xmit fxp0
/sbin/ipfw add 190 divert natd ip from any to $
# ICMP
/sbin/ipfw add 500 allow icmp from any to any
# SSH
/sbin/ipfw add 10000 allow tcp from any to any 22
/sbin/ipfw add 10010 allow tcp from any 22 to any
# DNS
/sbin/ipfw add 11000 allow tcp from any to any 53
/sbin/ipfw add 11010 allow tcp from any 53 to any
/sbin/ipfw add 11020 allow udp from any to any 53
/sbin/ipfw add 11030 allow udp from any 53 to any
# Web FTP
/sbin/ipfw add 12000 allow tcp from me to any 20,21,80,443
/sbin/ipfw add 12010 allow tcp from any 20,21,80,443 to me
/sbin/ipfw add 12020 allow udp from me to any 20,21
/sbin/ipfw add 12030 allow udp from any 20,21 to me
#
# Script for the privilege group
/bin/sh /etc/rc.firewall.local.inet
# Deny other computer of LAN
/sbin/ipfw add 12960 deny tcp from $
to any 20,21,80,443
/sbin/ipfw add 12970 deny tcp from any 20,21,80,443 to $

/sbin/ipfw add 12980 deny udp from $
to any 20,21
/sbin/ipfw add 12990 deny udp from any 20,21 to $

#
#
/sbin/ipfw add 13000 allow tcp from $
to $ 25,110
/sbin/ipfw add 13010 allow tcp from $
25,110 to $

#
/sbin/ipfw add 55010 allow tcp from any to any 1024-65534
/sbin/ipfw add 55020 allow tcp from any 1024-65534 to any
/sbin/ipfw add 55030 allow tcp from any 1024-65534 to any
/sbin/ipfw add 55040 allow tcp from any to any 1024-65534
/sbin/ipfw add 55050 allow udp from any to any 1024-65534
/sbin/ipfw add 55060 allow udp from any 1024-65534 to any
/sbin/ipfw add 55070 allow udp from any 1024-65534 to any
/sbin/ipfw add 55080 allow udp from any to any 1024-65534
# Deny all
/sbin/ipfw add 65534 deny ip from any to any

Создаем и редактируем скрипт rc.firewall.local.inet для работы с привилегированной группой адресов:

# vi /etc/ rc.firewall.local.inet
#!/bin/sh
intnet="192.168.9.0/24"
privgroup=<31,32>
#
/sbin/ipfw delete 12310
/sbin/ipfw delete 12320
/sbin/ipfw delete 12330
/sbin/ipfw delete 12340
#
/sbin/ipfw add 12310 allow tcp from $$ to any 20,21,80,443,1025-65535
/sbin/ipfw add 12320 allow tcp from any 20,21,80,443,1025-65535 to $
$/sbin/ipfw add 12330 allow udp from $$ to any 20,21,1025-65535
/sbin/ipfw add 12340 allow udp from any 20,21,1025-65535 to $
$

В скрипте для изменения состава привилегированной группы необходимо отредактировать переменную privgroup, добавив/удалив в ней номер хоста в локальной подсети.
Например, чтобы добавить два компьютера с IP-адресами 192.168.9.33 и 192.168.9.45, нужно записать «privgroup=<31-33,45>».

Читайте также:  Болит голова при перемене погоды что делать

Использовать правила типа «/sbin/ipfw delete NNNNN» при старте системы, когда такого правила не было – немножко некрасиво. При попытке удалить несуществующее правило система выдает на консоль сообщение следующего вида:

ipfw: rule 13031: setsockopt(IP_FW_DEL): Invalid argument

При этом система продолжает нормально работать.

Если все делать строго, то нужно создавать два скрипта: один запускать при старте, второй – при изменениях на ходу. Но тогда нужно будет вносить соответствующие изменения в оба скрипта.Поскольку основная цель – создать простую в администрировании систему, то данной проблемой в нашем случае можно пренебречь.

Зато теперь мы можем после внесения соответствующих изменений просто перезапустить скрипт для привилегированной группы.

Также мы можем вносить изменения и перезапускать скрипт rc.firewall.run, хотя, по замыслу, это нам придется делать гораздо реже, чем в случае со скриптом привелигированной группы.

Поскольку мы написали свой собственный скрипт, обнуляющий существующие правила и запускающий альтернативную конфигурацию файервола, нужно подумать, как его запустить.

Во FreeBSD есть замечательный механизм запуска пользовательских программ: файл rc.local. По умолчанию он отсутствует в системе.

Раз мы уже создаем данный файл, добавим в него команду запуска демона natd, который отвечает за поддержку NAT.

Демон natd запускается из файла rc.conf. (Опять этот файл, поистине он играет ключевую роль для всей системы FreeBSD в целом!)

Механизм запуска этого файла из rc.conf выполняется посредством следующих переменных:

# — путь к самому файлу natd
natd_program="/sbin/natd"
# Разрешить NAT (если firewall_enable == YES)
natd_enable="YES"
# Внешний интерфейс или IPaddress для использования
natd_interface=""
# Дополнительный флаги запуска natd
natd_flags=""

Но в этом случае мы будем использовать вызов демона natd посредством rc.local. Команда:

автоматически создает файл /etc/rc.local и открывает его на редактирование.

Добавляем в него следующие строки:

# Команда запуска natd
/sbin/natd -n rl0
# где «-n rl0» — имя интерфейса, на котором запускается NAT
#
# И запускаем наш скрипт для установки правил для файервола:
/bin/sh /etc/rc.firewall.run

Перезагружаемся и проверяем доступ к нужным ресурсам Интернета с компьютера из локальной сети.

1. Эви Немет, Гарт Снайдер, Скотт Сибасс, Трент Р.Хейн. UNIX. Руководство системного администратора. «BHV», «Питер», 2004 г.
2. Алексей Федорчук, Алексей Торн. FreeBSD. Установка, настройка, использование. BHV, 2003 г.
3. Филипп Торчинский. Практическое пособие администратора UNIX. «Символ», 2003 г.

Автор Алексей Бережной
Опубликовано в журнале “Системный администратор”

Дистрибутив фрюхи часто называют самым подходящим для решения прикладных сетевых задач в локальной сети. Сегодня мы займемся решением одной из сетевых задач — настройкой шлюза на Freebsd 10 для доступа в интернет из локалки. Это простой, популярный и востребованный функционал сервера, который можно расширять дополнительными возможностями.

Введение

Будем использовать следующую версию системы для решения нашей задачи по настройке шлюза:

Если вы еще не установили систему, то рекомендую мою статью с подробным описанием установки Freebsd 10 с видео в конце. Если вдруг будете устанавливать в качестве виртуальной машины на Hyper-V, то у меня есть отдельная заметка на эту тему с описанием поддержки ядром freebsd гипервизора Hyper-V.

На сервере установлены 2 сетевые карты:

  • hn0 — внешний интерфейс, получает интернет от провайдера, настройки по dhcp
  • hn1 — локальная сеть, адрес 10.20.30.1, установлен вручную

В нашу задачу по настройке программного freebsd роутера будет входить настройка маршрутизации на сервере, установка и настройка ipfw, включение nat, настройка локального dhcp и dns сервера.

Если у вас недостаточно опыта и вы не чувствуете в себе сил разобраться с настройкой шлюза самому с помощью консоли сервера — попробуйте дистрибутив на основе centos для организации шлюза и прокси сервера в локальной сети — clearos. С его помощью можно через браузер настроить весь необходимый функционал. В отдельной статье я подробно рассказал о настройке и установке clearos.

Подготовка сервера к настройке шлюза

Подробно вопрос настройки сервера Freebsd 10 я рассмотрел отдельно. Рекомендую ознакомиться с материалом. Здесь я не буду останавливаться на нюансах, а просто приведу команды, которые нам необходимы, без комментариев и подробных пояснений.

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

Теперь установим mc, я привык работать в нем:

Включаем синхронизацию времени. Для этого добавляем в /etc/rc.conf

И запускаем демон ntpd:

Теперь проверим сетевые настройки. Первый сетевой интерфейс я настроил еще во время установки, поэтому доступ в интернет на сервере уже есть. Вот мой конфиг сети:

Не забываем добавить dns сервер в /etc/resolv.conf.

Настройка ipfw и ядерного nat на Freebsd 10

Для того, чтобы включить firewall и nat на будущем freebsd маршрутизаторе можно просто подгрузить необходимые модули ядра. Так сделать проще всего и быстрее, но есть нюанс. Как только вы загружаете модуль ipfw, вы теряете доступ к серверу. Если вы работаете не за консолью, а скорее всего это так, тем более если у вас вообще нет доступа к консоли сервера, то делать так не рекомендуется по понятным причинам. Поэтому мы поступим по-другому. Добавим необходимые опции в ядро, в том числе и опцию, которая делает по-умолчанию фаервол открытым, соберем новое ядро и установим его. Так мы не потеряем удаленный доступ к серверу.

Перед сборкой ядра обновим исходники системы. Я предпочитаю это делать через svn. Если он у вас не установлен, то установите:

Теперь обновляем исходники:

Копируем стандартное ядро и добавляем туда новые строки:

Собираем и устанавливаем новое ядро:

Добавляем в файл /boot/loader.conf строку:

Добавляем в /etc/rc.conf следующие строки (комментарии уберите):

Идем в указанную папку и создаем там файл для правил ipfw:

Содержание этого конфига приведу в виде ссылки на скачивание уже готового файла с подробными комментариями. Думаю, вы без проблем разберетесь в настройках. Здесь не хочу на этом подробно останавливаться, все же тема настройки ipfw это отдельный разговор, у нас задача настроить роутер. Вот готовый набор правил — rc.firewall. Не забудьте указать свои интерфейсы и ip адреса. Если ошибетесь, потеряете доступ к серверу. Когда все настроите, отключите логирование. Там по-умолчанию стоит запись логов на правила nat и deny all.

Читайте также:  Внешняя звуковая карта asus xonar u7 mkii

Копируем скрипт безопасного редактирования правил и делаем его исполняемым:

Подробно о том, что это за скрипт и как он работает я рассказал в теме по настройке freebsd, ссылку на которую давал в начале. Активируем новые правила запуском скрипта:

Откроется список правил в редакторе по-умолчанию. Там уже будут все правила. Можете еще раз их проверить и если все в порядке, сохраняете файл и выходите из редактора. В консоли вы увидите следующее:

Проверим примененные правила:

Если доступ к роутеру не потеряли, значит все в порядке. Можно перезагрузить сервер и все добавленные параметры в rc.conf активируются. Сделайте это и попробуйте на каком-нибудь компьютере в сети пропинговать адрес в интернете по ip, к примеру 8.8.8.8. Если пинги пройдут, значит все в порядке.

Поле того, как убедитесь, что ipfw настроен корректно, правила применятся и доступ к серверу есть, можете перевести его из открытого режима работы (последнее правило автоматически устанавливается allow all from any to any) в закрытый. Для этого в файл /boot/loader.conf добавьте строку и перезагрузите сервер:

На этом основная настройка шлюза на Freebsd 10 окончена. Клиенты смогут выходить в интернет. Но для удобства необходимо на шлюз установить и настроить dhcp и dns сервер, для обслуживания запросов пользователей. Иначе придется вручную забивать сетевые параметры и использовать сторонний dns сервер.

Установка и настройка dnsmasq

Для нашего роутера на freebsd подойдет любой dns и dhcp сервер. Можно использовать традиционные named и dhcp-server. Но для простоты и удобства, когда не нужен дополнительный функционал, я предпочитаю использовать простой и быстрый в настройке dnsmasq.

Устанавливаем dnsmasq на Freebsd шлюз:

Приводим конфиг к следующему виду:

Добавляем в /etc/rc.conf:

Все, теперь наш шлюз полностью готов. Настраиваем на клиентах получение настроек по dhcp и проверяем работу интернета.

Информацию о выданных leases dhcp сервера dnsmasq можно посмотреть в файле /var/db/dnsmasq.leases.

Анализ сетевой активности в freebsd с помощью iftop

Иногда хочется посмотреть, что происходит на роутере и кто использует интернет в данный момент. По-умолчанию, в системе нет готового средства для получения этой информации. На помощь нам придет простая программа iftop, которая позволяет в режиме реального времени посмотреть активность на сетевом интерфейсе.

Устанавливаем iftop на настроенный Freebsd шлюз:

Запускаем iftop с указанием интерфейса и отображением используемых портов:

Видим любопытную картину — кто, куда, по какому порту и с какой скоростью лезет.

Я для примера на одном из компьютеров запустил генератор трафика интернета. Он занял почти весь канал и это стало отлично видно на роутере с помощью iftop. Конечно, эта простая утилита не решает всех вопросов по мониторингу сетевой активности, но для представления текущей картины подходит, если вам не нужно что-то большее.

Заключение

Подведем итог того, что сделали. За короткое время настроили полноценный шлюз (по сути программный роутер) на базе Freebsd 10 для обеспечения выхода в интернет клиентов за сервером. При этом обеспечили автоматическое получение настроек. Даже на скромном виртуальном сервере такой шлюз способен переварить достаточно большой траффик.

Вся настройка занимает буквально 10-15 минут. Основное время уходит на сборку ядра. Чем выше версия Freebsd, тем дольше оно собирается, несмотря на то, что скорости железа существенно возрастают.

Пройдемся по пунктам и разберемся с тем, что конкретно мы сделали:

  1. Подготовили сервер к настройке шлюза.
  2. Пересобрали ядро с необходимыми параметрами.
  3. Настроили ipfw и nat, включили маршрутизацию.
  4. Установили и настроили dnsmasq для раздачи сетевых настроек по dhcp и dns сервера.
  5. Установили iftop для простейшего анализа сетевой активности на внешнем интерфейсе.

Этого достаточно для полноценной работы шлюза на Freebsd 10. Если есть необходимость подсчета пользовательского траффика или ограничения доступа к определенным ресурсам, можно настроить прокси сервер squid и sams2 к нему.

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

Для начала нужно установить ОС на сервер. Ставить систему можно даже с bootonly CD докачивая необходимое по сети. Нужно поставить только самый минимум. Допустим что у сервера два интерфейса: le0, который "смотрит" в интернет и em0, к которому подключена локальная сеть. В локальной сети мы будем использовать пространство 172.31.255.0/24, причём первый адрес (172.31.255.1) будет использоваться сервером.

Первым делом нужно добавить в файл /etc/rc.conf строку:

Эта строка при загрузке сервера разрешает пересылку IP-пакетов. Без неё не возможно использование сервера в качестве маршрутизатора. Чтобы это изменение вступило в силу до перезагрузки нужно выполнить команду:

Следующим шагом сконфигурируем DNS. Сначала нужно в файле /etc/namedb/named.conf заменить строку:

После этого разрешим запуск DNS-сервера добавив в /etc/rc.conf строку:

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

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

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

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

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

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

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

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

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

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

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

admin

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *