ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Метки статьи: ‘FreeBSD’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

В данной статье рассматривается возможность использование MPD 5-й версии в качестве сервиса PPPoE на серверах FreeBSD.

Введение

Mpd — реализация multi-link PPP протокола для FreeBSD, основанная на netgraph(4). В его основу легли концепции скорости и гибкости настроек. Исходя из этих принципов настройка соединений происходит на пользовательском уровне (user land), в то время как передача данных является функцией ядра (kernel).

Mpd поддерживает множество типов соединений:

  • модем — для соединения различных асинхронных последовательных соединений (asychronous serial connections), включая модем, ISDN адаптеры, и нуль-модемное соединение (null-modem). Mpd включает в себя скриптовый язык обработки данных основанный на событиях (event-driven scripting language) для установки типа модема, утановки соединения, авторизации и т.д.
  • pptp — соединение точка-точка через Internet по протоколу PPTP (Point-to-Point Tunnelling Protocol). Данный протокол поддерживается большинством производителей операционных систем и оборудования.
  • l2tp — соединение через Internet используя протокол 2-го уровня L2TP (Layer Two Tunnelling Protocol). L2TP является дальнейшей реализацией протокола PPTP и также поддерживается современными производителями операционных систем и оборудования.
  • pppoe — соединение поверх Ethernet по протоколу PPP (PPP-over-Ethernet). Данный протокол в основном используется DSL провайдерами.
  • tcp — тунелирование PPP сессии поверх TCP соединения. Кодирование фреймов (Frames) происходит по аналогии с асинхронным соедиениеним (asychronous serial connections).
  • udp — туннелирование PPP сессии поверх UDP соединения. Каждый фрейм инкапсулируется в пакет с UDP датаграммой (UDP datagram packet).
  • ng — соединение различных устройств, поддерживаемых netgraph. Netgraph — система сетевых модулей уровня ядра, поддерживает синхронные последовательные соединения (synchronous serial connections), Cisco HDLC, Frame Relay, и многие другие протоколы.

MPD поддерживает некоторые реализации субпротоколов PPP и их расширений, таких как:

  • Multi-link PPP
  • PAP, CHAP, MS-CHAP и EAP автроризация
  • сжатие трафика (traffic compression (MPPC, Deflate, Predictor-1))
  • криптование трафика (traffic encryption (MPPE, DESE, DESE-bis))
  • IPCP и IPV6CP параметры согласования

В зависимости от конфигурационных правил и параметров соединения, mpd может функционировать как обычный PPP клиент/сервер (client/server) или передавать пакеты без изменения другому хосту, используя поддерживаемый тип соединения, обеспечивая при этом LAC/PAC/TSA функциональность для построения распределенных сетей.

Mpd включает в себя следующие дополнительлные возможности:

  • поддержка IPv4 и IPv6.
  • управление по Telnet и HTTP.
  • различные типы авторизации и методы подсчета трафика (RADIUS, PAM, авторизация по скрипту, авторизация по файлу, …)
  • подсчет трафика по NetFlow
  • Network address translation (NAT)
  • Dial-on-demand с выключением по неактивности (idle timeout)
  • Динамическое управление соединением (Dynamic demand based link management (также известное как «rubber bandwidth»))
  • Функциональный язык написания скриптов для асинхронных последовательных соединений (synchronous serial ports)
  • Готовые скрипты для некоторых основных типов модемов и ISDN адаптеров
  • Интерфейс, независимый от типа устройств
  • Обширные возможности авторизации

Mpd изначально разрабатывался Whistle Communications, Inc. для ипользования во внутренней сети Whistle InterJet. В его основе лежит iij-ppp user-mode PPP код, сильно изменившийся до сего дня. Домашняя страница разработчиков Mpd в настоящее время хостится на сайте sourceforge.net MPD Project Page

Отличия от 4 версии:

  • Изменения структуры:
    • Устранены статические линки (static link) — реализация зависимостей бандла (bundle). Линки выбирает бандл, используя параметры согласования на сетевой стадии (NETWORK phase). Этим достигается простота и полная работоспособность клиента и мультифункциональность сервера. Также это дает возможность реализовать боелее сложные LAC, PAC и TSA настройки, чем было до 5 версии.
    • Внедрены шаблоны, основанные на динамическом создании линках/бандлах. Это позволило значительно сократить конфигурацию для серверов с большим количеством клиентов. Линк может автоматически создаваться входящим запросом (call request) от устройства или DoD/BoD запросом (Dial on Demand/Brake on Demand) из бандла. Бандл может автоматически создаваться при достижении сетевой стадии NETWORK phase.
    • Для упрощения объединена конфигурация физического и канального уровня, разделенных с верии 4.2.
  • Новые возможности:
    • PAM авторизация.
    • Добавлена поддержка динамического пула IP адресов.
    • Добавлена поддержка внешних скриптов авторизации ‘ext-acct’ как альтернатива ‘radius-acct’.
  • Изменения:
    • Значительные изменения в конфигурации комманд. Следует прочитать мануал и примеры.
    • FreeBSD 4.x и старые релизы DragonFly не поддерживаются.

Установка

Перед установкой следует решить для себя, как MPD будет загружать модули netgraph — через ядро или самостоятельно по мере необходимости.

Опции:
# netgraph options
options HZ=1000
options NETGRAPH
options NETGRAPH_PPPOE
options NETGRAPH_SOCKET
options NETGRAPH_CISCO
options NETGRAPH_ECHO
options NETGRAPH_FRAME_RELAY
options NETGRAPH_HOLE
options NETGRAPH_KSOCKET
options NETGRAPH_LMI
options NETGRAPH_RFC1490
options NETGRAPH_TTY
options NETGRAPH_ASYNC
options NETGRAPH_BPF
options NETGRAPH_ETHER
options NETGRAPH_IFACE
options NETGRAPH_KSOCKET
options NETGRAPH_L2TP
options NETGRAPH_MPPC_ENCRYPTION
options NETGRAPH_PPP
options NETGRAPH_PPTPGRE
options NETGRAPH_TEE
options NETGRAPH_UI
options NETGRAPH_VJC

Можно включать в конфиг ядра не все подряд, а только то, что нужно вам.
При установке на FreeBSD черед пэкедж или порт, mpd автоматически установится в /usr/local/sbin/mpd5 с компиллированием дефолтового набора поддерживаемых устройств. Для запуска mpd требуются несколько конфигурационных файлов, которые находятся в директории /usr/local/etc/mpd5. В этой директории вы можете найти примеры конфигурационных файлов.

Перед запуском mpd, нужно выполнить настроики следующих файлов:

mpd.conf
Файл описывает одну или более конфигурации. При старте mpd через консоль указывается название конфигурации (которая может состоять из нескольких mpd комманд), которая и загружается. Если название не указывается, загружается конфигурация, описанная в разделе ‘default’. Каждая конфигурация определяет один или несколько бандлов (bundle), линков (link) или репитеров (repeater). Их описание начинаются с комманды create. Последующие комманды в конфигурации описывают различные уровни этих блоков.
mpd.secret
Файл содержит пары логин-пароль. MPD просматривает файл при авторизации. Файл должен быть доступен для чтения только root.
mpd.script
Файл содержит скрипты для модемных устройств.

Прикручиваем логи:

В файл /etc/syslog.conf добавляем:
!mpd
*.* /var/log/mpd.log

Создаем файл /var/log/mpd.log ручками командой:

touch /var/log/mpd.log

Задаем ротацию логов в файле /etc/newsyslog.conf

/var/log/mpd.log 600 7 100 * JC

Файл /etc/rc.conf должен содержать запись:

mpd_enable=»YES»

иначе система не даст запустить процесс mpd.

Старт MPD проходит через загрузчик /usr/local/etc/rc.d/mpd5 с опцией start.

/usr/local/etc/rc.d/mpd5 start

Стандартные опции {start|stop|restart}.

Системные настройки сервера

Есть некоторые моменты, которые следует учесть, если ваш сервер имеет большое количество соединений. Например, можно столкнуться с ситуацией, когда при выводе комманды ngctl list будет выдававаться No buffer space available. Чтобы этого избежать следует добавить в /boot/loader.conf:

kern.ipc.nmbclusters=16384
kern.ipc.maxsockets=16384
net.graph.maxalloc=2048
kern.maxusers=512
kern.ipc.maxpipekva=32000000

