Как настроить смартфоны и ПК. Информационный портал

Настройка сетевой карты на freebsd. Задание серверов DNS

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

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

# uname -v FreeBSD 10.2-RELEASE-p8 #0 r292756M: Sat Dec 26 22:49:34 MSK 2015 root@freebsd:/usr/obj/usr/src/sys/GENERIC

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

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

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

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

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

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

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

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

# pkg install iftop

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

# iftop -i hn1 -P

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

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

Заключение

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

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

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

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

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

В этой статье будет рассмотрена реализация простой (офисной или домашней) локальной сети c выходом в Интернет на базе операционной системы FreeBSD. Рассмотренный в предыдуших статьях сервер (он же шлюз в Интернет) будет реализован именно на этой операционной системе. Здесь мы рассмотрим только базовую установку FreeBSD и настройку выхода в Интернет, а дополнительные сетевые сервисы (FTP, WEB и пр.) будут рассмотренны в соответствующих статьях. Дальнейший материал будет основан на статье "Простая офисная локальная сеть с подключением к Интернет ".

Базовая установка и настройка FreeBSD

Итак, после подготовительных действий, рассмотренных в статье , приступим к установке операционной системы FreeBSD 6.2.

Образы CD можно скачать с сайта www.freebsd.org (2 CD).