в /etc/sysctl.conf:

net.graph.maxdgram=128000
net.graph.recvspace=128000

Более подробную информацию об этих настройках можно найти здесь.

Если MPD работает на вланах (vlan), которые поднимаются из /etc/rc.local, я наблюдал такую картину. Процесс MPD стартует раньше, чем поднимаются вланы на интерфейсах. В итоге получается, что вроде как сервер рабоатет нормально, только никто подключиться не может. Из этой ситуации есть два выхода (напоминает: из любой ситуации всегда есть два выхода). Либо поднимать вланы через /etc/rc.conf, либо в загрузчик MPD /usr/local/etc/rc.d/mpd5 в начало добавляем строчку:

`/bin/sh /etc/rc.local`

Будьте осторожны, возможно через этот файл у вас прописывается маршрутизация или еще что-нибудь.

Убедитесь, что этот способ не затронет другие сервисы в вашей системе.

Файл конфига mpd.conf

В этой главе я постараюсь по подробнее рассмотреть файл своего рабочего конфига. Если вы мигрируете с более ранней версии MPD, конфигурационный файл придется переписывать. Напомню также, что в 5-ой версии отказались от mpd.links. Для начала полный листинг mpd.conf:

startup:
#configure mpd users
 set user admin PASSWORD
#configure the console
 set console self 127.0.0.1 5005
 set console open
#configure the web server
 set web self 0.0.0.0 5006
 set web open
default:
 load def_conf
def_conf:
 create bundle template B
 set iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl
 set iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl
 set bundle enable compression
 set bundle enable encryption
 set iface idle 0
 set iface disable proxy-arp
 set iface enable tcpmssfix
 set ipcp yes vjcomp
 set ipcp ranges aaa.bbb.ccc.ddd/32 0.0.0.0/0
 set ipcp dns xxx.yyy.zzz.ddd qqq.www.eee.rrr
 set ccp yes mppc
 set mppc yes e40
 set mppc yes e56
 set mppc yes e128
 set mppc yes stateless
 set ecp disable dese-bis dese-old
 log -echo -ipv6cp -radius -rep
 load common
common:
 create link template PPPoE pppoe
 set link enable no-orig-auth
 set link max-children 300
 set auth max-logins 0
 load pppoe
pppoe:
 set link action bundle B
 set link enable multilink
 set link yes acfcomp protocomp
 set link disable chap pap eap
 set link enable chap chap-msv1 chap-msv2 chap-md5
 set link keep-alive 10 60
#pppoe on bge1 with service name "service_name0"
 create link template bge1_0 PPPoE
 set pppoe iface bge1
 set link enable incoming
 set pppoe service service_name0
#pppoe on bge1 with service name "service_name1"
 create link template bge1_1 PPPoE
 set pppoe iface bge1
 set link enable incoming
 set pppoe service service_name1
#pppoe on bge2 with service name "service_name0"
 create link template bge2_0 PPPoE
 set pppoe iface bge2
 set link enable incoming
 set pppoe service service_name0

Примечание:

Все строки, кроме комментариев и ссылок (строки которые заканчиваются на «:»), в файле mpd.conf должны начинаться с отступа (пробела).


Блок startup:

В этом блоке описываются юзеры для консольного и web интерфейса MPD, а также сами настройки консоли и web сервера. Если вам это не нужно, то конфигурация может начинаться с блока default, а блока startup может вообще не быть.

Блок default:

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

Блок def_conf:

С этого блока начинается конфигурация самого сервера. Если в конфиг файле описаны несколько конфигураций, у каждой должно быть свое уникальное имя.

Далее будем описывать построчно:

create bundle template B — создаем бандл «B», он же будет выступать в качестве шаблона
set iface up-script /usr/local/etc/mpd5/vpn_up_mpd.pl
set iface down-script /usr/local/etc/mpd5/vpn_down_mpd.pl
— цепляем
внешние скрипты на события создания и закрытия туннеля ppp.

MPD может передавать данные в качестве аргументов на события подключения и отключения пользователя к серверу:
$ARGV[0] — ngXX — номер тунеля
$ARGV[1] — inet
$ARGV[2] — aaa.bbb.ccc.ddd/32 — IP адрес сервера
$ARGV[3] — IP адрес, выданный пользователю
$ARGV[4] — логин пользователя

Эти аргументы вы можете использовать в perl скриптах vpn_up_mpd.pl и vpn_down_mpd.pl

set bundle enable compression — разрешаем CCP (Compression Control Protocol). Разрешаем только использование протокола, выбор протокола сжатия описан ниже.

set bundle enable encryption — разрешаем ECP (Encryption Control Protocol). Аналогично предыдущему пункту, выбор протокола сжатия описан ниже.

set iface idle 0 — таймаут в секундах неактивности, по истечении которого соединение принудительно разрывается со стороны сервера. «0» — не разрывать (стоит по дефолту).

set iface disable proxy-arp — запрещаем proxy-arp. Этот параметр полезен для имитации единой локалки для удаленных хостов.

set iface enable tcpmssfix — позволяет MPD управлять настройкой входящих и исходящих TCP SYN сегментов таким образом, чтобы не превышать MTU, допустимый на интерфейсе.

set ipcp yes vjcomp — разрешает компрессию заголовков (Van Jacobson TCP).

set ipcp ranges aaa.bbb.ccc.ddd/32 0.0.0.0/0 — пул IP адресов сервера/клиентов

set ipcp dns xxx.yyy.zzz.ddd qqq.www.eee.rrr — dns сервера, отдаваемые клиенту

set ccp yes mppc — включаем MPPC субпротокол сжатия/шифрования

set mppc yes e40 — включаем 40-bit MPPE шифрование

set mppc yes e56 — включаем 56-bit MPPE шифрование

set mppc yes e128 — включаем 128-bit MPPE шифрование

set mppc yes stateless — настройка, полезная при пакетлоссах (потерях)

log -echo -ipv6cp -radius -rep — уровни логгирования

load common — загрузка другого блока с именем common

Переходим к блоку common:

create link template PPPoE pppoe — создаем линк, он же будет выступать в качестве шаблона

set link enable no-orig-auth — Обычно при использовании PAP или CHAP авторизация происходит в начале соединения. Эта опция временно выключает данное требование в случае если наш сервер является единственным в сети, а клиенту вдруг не нравится запрос от сервера на авторизацию.

set link max-children 300 — максимальное количество соединений для этого шаблона

load pppoe — подгружаем следующий блок

set link action bundle B — накладываем на линк настройки бандла

set link enable multilink — опция позволяет создавать множественное подключение PPP. Но в данном случае опция позволяет пропускать большие пакеты (больше MTU) фрагментами. Что-то вроде фрагментации пакетов.

set link yes acfcomp protocomp — сжатие адресного поля, поля заголовков и поля протокола. Для экономии нескольких байтов во фрейме.

set link disable chap pap eap — запрещаем данные протоколы проверки пароля

set link enable chap-msv1 chap-msv2 chap-md5 — разрешаем протоколы проверки пароля (необходимы для возможности включения шифрования (Microsoft)).

set link keep-alive 10 60 — разрешает LCP пакеты. По умолчанию 5 40. Можно отказаться от этой опции, поставив первое значение в «0».

create link template bge1_0 PPPoE — создаем линк bge1_0 и накладываем настройки шаблона PPPoE

set pppoe iface bge1 — задаем интерфейс, где будет поднят наш сервис. Может быть как физическим интерфейсом, так и вланом (vlan).

set link enable incoming — разрешаем входящие соединения

set pppoe service service_name0 — поднимаем сервис-нейм (service-name) на заданном интерфейсе

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

Заключение

Из плюсов использования MPD в качестве PPPoE сервера хочу отметить меньшую загрузку CPU, особенно в сочетании с использованием поллинга (polling).

Для этого нужно собрать ядро с поддержкой поллинга:

options DEVICE_POLLING
options HZ=1000


После этого можно включить поллинг через /etc/sysctl.conf:

kern.polling.enable=1
kern.polling.user_frac=10

Последнее означает что система будет делить ресурсы CPU в соотношении userland/kernel как 10/90. По умолчанию это значение 50/50.