После загрузки компьютера с инсталляционного CD запускается программа sysinstall, которая предназначена для установки и настройки FreeBSD. С помощью этой программы можно произвести настройку операционной системы не только во время установки, но и после, в любое время, запустив ее из командной строки (# sysinstall).

Навигация в ней осуществляется с помощью следующих клавиш: стрелки курсора, <пробел> , , (причем <пробел> и > эквивалентны, а клавиша аналогична стрелкам влево-вправо ).
Чтобы вернуться на предыдущее меню, необходимо выбрать пункт Exit или . Омечать выбранные пункты можно или пробел ом или enter -ом. (Из меню выбора пакетов (packages ) можно выйти только, выбрав кнопку , даже если вы никаких пакетов не хотите устанавливать.)

Начинаем установку.

1. Выбираем из меню пункт Custom .

2. Далее в появившемся меню выбираем пункт Partition и попадаем в редактор слайсов (слайсы соответствуют первичным разделам в терминологии Windows и Linux; для установки FreeBSD достаточно одного слайса). Примечание: если в компьютере несколько жестких дисков, то сначала будет предложено меню выбора диска.
Например, на моей машине уже есть два раздела с Windows XP , а остальное место обозначено как unused (не занято):

Чтобы удалить какой-либо раздел, на него надо стрелками вверх-вниз подвести курсор и нажать клавишу , но если необходимо оставить существующие разделы, например с Windows, то тогда их трогать не надо.
Чтобы создать слайс для freebsd надо подвести курсор на раздел, помеченный как unused , и нажать клавишу (Create Slice). В появившемся окне надо ввести размер создаваемого слайса в блоках (или мегабайтах, добавив букву M после введенного числа, например - 1000M) или оставить значение по умолчанию для использования всего свободного пространства.
Далее соглашаемся с предложенным типом раздела (165 - для FreeBSD). В результате получаем слайс ad2s3 , где ad2s3 означает: a ta d isk 2 , s lice 3 .

Для завершения редактирования слайсов надо нажать клавишу (Finish).

3. В появившемся меню выбираем установку менеджера загрузки - BootMgr .

4. Выбираем пункт Label и попадаем в редактор разделов файловой системы FreeBSD. Здесь созданный ранее слайс можно "нарезать" на разделы файловой системы FreeBSD. Это разбиение можно произвести автоматически, нажав клавишу (Auto Defaults) или вручную. Попробуйте автоматическое разбиение. Удалить любой раздел можно клавишей . Но лучше вручную создать необходимые разделы.
Для создания раздела курсор ставим на "нарезаемый" слайс ad2s3 (или какой там у вас... в самой верхней строке) и нажимаем клавишу (Create), вводим размер создаваемого раздела (не забываем в конце числа букву M , если вводится размер в мегабайтах), выбираем тип "Swap " для swap раздела или "FS " - для всех остальных разделов и указываем точку монтирования. (Точка монтирования - это каталог, в который будет монтироваться раздел). Повторяем процедуру для всех создаваемых разделов. Размеры разделов необходимо хорошо спрогнозировать. Например в разделе /var будут находиться временные файлы, лог-файлы, файлы баз данных, очереди печати, почты и т.д.; в /usr (точнее в /usr/local) - все устанавливаемые дополнительно приложения; в /home - каталоги пользователей; размер раздела SWAP обычно выбирается равным одному-двум размерам RAM; для корневого раздела "/" достаточно 256MB.
У меня получилось так:

Как можно видеть, разделы файловой системы обозначаются добавлением буквы (a,b,...) к имени слайса.
Завершаем редактирование разделов, нажав (Finish), и возвращаемся в меню.

5. Переходим к пункту Distributions , где можно выбрать тип базовой установки, и отмечаем опцию Developer , которая означает, что будут установлены все основные бинарные файлы (системные утилиты, библиотеки, компиляторы), исходники и документация. Соглашаемся на установку коллекции портов (Ports Collection). Далее, выбрав пункт Exit , возвращаемся в предыдущее меню и выбираем Commit , выбираем источник установки (в нашем случае CD/DVD ) и отвечаем утвердительно на предупреждение о необратимости дальнейших действий. После этого идет процесс установки базовых компонентов системы. После завершения установки будет предложено вернуться в кофигурационное меню для продолжения установки/насройки. Выбираем и возвращаемся в меню.

6. В пункте Root Password устанавливаем пароль пользователя root (администратора). Пункт User Manager не трогаем - пользователей добавим потом.

7. Руссифицируем консоль (пункт Console ):

  • в пункте Font выбираем IBM 866 ,
  • в пункте Keymap выбираем Russia KOI8-R ,
  • в пункте Screenmap выбираем KOI8-R to IBM866 ,
  • в пункте Ttys выбираем KOI8-R (cons25r ).

8. Настраиваем мышь (пункт Mouse ):

  • в пункте Type выбираем auto (в большинстве случаев),
  • в пункте Port выбираем PS/2 (или COM1...),
  • в пункте Enable включаем поддержку мыши и проверяем ее работу.

9. В пункте Networking можно настроить сеть:

  • в пункте Interfaces можно выбрать из списка и настроить определившиеся сетевые интерфейсы (для некоторых сетевых карточек возможно потребуется перекомпилировать ядро или настроить их, прежде чем они появятся в списке). Настроить сеть можно позже, см. раздел "Настройка сети" ниже.;
  • отмечаем опцию ssh , чтобы иметь защищенный удаленный доступ к системе;
  • отмечаем опцию Gateway , чтобы разрешить маршрутизацию ip пакетов между сетевыми интерфейсами (если машина будет использоваться как маршрутизатор).

Но к настройке сети мы еще вернемся в одной из следующих статей.

10. Пункт Security не трогаем.

11. Выбираем пункт Packages , чтобы сразу установить несколько пакетов, хотя устанавливать приложения лучше из портов. В CD-ROM должен быть установлен инсталляционный CD. Пока выберем только командный интерпретатор bash. Его можно найти в группе shells . Ну, а далее по вкусу, например можно сразу выбрать установку XFree86-4.3, kde, moziila и т.д., хотя для сервера по большому счету иксы не нужны.
Отметив клавишей или необходимые пакеты, выбираем внизу пункт , затем , ждем окончания установки и выходим из sysinstall. Соглашаемся на перезагрузку, не забываем вынуть CD. На этапе загрузки из меню загрузчика выбираем FreeBSD (если используется несколько ОС).

12. Входим в систему под именем root .

13. Настраиваем консоль под себя. (Этот пункт выполнять необязательно).
Настроим и сделаем основным установленный нами командный интерпретатор bash (как в Linux).
Проверим, есть ли он в файле /etc/shells , если нет, то добавляем туда строку: /usr/local/bin/bash.
Сделать интерпретатор bash основным для суперпользователя root, можно командой:

# pw usermod root -s /usr/local/bin/bash

Копируем файлы .bash_profile , .bashrc , .bash_logout из директории /usr/compat/linux/etc/skel в /root и /usr/share/skel , но уже с именами dot.bash_profile , dot.bashrc , dot.bash_logout соответственно. Сделать это можно следующими командами:

# cp /usr/compat/linux/etc/skel/.bash_profile /root/.bash_profile # cp /usr/compat/linux/etc/skel/.bashrc /root/.bashrc # cp /usr/compat/linux/etc/skel/.bash_logout /root/.logout # cp /usr/compat/linux/etc/skel/.bash_profile /usr/share/skel/dot.bash_profile # cp /usr/compat/linux/etc/skel/.bashrc /usr/share/skel/dot.bashrc # cp /usr/compat/linux/etc/skel/.bash_logout /usr/share/skel/dot.logout

Теперь эти конфигурационные файлы при создании новых пользователей будут копироваться в их домашние каталоги.

Изменим настройки по умолчанию для интерактивной команды добавления пользователей adduser, запустив ее с ключом -C:

# adduser -C

(отвечаем class: russian, shell: bash, остальное оставляем по умолчанию).
Все. Теперь новые пользователи, созданные утилитой adduser , будут иметь руссифицированную консоль с командным интерпретатором bash.
И последний штрих. Для изменения приглашения командной строки в файлы .bashrc /usr/share/skel/dot.bashrc ) добавим строку: PS1="$ ", после чего приглашение будет выглядеть как [username@hostname currentdir]$ .
Отмечу, что редактировать конфигурационные файлы можно в простом текстовом редакторе ee , например:

# ee /usr/share/skel/dot.bashrc

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

На этом начальная установка и настройка системы закончена.

Конфигурирование ядра

Здесь мы коротко затронем вопросы конфигурирования и компиляции ядра.

Наверно, многие содрагались, услышав устрашающую фразу - "компиляция ядра системы". Однако, если спокойно разобраться, ничего страшного здесь нет. С точки зрения обывателя ядро - это "прослойка" между прикладными программами и "железом". Прикладные программы не взаимодействуют с "железом" и между собой напрямую, все взаимодействие осуществляется через ядро, и взаимодействие это осуществляется через стандартный интерфейс системных вызовов. Кроме интерфейса системных вызовов ядро содержит файловую подсистему, подсистему управления процессами, подсистему ввода-вывода, драйверы устройств (модули ядра). Но нам пока важно лишь то, что ядро непосредственно взаимодействует с "железом", а FreeBSD позволяет нам сконфигурировать ядро под конкретное "железо". Устанавливаемое по умолчанию ядро поддерживает много неиспользуемого в нашем случае оборудования и обеспечивает лишь базовую функциональность.

Приступим к конфигурации ядра

Настройка ядра FreeBSD осуществляется путем редактирования в любом текстовом редакторе конфигурационного файла ядра. По умолчанию это /usr/src/sys/i386/conf/GENERIC . Но мы будем редактировать не его, а его копию/usr/src/sys/i386/conf/NEW_GENERIC .
Для этого выполняем следующие команды:

# cd /usr/src # cp sys/i386/conf/GENERIC sys/i386/conf/NEW_GENERIC # ee sys/i386/conf/NEW_GENERIC

В файле NEW_GENERIC удаляем поддержку оборудования, которого у нас нет, и функциональность, которая нам не нужна, просто комментируя или удаляя соответствующие строки. Если нет уверенности, то лучше ничего не удалять. Далее добавляем несколько параметров, чтобы включить NAT (трансляцию адресов - преобразование IP адресов локальной сети во внешний IP адрес), что даст возможность использовать в Интернете один внешний IP адрес всеми компьютерами локальной сети:

Ident NEW_GENERIC options IPFIREWALL options IPDIVERT options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=1000

Здесь ident NEW_GENERIC определяет имя нового ядра (можно любое задать).
options IPFIREWALL - включает FIREWALL.
options IPFIREWALL_VERBOSE - включает логи файрвола.
options IPDIVERT - разрешает перенаправлять пакеты с одного сетевого интерфейса на другой, опция необходима для трансляции адресов, для "расшаривания" Интернета.

Списки поддерживаемых устройств и опций можно найти в файлах:
/usr/src/sys/i386/conf/NOTES и /usr/src/sys/conf/NOTES .

Следующими командами выполняем компиляцию ядра:

# make buildkernel KERNCONF=NEW_GENERIC # make installkernel KERNCONF=NEW_GENERIC

Перезагружаем компьютер. Все. Старое ядро автоматически будет сохранено в каталоге /boot/kernel.old .