Конфиг работает на версиях порта mpd-5.0, mpd-5.1. С версией mpd-5.1_1 наблюдались проблемы на серверной стороне. При невыясненных обстоятельствах запускался второй процесс mpd5, который грузил CPU в 100%, а пользователи не могли подключиться. Пришлось откатываться на 5.1.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Folio
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

В продолжение статьи Настраиваем vlan на FreeBSD, но теперь немного усложним задачу.

Задача:

Есть два свича Cisco Catalyst 3560 к которым подключены два сегмента сети в разных vlan.

Необходимо, что бы пользователи подключенные к Cisco Catalyst 3560 видели IP-адреса FreeBSD сервера и Cisco Catalyst 3560 свичи находились во vlan`е управления.

Схема

Схема

Данная схема будет работать и на любых других свичах (других моделях Cisco Catalyst (тот же Catalyst 2950 или Catalyst 3550) или например свичах Dlink или Planet), главное чтобы в свиче была поддержка vlan (802.1Q).

Приступаем к настройке:

Switch 01
Создадим vlan`ы:

Switch01#configure terminal
Switch01(config)#vlan 5
Switch01(config-vlan)#name management
Switch01(config-vlan)#vlan 10
Switch01(config-vlan)#name segment_10
Switch01(config-vlan)#vlan 20
Switch01(config-vlan)#name segment_20
Switch01(config-vlan)#exit

Настроим IP-адрес свича во влане управления:

Switch01(config)#int vlan 5
Switch01(config-if)#ip address 10.0.0.2 255.255.255.248
Switch01(config-if)#exit

Поместим пользовательские порты свича в эти vlan`ы:

Switch01(config)#int gi 0/2
Switch01(config-if)#switchport mode access
Switch01(config-if)#switchport access vlan 10
Switch01(config-if)#int gi 0/3
Switch01(config-if)#switchport mode access
Switch01(config-if)#switchport access vlan 20

Настроим trunk на порту смотрящий в сторону Switch02, но разрешим только vlan 5,10 и 20:

Switch01(config-if)#int gi 0/1
Switch01(config-if)#switchport trunk encapsulation dot1q
Switch01(config-if)#switchport trunk allowed vlan 5,10,20
Switch01(config-if)#switchport mode trunk

Будьте внимательны: чтобы в последующем добавлять новые vlan в наш trunk вам необходимо использовать ту же команду, но с ключевым add:

Switch01(config-if)#switchport trunk allowed vlan add VLAN_ID

Если вы не будете использовать add, то свич выставит в разрешенные vlan`ы на trunk порту только те что будут вами перечисленны и удалит старые значения.

Например, команда:

Switch01(config-if)#switchport trunk allowed vlan add 25,30

добавит в trunk vlan`ы 25 и 30 при этом сохранив старые значения 5,10 и 20 и получится, что в данном tunk`е разрешены vlan`ы 5,10,20,25,30

Вернемся к нашей схеме и настроим Switch02.

Switch 02
Создадим vlan`ы:

Switch02#configure terminal
Switch02(config)#vlan 5
Switch02(config-vlan)#name management
Switch02(config-vlan)#vlan 10
Switch02(config-vlan)#name segment_10
Switch02(config-vlan)#vlan 20
Switch02(config-vlan)#name segment_20
Switch02(config-vlan)#exit

Настроим IP-адрес свича во влане управления:

Switch02(config)#int vlan 5
Switch02(config-if)#ip address 10.0.0.3 255.255.255.248
Switch02(config-if)#exit

Поместим пользовательские порты свича в эти vlan`ы:

Switch02(config)#int gi 0/11
Switch02(config-if)#switchport mode access
Switch02(config-if)#switchport access vlan 20
Switch02(config-if)#int gi 0/10
Switch02(config-if)#switchport mode access
Switch02(config-if)#switchport access vlan 10
Switch02(config-if)#exit

Настроим trunk на порту смотрящий в сторону Switch01 и разрешим только vlan 5,10 и 20:

Switch02(config)#int gi 0/2
Switch02(config-if)#switchport trunk encapsulation dot1q
Switch02(config-if)#switchport trunk allowed vlan 5,10,20
Switch02(config-if)#switchport mode trunk
Switch02(config-if)#exit

Также настроим trunk порт смотрящий в сторону FreeBSD:

Switch02(config)#int gi 0/24
Switch02(config-if)#switchport trunk encapsulation dot1q
Switch02(config-if)#switchport trunk allowed vlan 5,10,20
Switch02(config-if)#switchport mode trunk
Switch02(config-if)#exit

Настроим сервер FreeBSD

Создадим vlan управления:

/sbin/ifconfig vlan1 create
/sbin/ifconfig vlan1 vlan 5 vlandev em0
/sbin/ifconfig vlan1 add 10.0.0.1/29
/sbin/ifconfig vlan1 up

Создадим vlan 10:

/sbin/ifconfig vlan2 create
/sbin/ifconfig vlan2 vlan 10 vlandev em0
/sbin/ifconfig vlan2 add 192.168.10.1/24
/sbin/ifconfig vlan2 up

Создадим vlan 20:

/sbin/ifconfig vlan3 create
/sbin/ifconfig vlan3 vlan 20 vlandev em0
/sbin/ifconfig vlan3 add 192.168.20.1/24
/sbin/ifconfig vlan3 up

На этом с настройками покончено, настало время проверки. Если вы все сделали правильно, то:

  1. С FreeBSD сервера во влане управления (vlan 5) вы будете видеть и управлять (например по telnet) cisco catalyst)
  2. Пользователи во вланах 10,20 будут видеть IP интерфейсы сервера FreeBSD. Вы можете использовать этот сервер как шлюз в сеть Интернет для данных пользователей.

Посмотрим на cisco catalyst:

show vlan brief — просмотр существующих vlan`ов на свиче
show ip interface brief — просмотр существующих IP интерфейсов на свиче
show interfaces trunk — просмотр существующих trunk интерфейсов на свиче
show interfaces switchport — просмотр коммутации на интерфейсах свича

На FreeBSD интерфейсы смотрим командой ifconfig

Проверьте наличие пинга (ping) с FreeBSD сервера до пользователей и свичей.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

В нашем примере мы рассмотрим мониторинг бесперебойников APC путём использования serial-кабеля и утилиты apcupsd.

Начинаем.

Подключаем кабель к com-порту машины и ups. (Сразу обращу внимание, что стандартный COM кабель не подходит. Сама APC не дает схему распайки кабеля. Будьте внимательны. Если кого-то отпугнёт цена подобного кабеля у дилера, можно попробовать самостоятельно спаять его, воспользовавшись схемой).

На машине с FreeBSD устанавливаем порт apcupsd

cd /usr/ports/sysutils/apdupsd
make install clean

В окне конфигурации достаточно оставить одну галку напротив «Compile APC SmartUPS serial driver»

После процесса установки идём в /etc/rc.conf и добавляем туда строку:

apcupsd_enabled=»YES»

для разрешения автоматического запуска при буте из /usr/local/etc/rc.d/apcupsd

Скрипты и конфиги из диры /usr/local/etc/apcupsd

changeme, commfailure, commok, offbattery, onbattery — скрипты оповещения по мылу о состояниях UPS

соответственно — требуется замена батарей, потеря связи с бесперебойником, восстановление связи с бесперебойником, появление напряжения в сети, пропадание напряжения в сети и начало работы от аккумуляторов.

В каждом из этих скриптов следует поменять адрес (или адреса) mail на нужные.

Скрипт apccontrol используется для получения информации от ups, информирования в консоль об изменении состояния ups, выключения или перезагрузки обслуживаемых компьютеров (в данном случае — подключенного к ups по COM кабелю). Исполняется исключительно демоном apcupsd. Единственное что можно в нём поправить при надобности — закоментить строку с переменной перезагрузки

#SHUTDOWN=/sbin/shutdown

для предотвращения перезагрузок при частом пропадании питания (например часто мигает свет, и ups постоянно даёт ведомому компьютеру команду перезагрузиться).

Рассмотрим основные параметры конфига программы — apcupsd.conf

UPSCABLE smart — наш тип кабеля в данном случае

UPSTYPE apcsmart — тип нашего ups

DEVICE /dev/cuad0 — com-порт нашего компьютера (возможно, будет отличаться, например /dev/cuaa0)

POLLTIME 60 — интервал опроса ups’а демоном apcupsd в секундах

SCRIPTDIR /usr/local/etc/apcupsd — путь к скриптам

ONBATTERYDELAY, BATTERYLEVEL, MINUTES, TIMEOUT — определяют поведение ведомого компьютера в случае пропадания напряжения в сети (реакция в минутах)

ANNOY, ANNOYDELAY, NOLOGON — определяют время на выход из системы пользователей в случае пропадания напряжения в сети, а также возможность/невозможность логина в систему в таком состоянии

KILLDELAY — при ненулевом значении этого параметра, система будет работать указанное время (в секундах) даже после того как получила сигнал на выключение, по истечении которого будет предпринята попытка выключить систему

EVENTSFILE /var/log/apcupsd.events — файл логов. сюда попадают все события полученные от ups

EVENTSFILEMAX — размер вышеуказанного файла (в килобайтах, например — 100)

Пример работающего конфига apcupsd.conf:

#———————————

## apcupsd.conf v1.1 ##
# for apcupsd release 3.14.4 (18 May 2008) — freebsd

# «apcupsd» POSIX config file
# ========= General configuration parameters ============

#
UPSCABLE smart
UPSTYPE apcsmart

DEVICE /dev/usv
#POLLTIME 60

LOCKFILE /var/spool/lock

SCRIPTDIR /usr/local/etc/apcupsd
PWRFAILDIR /var/run

NOLOGINDIR /var/run

ONBATTERYDELAY 6

BATTERYLEVEL 5

MINUTES 3

TIMEOUT 0

ANNOY 300

ANNOYDELAY 60

NOLOGON disable

KILLDELAY 0

NETSERVER on

NISIP 0.0.0.0

NISPORT 3551

EVENTSFILE /var/log/apcupsd.events

EVENTSFILEMAX 10

UPSCLASS standalone

UPSMODE disable

STATTIME 0

STATFILE /var/log/apcupsd.status

LOGSTATS off

DATATIME 0

#FACILITY DAEMON

#UPSNAME UPS_IDEN
#BATTDATE mm/dd/yy

#SENSITIVITY H

#WAKEUP 60

#SLEEP 180

#LOTRANSFER 208

#HITRANSFER 253

#RETURNCHARGE 15

#BEEPSTATE T

#LOWBATT 2

#OUTPUTVOLTS 230

SELFTEST 336
#———————————

Запускаем apcupsd

/usr/local/etc/rc.d/apcupsd start

Проверяем связь с ups

/usr/local/sbin/apcaccess status

Если всё настроено правильно, получаем примерно следующий вывод:

APC : 001,052,1285
DATE : Thu Jul 24 15:00:46 MSD 2008
HOSTNAME : test-server
RELEASE : 3.14.0
VERSION : 3.14.0 (9 February 2007) freebsd
UPSNAME : UPS_IDEN
CABLE : Custom Cable Smart
MODEL : Smart-UPS 3000 RM
UPSMODE : Stand Alone
STARTTIME: Thu Jul 17 10:16:47 MSD 2008
STATUS : BOOST ONLINE
LINEV : 203.0 Volts
LOADPCT : 31.8 Percent Load Capacity
BCHARGE : 100.0 Percent
TIMELEFT : 20.0 Minutes
MBATTCHG : 10 Percent
MINTIMEL : 100 Minutes
MAXTIME : 0 Seconds
MAXLINEV : 216.0 Volts
MINLINEV : 177.1 Volts
OUTPUTV : 233.2 Volts
SENSE : High
DWAKE : 000 Seconds
DSHUTD : 090 Seconds
DLOWBATT : 02 Minutes
LOTRANS : 208.0 Volts
HITRANS : 253.0 Volts
RETPCT : 000.0 Percent
ITEMP : 25.2 C Internal
ALARMDEL : 5 seconds
BATTV : 55.1 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Line voltage notch or spike
NUMXFERS : 551
XONBATT : Thu Jul 24 14:39:19 MSD 2008
TONBATT : 0 seconds
CUMONBATT: 808 seconds
XOFFBATT : Thu Jul 24 14:39:20 MSD 2008
SELFTEST : NO
STESTI : 336
STATFLAG : 0x0720000C Status Flag
REG1 : 0x00 Register 1
REG2 : 0x00 Register 2
REG3 : 0x00 Register 3
MANDATE : 02/21/07
SERIALNO : JS0708009520
BATTDATE : 02/21/07
NOMOUTV : 230
NOMBATTV : 48.0
EXTBATTS : 0
FIRMWARE : 666.6.I
APCMODEL : FWI
END APC : Thu Jul 24 15:01:17 MSD 2008

Более подробно можно прочесть в мане /usr/local/share/doc/apcupsd/apcupsd.pdf

Или скачать его ТУТ

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

#!/usr/bin/perl

use Time::Local;

sub curr_date_unix{
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime();
$date_unix=timelocal ($sec,$min,$hour,$mday,$mon,$year+1900);
return $date_unix;
}
$cur_date=curr_date_unix();

%month_num=(‘Jan’ => ‘0’,
‘Feb’ => ‘1’,
‘Mar’ => ‘2’,
‘Apr’ => ‘3’,
‘May’ => ‘4’,
‘Jun’ => ‘5’,
‘Jul’ => ‘6’,
‘Aug’ => ‘7’,
‘Sep’ => ‘8’,
‘Oct’ => ‘9’,
‘Nov’ => ’10’,
‘Dec’ => ’11’,
);

@status=`/usr/local/sbin/apcaccess status`;

@ups_day=qw (01 02 03 04 05 06 07 08 09);

for ($i=0; $i<=$#status; $i++){
@spl=split(‘ ‘,$status[$i]);
chomp ($spl[0]);
chomp ($spl[2]);
chomp ($spl[3]);
chomp ($spl[4]);
chomp ($spl[6]);
if ($spl[0] eq LOADPCT){
$load=$spl[2];
}elsif ($spl[0] eq BCHARGE){
$charge=$spl[2];
}elsif ($spl[0] eq MAXLINEV){
$maxv=$spl[2];
}elsif ($spl[0] eq MINLINEV){
$minv=$spl[2];
}elsif ($spl[0] eq OUTPUTV){
$outv=$spl[2];
}elsif ($spl[0] eq ITEMP){
$temp=$spl[2];
}elsif ($spl[0] eq MODEL){
$model1=$spl[2];
$model2=$spl[3];
$model3=$spl[4];
}elsif ($spl[0] eq «STARTTIME:»){
$month=$spl[2];
$day=$spl[3];
$year=$spl[6];
@time_spl=split(‘:’,$spl[4]);
for ($j=1; $j<10; $j++){
if ($day eq $ups_day[$j-1]){
$day=$j;
}
}
}elsif ($spl[0] eq STATUS){
$st=$spl[2];
$st1=$spl[3];
}
}
$time=timelocal ($time_spl[2],$time_spl[1],$time_spl[0],$day,$month_num{$month},$year);
$delta= $cur_date — $time;

$min = $delta / 60;
$hours = $min / 60;
$days = sprintf(«%d»,($hours / 24));
$hours = sprintf(«%02d»,($hours — ($days * 24)));
$min = sprintf(«%02d»,($min — ($days * 60 * 24) — ($hours * 60)));
$sec = sprintf(«%02d»,($delta — ($min * 60) — ($days * 60 * 60 * 24) — ($hours * 60 * 60)));
if ( $days ne «0» ) {
$uptime = «$days days, «;
}
if ( $hours ne «0» ) {
$uptime .= «$hours:»;
}
$uptime .= «$min:$sec»;

open(UPS, «>/usr/ups.txt») || die «$!»;

printf UPS («%.0f\n»,$load);
printf UPS («LOAD\n»);

printf UPS («%.0f\n»,$charge);
printf UPS («CHARGE\n»);

printf UPS («%.0f\n»,$maxv);
printf UPS («MAXLINEV\n»);

printf UPS («%.0f\n»,$minv);
printf UPS («MINLINEV\n»);

printf UPS («%.0f\n»,$outv);
printf UPS («OUTPUTV\n»);

printf UPS («%.0f\n»,$temp);
printf UPS («ITEMP\n»);

printf UPS («%s %s\n»,$st,$st1);
printf UPS («STATUS\n»);

printf UPS («%s %s %s\n»,$model1,$model2,$model3);
printf UPS («MODEL\n»);

close(UPS);

Вывод результатов данного скрипта можно видеть в файле /usr/ups.txt:

32
LOAD
99
CHARGE
217
MAXLINEV
210
MINLINEV
213
OUTPUTV
25
ITEMP
ONLINE
STATUS
Smart-UPS 3000 RM
MODEL

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

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: MadMax
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 9, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Начинающие часто спрашивают:

Как поднять vlan на FreeBSD ?

Как сделать trunk на FreeBSD ?

Отвечаем:

Это не просто, а очень просто.

Теория:

Что такое vlan ?
Что такое trunk ?

VLAN (от англ. Virtual Local Area Network), VLAN могут являться частью большего LAN, имея определенные правила взаимодействия с другими VLAN, либо быть полностью изолированными от них. Простейший механизм изоляции различных подсетей, работающих через общие свичи и роутеры, известен как 802.1Q.

Преимущества VLAN

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

Транк VLAN — это физический канал, по которому передается несколько VLAN каналов, которые различаются тегами (метками, добавляемыми в пакеты). Транки обычно создаются между «тегированными портами» VLAN-устройств: свитч-свитч или свитч-маршрутизатор. (В документах Cisco термином «транк» также называют объединение нескольких физических каналов в один логический: Link Aggregation, Port Trunking). Маршрутизатор (свитч третьего уровня) выступает в роли магистрального ядра сети (backbone) для сетевого трафика разных VLAN.

На устройствах Cisco, протокол VTP (VLAN Trunking Protocol) предусматривает VLAN-домены для упрощения администрирования. VTP также выполняет «чистку» трафика, направляя VLAN трафик только на те коммутаторы, которые имеют целевые VLAN-порты.
Native VLAN — каждый порт имеет параметр, названный постоянный виртуальный идентификацией (Native VLAN), который определяет VLAN, назначенный получить нетеговые кадры.