Не PnP устройства можно настроить, отредактировав файл /boot/device.hints . Требуемому устройству (по аналогии с другими) можно задать номера прерываний, портов и пр. Тамже можно запретить использование какого-либо устройства. Например, у меня в "маме" была "криво" реализованна поддержка acpi, из-за чего глючила мышь, а перепрошивать bios не хотелось. Поэтому я просто отключил поддержку acpi в ядре, добавив в файл /boot/device.hints следующую строку:

Hint.acpi.0.disabled="1"

Но это просто пример. Надеюсь у вас все заработает нормально и без этого.

Еще один момент. Все определившиеся ядром устройства имеют буквенно-цифровые обозначения, например pcm0 - звуковая плата. Какие устройства, под какими именами и насколько удачно ядро смогло определить их и сконфигурировать, можно увидеть при загрузке системы или по команде dmesg .

Настройка сети

Теперь можно приступить к настройке нашего сервера как шлюза в Интернет. Итак наш сервер имеет две сетевых платы: одна "смотрит" в Интернет, а вторая - в нашу локальную сеть. В сетевых настройках первой сетевой платы нам надо прописать IP адрес, шлюз, маску подсети и IP-адреса DNS-серверов, которые нам предоставил Интернет-провайдер. Пусть в нашем примере нам провайдер предоставил: внешний IP 195.34.10.134, шлюз провайдера 195.32.10.1, DNS серверы: 195.34.32.116 и 87.240.1.2).

В настройках второй сетевой платы надо прописать IP адрес 192.168.20.1, который принадлежит нашей локальной сети (см. "Простая офисная локальная сеть с подключением к Интернет" ).

Настройку сетевых интерфейсов можно произвести с помощью уже известной вам утилиты sysconfig (см. пункт 9 базовой установки выше) или путем прямого редактирования файла /etc/rc.conf .

Так или иначе для нашего примера файл /etc/rc.conf должен содержать следующие строки (сетевые настройки):

Ifconfig_rl0="inet 195.34.10.134 netmask 255.255.255.0" # внешний IP и маска подсети, предоставленные провайдером ifconfig_rl1="inet 192.168.20.1 netmask 255.255.255.0" # внутренний IP, который будет шлюзом по умолчанию для нашей локальной сети gateway_enable="YES" # режим маршрутизатора, позволяет пересылать пакеты между сетевыми интерфейсами natd_enable="YES" # включаем NATD демон, который занимается трансляцией адресов: внутренних во внешние и наоборот natd_interface="rl0" # natd демон работает на внешнем интерфейсе defaultrouter="195.34.10.1" # шлюз по умолчанию, который предоставил провайдер firewall_enable="YES" # включаем firewall firewall_type="OPEN" # пока ограничимся либеральным вариантом файрволла hostname="myoffice.ru" # имя этого сервера sshd_enable="YES" # для удаленного доступа к серверу

rl0 и rl1 - это имена сетевых интерфейсов в нашем примере (на чипе Realtek). Имена своих сетевых интерфейсов можете посмотреть командой ifconfig или через интерактивную утилиту настройки syscinstall .

Если у вас есть еще какие либо удаленные локальные сети, например 192.168.40.0/24 и 192.168.50.0/24, доступ к которым из нашей локальной сети осуществляется через шлюзы 192.168.20.101 и 192.168.20.102 соответственно, то статические маршруты маршруты к этим сетям при необходимости можно задать следующим образом (в файле /etc/rc.conf ):

Static_routes="net1 net2" routes_net1="192.168.40.0/24 192.168.20.101" # пакеты в подсетку 192.168.40.0/24 пойдут через шлюз 192.168.20.101 routes_net2="192.168.50.0/24 192.168.20.102" # пакеты в подсетку 192.168.50.0/24 пойдут через шлюз 192.168.20.102

Domain myoffice.ru nameserver 195.34.32.116 nameserver 87.240.1.2

Теперь чтобы изменения вступили в силу, выполним команду /etc/netstar t или перезагрузим сервер.

Проверяем работу сети.
Сначала пингуем до шлюза провайдера:

# ping 195.34.10.1

Потом до сервера DNS:

# ping 195.34.32.116

А потом до любых интернет-узлов:

# ping yandex.ru

Пингуем машины в своей локальной сети, например:

# ping 192.168.20.4

Если пакеты проходят, значит все нормально.

Настройка выхода в Интернет рабочих компьютеров (рабочих станций) в локальной сети

Теперь переходим к настройке рабочих компьютеров.
Если для рабочих компьютеров используются статические IP адреса (т.е. вводятся вручную, а не раздаются через сервер DHCP), то надо просто в настройках протокола TCP/IP у каждого рабочего компьютера прописать:

статический IP-адрес (уникальный для каждого компьютера в локальной сети, например 192.168.20.4),
маску подсети (255.255.255.0 в нашем случае)
шлюз по умолчанию (192.168.20.1, т.е. IP нашего сервера на FreeBSD, который и является шлюзом в Интернет)
DNS серверы (такие же как у сервера, предоставленные провайдером)

Делается это в Windows XP через:

Пуск-Панель управления-Сетевые подключения на значке сетевого подключения к локальной сети кликаем правой кнопкой мыши, выбираем "свойства" - Настройки TCP/IP.

Перезагружаем компьютер и проверяем работу сети:

В контексте данного мануала мы будем рассматривать адресацию IPv4. Настройки IP-адреса производятся через файл rc.conf, причем в нем мы прописываем как статический ip-адрес, так и в случае использования DHCP указываем о необходимости использования динамического.

Для начала определим какие сетевые интерфейсы используются на машине, сделаем это с помощью команды ifconfig.

Скриншот показывает результат выполнения команды ifconfig. На нем мы можем видеть одну сетевую карту с именем em0, а также виртуальный loopback интерфейс lo0. Наименование сетевого интерфейса зависит от производителя (Например для сетевых карт Realtek это будет re, у меня em это встроенная интеловская сетевая карта). В нашем случае мы видим наш сетевой интерфейс с присвоенным адресом 192.168.2.6. Сетевая маска написана в шестнадцатиричном виде

Установка статического ip-адреса.

Скажем я хочу поменять ip-адрес без перезагрузки машины. Это можно сделать с помощью одной команды через shell. Соответственно этот адрес измениться после перезагрузки, т.к. все настройке при загрузке берутся из файла /etc/rc.conf, а мы туда вносить ничего пока не будем.

Для примера я хочу поменять адрес на 192.168.2.78. Есть два варианта записи команды, оба они верны -

Ifconfig em0 192.168.2.78 netmask 255.255.255.0

Ifconfig em0 192.168.2.78/24

Обе команды сменят ай-пи адрес, различие состоит в формате записи, во втором случае мы указываем 24-ю подсеть, что соответствует маске сети 255.255.255.0. Для того, чтобы этот статический адрес стал постоянным (как ни сумбурно это звучит, в смысле сохранился после перезагрузки). Мы должны добавить запись в /etc/rc.conf

Указывать маску подсети можно также двумя путями:

Ifconfig_em0="192.168.2.78 netmask 255.255.255.0"

Ifconfig_em0="192.168.2.78/24"

После перезагрузуки Ваш сервер назначит интерфейс em0 ip-адрес 192.168.2.78 и маску 255.255.255.0

Получение динамического адреса от DHCP

В данном случае также существует два пути, первый временный (до перезаргузки), второй постоянный, то бишь получать адрес каждый раз после перезагрузки.

Соотвественно для первого пути, мы просто вводим команду

Dhclient em0 Для второго пути, добавляем строку в rc.conf

Ifconfig_em0="DHCP"

Установка шлюза по умолчанию.

Для установки шлюза по умолчанию, редактируем файл /etc/rc.conf, добавляем или изменяем строку -

Defaultrouter="192.168.2.254"

Также это можно проделать командами - route delete default route add default 192.168.2.254

Задание серверов DNS

Для указания DNS-серверов (например мы хотим установить публичные гугловские DNS), открываем на редактирование файл /etc/resolv.conf и прописываем - nameserver 8.8.8.8 nameserver 8.8.4.4

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

Нам понадобится

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

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

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

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

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

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

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

rl0: flags=8843 mtu 1500
options=8
ether 00:xx:xx:xx:xx:xx

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


В компьютере установлены две сетевые карты 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. Открываем его на редактирование:

# vi /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. Соответственно переходим в данный каталог:

# cd /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"

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

firewall_quiet="NO"

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

firewall_logging="NO"

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

firewall_type="UNKNOWN"

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

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

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

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

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

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

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

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

Например:

firewall_type="/etc/rc.firewall.newconfig"

будет загружать настройки из созданного файла /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 ${intnet} to any out xmit fxp0
/sbin/ipfw add 190 divert natd ip from any to ${extip}
# 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 ${intnet} to any 20,21,80,443
/sbin/ipfw add 12970 deny tcp from any 20,21,80,443 to ${intnet}
/sbin/ipfw add 12980 deny udp from ${intnet} to any 20,21
/sbin/ipfw add 12990 deny udp from any 20,21 to ${intnet}
#
#
/sbin/ipfw add 13000 allow tcp from ${intnet} to ${mailserver} 25,110
/sbin/ipfw add 13010 allow tcp from ${mailserver} 25,110 to ${intnet}
#
/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 ${intnet}${privgroup} to any 20,21,80,443,1025-65535
/sbin/ipfw add 12320 allow tcp from any 20,21,80,443,1025-65535 to ${intnet}${privgroup}
/sbin/ipfw add 12330 allow udp from ${intnet}${privgroup} to any 20,21,1025-65535
/sbin/ipfw add 12340 allow udp from any 20,21,1025-65535 to ${intnet}${privgroup}

В скрипте для изменения состава привилегированной группы необходимо отредактировать переменную 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

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

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

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

# /bin/sh rc.firewall.local.inet

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

# /bin/sh 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. Команда:

# vi /etc/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 8 на вирутальной машине. В качестве эмулятора виртуальных машин используется программа Virtual Box установленная на ОС Windows 8, для Windows 7 настройки похожи, при надобности сориентируетесь по ходу дела.
Начинаем с того момента когда FreeBSD уже установленна на виртуальную машину, и теперь уже пора настроить сеть для дальнейшей работы. Настройка будет производиться в три этапа: настройка базовой ОС (windows 8), настройка программы Virtual Box, настройка FreeBSD.

1. Первым делом проверяем, включен ли брандмауэр.
Панель управления > Брандмауэр Windows > Настроить параметры

По умолчанию в системе брандмауэр включен, если он у вас выключен – настоятельно рекомендуется включить его. После включения брандмауэра перезагрузите компьютер.


Панель управления > Брандмауэр Windows > Разрешенные программы


После установки программы Virtual Box в «Сетевых подключениях» должен появиться виртуальный адаптер эмулятора.

3. Пропишем настройки хоста виртуальной машины.
Панель управления > Сеть и Интернет > Сетевые подключения > VirtualBox Host-Only Network


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

4. Настраиваем проброс сети из физического адаптера на виртуальный (Virtual Box).
Заходим в свойства физического адаптера, вкладка «Доступ». Здесь нужно поставить галочку на пункт «Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера », ниже выбрать хост Virtual Box.

Теперь необходимо отключить DHCP сервер в настройках Virtual Box.
5. Отключаем DHCP в Virtual Box
Чтобы перейти в настройки Virtual Box необходимо в менеджере виртуальных машин перейти через главное меню Файл > Настройки, откроется окно настроек, проходим на вкладку «Сеть».

Открываем настройки сети хоста, на вкладке «DHCP сервер» убираем галочку с пункта «Включить сервер», сохраняем настройки.

Теперь приступаем к настройке сети в самой FreeBSD. Стартуем виртуальную машину с установленной системой FreeBSD, авторизуемся в системе.

6. Определяем имя сетевого адаптера FreeBSD.
Вводим в консоли команду:

#ifconfig

В консоли будут показаны доступные адаптеры.


Нам нужен адаптер em0 , его мы и будем настраивать.

7. Задаем параметры для адаптера em0 в файле «rc.conf».
для редактирования:

#ee /etc/rc.conf

Задаём параметры:

Ifconfig_em0="inet 192.168.2.10 netmask 255.255.255.0" defaultrouter="192.168.2.1" hostname="localhost"


Жмем клавишу «ESC», появляется меню редактора, выбираем «leave editor», затем «save changes», таким образом мы сохранили сделанные нами изменения. Теперь необходимо прописать настройки в файле resolv.conf

8. Прописываем настройки в файле resolv.conf
Открываем конфигурационный файл :

Ee /etc/resolv.conf

Добавляем строку:

Nameserver 192.168.2.1


Сохраняем изменения. Перезапускаем FreeBSD, команда для перезагрузки:

После перезагрузки, входим в систему, и пробуем сделать .
Например:

#ping google.kz


Убеждаемся что сеть работает. На этом впринципе пока всё. Стоит заметить что данный способ это лишь один из множества вариантов настройки сети. Подходит ли он вам, решать вам.

Лучшие статьи по теме