Сказав проще, vlan — это логический канал внутри физического канала (кабеля), а trunk это множество логических каналов (vlan`ов) внутри одного физического канала (кабеля).

Итак более-менее с теорией разобрались, теперь подумаем зачем нам это может понадобиться.

Данная технология может пригодиться например если на сервер нужно «подать» несколько физических линков, а сетевая карта всего одна и вставить ещё одну нет возможности.

Возьмем подобную ситуацию как пример и попробуем настроить следущее:

  • У нас сервер только с одной сетевой картой, а
  • необходимо подключить два канала от двух провайдеров
  • Провайдер А выдал IP-адрес 192.168.1.15 маска 255.255.255.0
  • Провайдер Б выдал IP-адрес 172.16.10.48 маска 255.255.255.192

Для того чтобы разрулить данную ситуацию нам понадобится switch который понимает Vlan (802.1Q), уже почти все управляемые свичи идут с этой функцией. В нашем примере рассмотрим два типа свичей:

  1. cisco catalyst (например 2950 или 3560)
  2. dlink DES-3526
Два провайдера и сервер FreeBSD с одной сет.картой

Два провайдера и сервер FreeBSD с одной сет.картой

Начинаем

Воткнем физические связи в наш свич, получим три кабеля и три занятых порта

  1. порт 1 — Провайдер А
  2. порт 2 — Провайдер Б
  3. порт 3 — наш сервер

Настроим cisco catalyst:

configure terminal
vlan 100
name provider_a
vlan 101
name provider_b
int gi0/1
switchport access vlan 100
int gi0/2
switchport access vlan 101
exit
exit

Этими командами мы создали два vlan с номерами 100 и 101 для линков от двух провайдеров и назначили два порта каталиста в эти vlan.

по команде show vlan вы должны видеть созданные vlan

Теперь перейдем к конфигурированию 3-го порта каталиста куда воткнут наш сервер. Т.к. нам придется в этот порт посылать оба vlan (100,101) нам необходимо сделать trunk на этом порту:

configure terminal
int gi 0/3
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 100,101
exit
exit

Этими командами мы на третьем порту каталиста подняли trunk и разрешили в этом trunk`е два vlan 100,101

В терминах Cisco:

  • порт в аксес/аксес порт (access port) — порт принимающий не тегированные пакеты (пакеты в которых нет тега (номера) vlan которому они принадлежат)
  • порт в транке/транк порт (trunk port) — порт принимающий тегированные пакеты в которых указан тег (номер) vlan

Сделаем тоже самое, но для Dlink:

create vlan provider_a tag 100
create vlan provider_b tag 101
config vlan provider_a add untagged 1
config vlan provider_b add untagged 2
config vlan provider_a add tagged 3
config vlan provider_b add tagged 3

Так же по команде show vlan убеждаемся что все на месте.

В терминах Dlink:

  • антагет порт (untagged port) — порт в аксес режиме принимающий не тегированные пакеты
  • тагет порт (tagged port) — порт в транке принимающий тегерованные пакеты

Переходим к FreeBSD. В качестве примера используется сет. карта 82545EM Gigabit Ethernet Controller интерфейс em0

Для начала удалим все IP-адреса с интерфейса em0 (если они есть):

/sbin/ifconfig em0 delete

Создадим vlan для провайдера А:

/sbin/ifconfig vlan100 create
/sbin/ifconfig vlan100 vlan 100 vlandev em0

Вот и все, vlan создан, проверяем есть ли он в списке интерфейсов:

запускаем команду /sbin/ifconfig vlan100

vlan100: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3<RXCSUM,TXCSUM>
ether 00:02:a5:4e:92:48
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 100 parent interface: em0

Итерфейс на месте.

Создадим vlan для провайдера Б:

/sbin/ifconfig vlan101 create
/sbin/ifconfig vlan101 vlan 101 vlandev em0

Проверяем есть ли он в списке интерфейсов:

запускаем команду /sbin/ifconfig vlan101

vlan101: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3<RXCSUM,TXCSUM>
ether 00:02:a5:4e:92:48
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 101 parent interface: em0

Итерфейс на месте.

После того как интерфейсы vlan`ов созданы мы обращаемся с ними как с обычными интерфейсами обычных сетевых карт.

Добавим IP-адреса на созданные vlan`ы:

/sbin/ifconfig vlan100 add 192.168.1.15/24
/sbin/ifconfig vlan101 add 172.16.10.48/26

Вот и все, если вы все сделали правильно, то при выводе команды ifconfig получите:

vlan100: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3<RXCSUM,TXCSUM>
ether 00:02:a5:4e:92:48
inet 192.168.1.15 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 100 parent interface: em0

vlan101: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3<RXCSUM,TXCSUM>
ether 00:02:a5:4e:92:48
inet 172.16.10.48 netmask 0xffffffc0 broadcast 172.16.10.63
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vlan: 101 parent interface: em0

Можете проверять наличие связи с двумя провайдерами 🙂

Уничтожить/удалить vlan можно командой (например удалим vlan100):

/sbin/ifconfig vlan100 destroy

Осталось последнее дело, чтобы после reboot конфигурация vlan`ов сохранялась.

Для этого добавим в файл /etc/rc.conf следующие строчки:

ifconfig_vlan100=»inet 192.168.1.15 netmask 255.255.255.0 vlan 100 vlandev em0″
ifconfig_vlan101=»inet 172.16.10.48 netmask 255.255.255.192 vlan 101 vlandev em0″

cloned_interfaces=»vlan100 vlan101″

Есть и второй способ сделать тоже самое. Создайте файл /etc/rc.local и в него вставте все команды которые вы вводили для создания vlan`ов и присваевание им IP-адресов. Файл /etc/rc.local так же отрабатывается при загрузке сервера и будут исполнены все команды в нем перечисленные.

Ссылки:

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 7, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Демон BIND (процесс named) позволяет поднять на FreeBSD свой DNS сервер.

В этой статье приводится настройка DNS сервера и создание зоны для домена.

Теория

DNS (Domain Name System — система доменных имён) — распределённая система (распределённая база данных), способная по запросу, содержащему доменное имя хоста (компьютера или другого сетевого устройства), сообщить IP адрес или (в зависимости от запроса) другую информацию. DNS работает в сетях TCP/IP. Как частный случай, DNS может хранить и обрабатывать и обратные запросы, определения имени хоста по его IP адресу: IP адрес по определённому правилу преобразуется в доменное имя, и посылается запрос на информацию типа «PTR«.

Вы зарегистрировали/купили свой домен в зоне ru (net, com, org, su, и т.д.), что дальше ? Теперь Вам нужен DNS сервер который будет отвечать за зону Вашего домена.

У Вас два варианта:

  1. использовать чужой DNS сервер, например: nic.ru предоставляет услугу поддержки DNS или разместить зону Вашего домена на DNS серверах Вашего провайдера
  2. Поднять собственный DNS сервер (при условии наличия внешнего IP-адреса)

Зона — файл в котором описано соответствие хостов домена и их IP-адресов.

В файле зоны могут быть описаны следущие типы:

  • SOA
  • NS
  • MX
  • A
  • PTR

В SOA входит:

Origin — доменное имя определенной оператором zone в named.conf. Это доменное имя является ключем к сокращениям в файле зоны и является суффиксом по умолчанию для всей информации в файле зоны. Суффикс по умолчанию добавляется ко всем именам в файле зоны, которые не зканчиваются точкой, и поскольку каждый файл описывает отдельную зону, суффиксы по умолчанию в разных файлах различны.
mail addr — Тут записан email адрес ответственного за зону.
SerialСерийный номер версии файла зоны; должен увеличиваться при каждом изменении в зоне — по нему вторичный сервер обнаруживает, что надо обновить информацию (заново скачать копию файла зоны). Обычно пишется в виде <год><месяц><число><номер изменения>.
Refresh — Временной интервал в секундах, через который вторичный сервер будет проверять необходимость обновления информации.
Retry — Временной интервал в секундах, через который вторичный сервер будет повторять обращения при неудаче.
Expire — Временной интервал в секундах, через который вторичный сервер будет считать имеющуюся у него информацию устаревшей.
Minimum — Значение времени жизни информации на кэширующих серверах ((ttl) в последующих записях ресурсов).

Пример SOA:

$TTL    3600
@       IN      SOA     ns.subnets.ru. root.subnets.ru.   (
                                     2008071001; Serial
                                     3600    ; Refresh
                                     900     ; Retry
                                     360000 ; Expire
                                     3600 )  ; Minimum

Где @, в начале SOA, является сокращением, т.к. доменное имя совпадает с суффиксом по умолчанию, без сокращения SOA был бы вида:

subnets.ru.     IN      SOA     ns.subnets.ru. root.subnets.ru.   (

ns.subnets.ru — это имя первичного мастер-сервера DNS зоны subnets.ru

root.subnets.rumail address человека отвечающего за зону (символ «@», в mail адресе, в файле зоны опускается).

Далее идут:

NS — Сервер Имен, описывает DNS-сервера содержащие (отвечающие за) данную зону.
A — Адрес, содержит адрес указанного имени.
CNAME (Canonical Name) — Каноническое имя, указывает псевдоним для официального имени хоста
MX (Mail Exchange) — Почтовый Сервер, такие записи используются для обозначения списка хостов, которые сконфигурированы для приема почты посланной на это доменное имя. Помимо адреса почтового сервера содержат числовое значение обозначающее приоритет, т.е. более низкие числа показывают более высокий приоритет, а приоритеты одинаковые отправители должны использовать в произвольном порядке хосты MX для равномерного распределения нагрузки.
TXT — Текст, содержит текстовые данные любого вида. Применяется редко и специфичным образом.
HINFO — Информация о Хосте, содержит некоторую информацию о машине, обычно — тип процессора и операционной системы, крайне редко используется.
PTR — Pointer — указатель, служит для выполнения обратного преобразования IP-адресов в имена хостов.

Пример зоны прямого просмотра:

$TTL    3600
@       IN      SOA     ns.subnets.ru. root.subnets.ru.   (
                                     2008071001; Serial
                                     3600    ; Refresh
                                     900     ; Retry
                                     360000 ; Expire
                                     3600 )  ; Minimum
                 IN      NS      ns.subnets.ru.
                 IN      NS      ns2.subnets.ru.
                 IN      MX      10 mail

localhost       IN      A       127.0.0.1
subnets.ru.     IN      A       217.172.16.77
                HINFO   "INTEL P4" "FreeBSD"
ns              IN      A       217.172.16.77
ns2             IN      A       217.172.16.1
mail            IN      A       217.172.16.77
www             IN      A       217.172.16.77


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

Например:

Запись ns.subnets.ru (без точки) будет и интерпретироваться DNS сервером как ns.subnets.ru.subnets.ru, но если в конце поставить точку (ns.subnets.ru.), то сервер уже не будет дописывать имя домена subnets.ru в конец имени. Таким образом запись www (в примере выше) «превращается» в www.subnets.ru, т.к. символа точки после www нет.


Важное замечание

Любой файл зоны должен оканчиваться пустой строкой ! Иначе в логах вы будете видеть подобное:

master/zone-name.ru:30: file does not end with newline

И данная зона обслуживаться DNS сервером не будет.


Так же отметим два понятия:

  1. Зоны прямого просмотра
  2. Зоны обратного просмотра

Зона прямого просмотра — когда на основе имени выдается IP-адрес, пример:

Воспользуемся командой: nslookup subnets.ru

Server: XXX.XXX.XXX.XXX
Address: XXX.XXX.XXX.XXX#53

Non-authoritative answer:
Name: subnets.ru
Address: 217.172.16.77

Зона обратного просмотра — когда на основе IP-адреса выдается имя, пример:

Воспользуемся командой: nslookup 217.172.16.77

Server: XXX.XXX.XXX.XXX
Address: XXX.XXX.XXX.XXX#53

Non-authoritative answer:
77.16.172.217.in-addr.arpa name = mega-net.ru.

Обращаю ваше внимание на тот факт, что имя прямого и обратного просмотра могут отличаться.

Пример зоны обратного просмотра (reverse):

$TTL    3600
@       IN      SOA     ns.mydomain.ru. root.domain.ru.   (
                                     2008071001; Serial
                                     3600    ; Refresh
                                     900     ; Retry
                                     360000 ; Expire
                                     3600 )  ; Minimum
                 IN      NS      ns.mydomain.ru.
                 IN      NS      ns2.mydomain.ru.

77              IN      PTR     subnets.ru.
;Если вся остальная зона состоит и примерно одинаковых имен, то можно также воспользоваться директивой $GENERATE
$GENERATE 1-76 $.16.172.217.in-addr.arpa. PTR host-217-172-17-$.mydomain.ru.
$GENERATE 78-254 $.16.172.217.in-addr.arpa. PTR host-217-172-17-$.mydomain.ru.

При этом в сама зона 16.172.217.in-addr.arpa почти не отличается от зон прямого просмотра, также будет присутствовать запись SOA, перечисление NS, а далее PTR записи, например:

1 IN PTR myname

или на примере 217.172.16.77:

77 IN PTR mega-net.ru.

Если вы хотите сделать почти идентичные записи по хостам в зоне обратного просмотра и вам лень описывать каждый хост самому, то можно воспользоваться возможностями BIND и сделать это такой строкой, на примере зоны 16.172.217.in-addr.arpa:

$GENERATE 1-254 $.16.172.217.in-addr.arpa. PTR host-217-172-16-$.mydomain.ru.

Из чего будет следовать, что обратный посмотр для IP адресов из диапазона 217.172.16.1 — 217.172.16.254 будет выглядеть как:

host-217-172-16-XXX.mydomain.ru

Где XXX это последний октет IP-адреса.

DNS работает на порту udp 53 — обслуживает запросы и на порту tcp 53 — обменивается зонами с другими DNS серверами.

DNS сервера (применительно к зонам) бывают двух типов:

  1. master
  2. slave

master — первичный DNS сервер отвечающий за зону. Именно на нем располагается файл зоны и на нам же делаются все изменения. Сначала все обращаются к первичному, но если он не отвечает (недоступен), то вступает slave.

Пример секции конфига (named.conf) для master DNS зоны mydomain.ru:

zone "mydomain.ru" {
       type master;
       file "master/mydomain.ru.zone";
};

slave — вторичный DNS сервер отвечающий за зону. Зону скачивает с первичного DNS сервера и сохраняет у себя копию.

Пример секции конфига (named.conf) для slave DNS зоны mydomain.ru:

zone "mydomain.ru" {
       type slave;
       file "slave/mydomain.ru.zone";
       masters{IP-ADDRESS-MASTER-DNS;};
};

Где IP-ADDRESS-MASTER-DNS это IP-адрес первичного (master) DNS сервера для зоны mydomain.ru.

Пример секции конфига (named.conf) для master DNS обратной зоны 16.172.217.in-addr.arpa:

zone "16.172.217.in-addr.arpa" {
    type master;
    file "master/217.172.16.rev";
};

Секция конфига (named.conf) для slave DNS сервера обратной зоны ничем не отличается от прямой:

zone "16.172.217.in-addr.arpa" {
    type slave;
    file "slave/217.172.16.rev";
    masters{IP-ADDRESS-MASTER-DNS;};
};

Зоны обратного просмотра (IP-адрес в DNS имя) обычно находятся на DNS серверах вашего провайдера, т.е. у того кому принадлежат данные IP-адреса. Вы сможете исправить «обратное» имя попросив своего провайдера сделать это или если, провайдер делегировал вам эту возможность, сделать этот самим. «По умолчанию» действует первый вариант. На каких DNS серверах располагается зона обратного просмотра для интересующих вас IP-адресов можно так (составив соответствующий запрос в БД RIPE).

Резолв (resolve) — преобразование из имени в IP-адрес и наборот.

Технология Round robin в DNS:

Когда на одно доменное имя может выдаваться несколько IP-адресов. Для этого в файле зоны
необходимо на одно имя указать несколько IP-адресов, например:


mycoolsite         IN            A         192.168.1.15
mycoolsite         IN            A         172.16.18.6

В этом случае первому обратившемуся за резолвом имени mycoolsite будет дан IP 192.168.1.15, следующему 172.16.18.6, следующему 192.168.1.15 и так по кругу. Можно указать 3-ий и 4-ый и т.д. IP-адреса, все они будут выдаваться по кругу.

Многие называют это «балансировкой нагрузки», но это не совсем верно, т.к. раные клиенты могут давать разную нагрузку. Как говорится: «Клиент клиенту рознь».

Так же DNS служба ничего не знает о доступности указанных адресов, т.е. если один из IP-адресов перестанет отвечать (упадет) это не означает, что DNS служба перестанет выдавать IP-адрес упавшего хоста, он по прежнему будет выдаваться клиентам на их DNS запросы.

Практика

Поднимаем не кеширующий DNS сервер.

И опять два варианта:

  1. Вопользоваться уже имеющимся в системе демоном (/usr/sbin/named)
  2. Установить из портов более свежую версию

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

/usr/sbin/named -v

Для тех кто все же решил установить bind из портов:

cd /usr/ports/dns/bind9
make rmconfig
make install clean

При установке ставим галочку «REPLACE_BASE Replace base BIND with this version«, что бы заменить уже имеющимся в системе версию той, что мы устанавливаем.

Если вылезла ошибка:

make: don’t know how to make /usr/ports/dns/bind9/work/.build_done.bind9._usr_local. Stop
*** Error code 2

Не пугайтесь, просто запускайте make install clean ещё раз.

Текущая, на момент написания статьи, версия в портах bind-9.3.5-P1, в которой исправлена ошибка о которой говорится тут. Её же можно взять тут.

Приступаем к настройке.

По умолчанию директория bind это /var/named/etc/namedb/ или /etc/namedb/ которая является симлинком (символической ссылкой) на первую (далее я буду использовать /etc/namedb/).

Итак, переходим в директорию /etc/namedb/. Основной конфигурационный файл это named.conf.

Простейший пример файла named.conf:

options {
          directory       "/etc/namedb";
          pid-file        "/var/run/named/pid";
          dump-file       "/var/dump/named_dump.db";
          statistics-file "/var/stats/named.stats";
          listen-on       {
               127.0.0.1;
194.87.0.50;
          };
          allow-recursion{
               127.0.0.1;
               192.168.0.0/16;
          };
          recursive-clients 30000;
};

acl "trusted-dns"{
    127.0.0.1;
194.58.241.26;
};

logging {
    category lame-servers { null; };
};

zone "." {
    type hint;
    file "named.root";
};

zone "0.0.127.IN-ADDR.ARPA" {
    type master;
    file "master/localhost.rev";
};

// RFC 3152
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA" {
     type master;
     file "master/localhost-v6.rev";
};

zone "mydomain.ru" {
     type master;
     file "master/mydomain.ru.zone";
     allow-transfer { trusted-dns;};
};

Как мы видим файл состоит из блоков/секций. Блоки:

  • options
    • listen-on
    • allow-recursion
  • acl
  • logging
  • zone

Разберем некоторые:

listen-on — IP-адреса интерфейсов сервера на котором будет запущена служба named.

allow-recursion — список IP-адресов и/или подсетей которым разрешена рекурсия. По умолчанию DNS сервер обслуживает запросы любых клиентов для любых доменов, но если вы не хотите, чтобы кто то использовал Ваш DNS сервер (бережете трафик или ресурсы машины) необходимо использовать эту директиву, которая «скажет» DNS серверу о том, что для IP-адресов которых нет в списке allow-recursion отвечать только на запросы касаемые зон которые прописаны на данном DNS сервере.

Пример поведения без allow-recursion:

Клиент «А» (IP-адрес 192.168.15.9) запрашивает IP-адрес для имени www.ya.ru. Сервер ему ответит:

www.ya.ru canonical name = ya.ru.
Name: ya.ru
Address: 213.180.204.8

Что означает что www.ya.ru ссылается* на имя ya.ru, а оно уже имеет IP-адрес 213.180.204.8

* при такой ситуации запись CNAME в конфиге зоны для домена ya.ru будет выглядеть примерно так:

ya.ru.        IN           A              213.180.204.8
www         IN           CNAME       ya.ru.

Клиент «Б» (IP-адрес 10.4.15.45) запрашивает IP-адрес для имени www.ya.ru. Сервер ему ответит то же самое, что ответил клиенту «А» с IP-адресом 192.168.15.9

Пример поведения с allow-recursion:

Как мы видим из примера файла named.conf в секции allow-recursion описан хост 127.0.0.1 (localhost) и подсеть 192.168.0.0/16 (которая означает диапазон адресов)

Итак опять же берем двух клиентов «А» и «Б». Для клиента «А» нечего не изменится, т.к. его IP-адрес входит в подсеть 192.168.0.0/16 которая описана в секции allow-recursion, а вот для клиента «Б» возникнет ситуация когда сервер на его запрос ответит:

*** Can’t find www.ru: No answer

потому что рекурсия для хоста 10.4.15.45 (или подсети 10.0.0.0/8) не разрешена. Но при этом если клиент «Б» обратится с запросом о имени mydomain.ru он получит ответ о IP-адресе данного имени, т.к. DNS сервер всегда будет отвечать на запросы о тех доменах которые прописаны в его конфигурации (named.conf), те домены за которые он как первичный или вторичный DNS сервер отвечает.

recursive-clients — максимальное кол-во одновременно обслуживаемых рекурсивных запросов от клиентов

acl — секция позволяющая создать access control list из IP-адресов, дабы потом не перечеслять их каждый раз в других секциях. acl «trusted-dns» в данном случае описывает IP-адреса доверительных DNS серверов которым позволено скачивать зоны полностью с нашего DNS сервера, т.к. по умолчанию скачать копию вашей зоны с вашего master DNS сервера сможет любой желающий указав с своем конфиге IP-адрес вашего master DNS сервера как первичного для вашей зоны. Если вы собираетесь вводить ограничения не скачивание файла зоны, то не забудьте в acl указать IP-адрес(а) вторичного(ных) DNS сервера(ов).

zone — собственно секция отвечающая за поддержку нашего тестового домена mydomain.ru данный сервер является мастером (master) для данной зоны. Внутри секции zone идет «ссылка» на «trusted-dns», это, как вы должны помнить, acl смысл которого описан чуть выше. Секция zone обязательно должна описывать: тип (type) зоны (master или slave), путь до файла (file) зоны. В случаее если это тип slave доавляется обязательный параметр masters:

masters { IP-ADDRESS; };

где IP-ADDRESS это адрес первичного DNS сервера для данной зоны.

зона «0.0.127.IN-ADDR.ARPA» это зона обратного просмотра для localhost. Если в папке master у вас нет файлов localhost.rev и localhost-v6.rev, то в /etc/namedb есть файл make-localhost и выполнив команду:

sh make-localhost

эти два файла будут созданы автоматически.

Для начала с named.conf закончили. Теперь создадим файл зоны для нашего домена.

Переходим в папку /etc/namedb/master. Создаем файл mydomain.ru.zone (зона прямого просмотра) следущего содержания:

$TTL    3600
@       IN      SOA     ns.mydomain.ru. root.mydomain.ru.   (
                                     2008071001; Serial
                                     3600    ; Refresh
                                     900     ; Retry
                                     360000 ; Expire
                                     3600 )  ; Minimum

                 IN      NS      ns.mydomain.ru.
                 IN      NS      ns2.mydomain.ru.
                 IN      MX      10 mail

localhost       IN      A       127.0.0.1
mydomain.ru.    IN      A       194.87.0.51
                HINFO   "INTEL P4" "FreeBSD"
ns              IN      A       194.87.0.50
ns2             IN      A       194.58.241.26
mail            IN      A       194.87.0.51
www             IN      A       194.87.0.51

Сохраняем файл зоны. Получили:

  • Первичный DNS сервер зоны mydomain.ru это ns.mydomain.ru и он имеет IP-адрес 194.87.0.50
  • Вторичный DNS сервер ns2.mydomain.ru имеет IP-адрес 194.58.241.26
  • Mail сервер домена располагается по имени mail.mydomain.ru и имеет IP-адрес 194.87.0.51
  • WWW сервер по имени www.mydomain.ru имеет IP-адрес 194.87.0.51
  • «Корень домена» — имя mydomain.ru.** располагается за адресом 194.87.0.51

** Обратите внимание на точку в конце имени, если вы забыли что она означает — вернитесь назад


ВАЖНО!!! Не забываем, что Serial — Серийный номер версии файла зоны; должен увеличиваться при КАЖДОМ изменении в файле зоны, по нему ваш вторичный (slave) DNS сервер обнаруживает, что надо обновить информацию (заново скачать копию файла зоны). Обычно пишется в виде <год><месяц><число><номер изменения>.


На первый взгяд все. Named мы настроили, файл зоны создали, но давайте позаботимся о собственном удобстве.

RNDC

Утилита позволяющая управлять демоном named. Проста в установке. Запустим команду

rndc-confgen

На экран будет выведен текст (который будет нужен для двух файлов):

# Start of rndc.conf
key "rndc-key" {
    algorithm hmac-md5;
    secret "328Sa3UFyO+MbLriage+Cw==";
};

options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-md5;
#       secret "328Sa3UFyO+MbLriage+Cw==";
# };
#
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

То что между # Start of rndc.conf и # End of rndc.conf кладем в созданный файл rndc.conf (он располагается в той же директории, что и named.conf)

То что между # Use with the following in named.conf… и # End of named.conf дописываем в наш файл named.conf, но символ комментария «#» убираем, вот что в итоге дописываем в самый конец файла named.conf:

key "rndc-key" {
          algorithm hmac-md5;
          secret "328Sa3UFyO+MbLriage+Cw==";
};

controls {
      inet 127.0.0.1 port 953
      allow { 127.0.0.1; } keys { "rndc-key"; };
};

Благодаря этому нам станут доступны команды (но только с этого сервера, т.к. прописан 127.0.0.1 в кач-ве разрешенного IP адреса, секция controls):

rndc
Usage: rndc [-c config] [-s server] [-p port]
[-k key-file ] [-y key] [-V] command

command is one of the following:

reload        Reload configuration file and zones.
reload zone [class [view]]
Reload a single zone.
refresh zone [class [view]]
Schedule immediate maintenance for a zone.
retransfer zone [class [view]]
Retransfer a single zone without checking serial number.
freeze zone [class [view]]
Suspend updates to a dynamic zone.
thaw zone [class [view]]
Enable updates to a frozen dynamic zone and reload it.
reconfig      Reload configuration file and new zones only.
stats         Write server statistics to the statistics file.
querylog      Toggle query logging.
dumpdb [-all|-cache|-zones] [view ...]
Dump cache(s) to the dump file (named_dump.db).
stop          Save pending updates to master files and stop the server.
stop -p       Save pending updates to master files and stop the server
reporting process id.
halt          Stop the server without saving pending updates.
halt -p       Stop the server without saving pending updates reporting
process id.
trace         Increment debugging level by one.
trace level   Change the debugging level.
notrace       Set debugging level to 0.
flush         Flushes all of the server's caches.
flush [view]  Flushes the server's cache for a view.
flushname name [view]
Flush the given name from the server's cache(s)
status        Display status of the server.
recursing     Dump the queries that are currently recursing (named.recursing)
*restart      Restart the server.

* == not yet implemented
Version: 9.3.4-P1

Т.е. перезапуск named можно произвести легким

rndc reload

или получить статистику

rndc status

number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/30000
tcp clients: 0/100
server is up and running

Дамп кеша в файл (debug проблем резолва какого либо домена в интернете)

rndc dumpdb

Полный сброс кеша вашего DNS сервера:

rndc flush

Подготовка к запуску

Открываем файл /etc/rc.conf (для автозапуска после ребута) и дописываем в него:

named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"

Откроем файл /etc/syslog.conf (логи, куда же без них) и допишем в него:

!named
*.* /var/log/named.log

Создадим пустой файл /var/log/named.log

touch /var/log/named.log

выставим на этот файл права

chown bind:bind /var/log/named.log

Перезапустим процесс syslogd для того чтобы он перечитал конфиг

/etc/rc.d/syslogd restart

Запускаемся

Выполняем команду

/usr/sbin/named -t /var/named -u bind -c /etc/namedb/named.conf

смотрим, что у нас в логах

tail -F /var/log/named.log

Если мы видим сообщение:

loading configuration from ‘/etc/namedb/named.conf’
zone mydomain.ru/IN: loaded serial 2008071001
zone mydomain.ru/IN: sending notifies (serial 2008071001)

То значит вы нигде не ошиблись и named успешно запущен и зона mydomain.ru загружена.

Если вы видите сообщение:

config: none:0: open: /etc/namedb/named.conf: permission denied
general: reloading configuration failed: permission denied

Это означает что named (из-за отсутствия прав) не может прочесть конфиг. Исправим это:

cd /var
chown -R bind:bind named

тем самым изменили права на папку named установив владельца (owner) bind, группу (group) bind

Проверить наличие владельца с именем bind можно

команда
результат

Проверяем наличие в системе пользователя bind:

id -P bind
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin

Проверяем наличе в системе группы bind:

cat /etc/group | grep bind
bind:*:53:

Или узнаем и то и то одной командой:

id bind
uid=53(bind) gid=53(bind) groups=53(bind)

Точно убедиться что named запущен:

ps -ax | grep named
/usr/sbin/named -t /var/named -u bind -c /etc/namedb/named.conf

sockstat | grep :53
bind named 67664 20 udp4 194.87.0.50:53 *:*
bind named 67664 21 tcp4 194.87.0.50:53 *:*
bind named 67664 22 udp4 127.0.0.1:53 *:*
bind named 67664 23 tcp4 127.0.0.1:53 *:*

Проверить наличие резолва можно командой:

nslookup mydomain.ru
Server: 127.0.0.1
Address: 127.0.0.1#53

Name: mydomain.ru
Address: 194.87.0.51

Если IP-адрес выдается, то вы все сделали правильно.

Командой nslookup можно проверять любые домены, эта команда есть даже в Windows 🙂

Прочтите man nslookup

Named не стартует и в логах тишина…. Что делать ?

Воспользоваться debug режимом. Для этого нужно запустить named с ключами -g -d9

/usr/sbin/named -t /var/named -u bind -c /etc/namedb/named.conf -g -d9

Иерархия DNS:

Практически повсеместно корневой домен (root) обозначают символом «.», на самом деле точка — разделитель компонентов доменного имени, а т. к. у корневого домена нет обозначения, то полное доменное имя кончается точкой. Тем не менее, это обозначение достаточно прочно закрепилось в литературе в качестве обозначения корневого домена. Далее по иерархии идут домены верхнего уровня (TLD, Top Level Domain), за ними домены второго уровня, далее третьего и т. д., друг от друга они отделяются точками. Общая структура представлена на рисунках:

dns.gif

dns2.gif

Иллюстрация работы:

dns3.gif

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Николаев Дмитрий (virus (at) subnets.ru)
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 22, среднее: 4,91 из 5)
Загрузка...
Отправить на почту Отправить на почту