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

Архив за Август, 2008

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

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

В этом материале мы рассмотрим, как решается в DNS задача поиска доменного имени по IP-адресу, что из себя представляет загадочный домен IN-ADDR.ARPA, какие проблемы возникают при делегировании «обратных» зон.

Задача поиска доменного имени по IP-адресу является обратной к прямой задаче — поиску IP-адреса по доменному имени. Прямая задача решается в DNS при помощи записей типа A (Address). Обратная же задача решается при помощи записей-указателей типа PTR (Pointer), которые совместно с записями SOA и NS составляют описание так называемой «обратной» зоны.

На самом деле в DNS решение задачи поиска доменного имени по IP-адресу несколько необычно. Казалось бы, что для решения этой задачи можно использовать описание «прямой» зоны. В ней ведь вся информация есть!

На самом деле решать «обратную» задачу по «прямой» зоне неудобно. Поиск сведется к полному перебору всех зон, т.к. удобного аппарата рефералов (отсылок по NS записям) для IP-адресов в прямых зонах нет.

Если IP-адрес, для которого ищется доменное имя, попадет в зону ответственности сервера доменных имен, или нужное соответствие окажется закэшированным, то доменное имя сервер найдет без труда. Если IP-адрес не окажется в зоне ответственности сервера, то тогда воспользоваться стандартной процедурой поиска сервер не сможет.

Ведь первое, что делает сервер в выше описанной ситуации — это обращение к корневому серверу, а он-то откуда знает, кому принадлежит запрашиваемый IP-адрес? В системе доменных имен поддерживается иерархия доменных имен, но не IP-адресов.

Вот здесь и возникает довольно логичное и простое решение, которое позволяет использовать стандартный механизм поиска доменного имени для решения «обратной» задачи, — специальный домен, структура которого совпадает со структурой IP-адресов. Называется этот домен IN-ADDR.ARPA.

Сначала немного истории. В то время когда затевалась система доменных имен (примерно 1983 год — год выхода RFC 882 и 883) под Internet подразумевалась сеть ARPA, а кроме нее еще обсуждалась возможность построения единого адресного пространства с CSNET. По этой причине кроме класса записей описания ресурсов IN — INTERNET (в то время ARPA) был еще класс описания ресурсов CS — CSNET (Computer Science Network).

В рамках этой концепции в сети ARPA вводился домен для адресов интернет (IN-ADDR — Internet ADDRess). При этом отдельно оговаривалось, что для других сетей алгоритм поиска доменного имени по IP-адресу может отличаться от того, который предложен для адресного пространства сети ARPA.

При этом доменные адреса в ARPA оканчивались словом «ARPA», вот пример из RFC 883:

..              	9999999		IN      NS      B.ISI.ARPA
                	9999999		CS      NS      UDEL.CSNET
B.ISI.ARPA 	9999999		IN      A       10.3.0.52
UDEL.CSNET 	9999999		CS      A       302-555-0000

В нем мы видим, что у записей класса IN доменное имя оканчивается на ARPA, а у всех записей класса CS — на CSNET. Таким образом домен IN-ADDR был доменном верхнего уровня в рамках Internet (ARPA) в то время.

Сейчас уже нет ни CSNET, ни более поздних CH (CHAOS) и HS(Hesiod), которые можно найти в спецификации RFC 1035. Была реорганизована и исчезла ARPA. Но задуманный для адресного пространства ARPA домен IN-ADDR.ARPA остался.

На самом деле, в апреле 2000 года между DARPA (бывшей ARPA) и ICAAN было заключено соглашение о том, что домен верхнего уровня (TLD) ARPA будет использоваться для целей поддержки инфраструктуры Интернет.

Кроме того, само слово «ARPA» следует расшифровывать как «Address and Routing Parameter Area Domain (ARPA)», и не следует его ассоциировать с сетью ARPANET.

Основное назначение домена ARPA — обеспечивать отображение численных величин, определяемых протоколами межсетевого обмена, в пространство имен.

Делегирование поддоменов в домене ARPA возложено на IAB (Internet Architecture Board). В настоящее время в ARPA выделено три поддомена:

  • in-addr.arpa для отображения IP-адресов IPv4 в пространство доменных имен;
  • ip6.arpa для отображения IP-адресов IPv6 в пространство доменных имен;
  • е164.arpa для отображения телефонных номеров формата Е.164.

Сама зона ARPA поддерживается корневыми серверами и серверами TLD зон, хотя в соответствии с рекомендациями RFC 2870 для ARPA желательно выделение отдельных серверов.

Имена в домене IN-ADDR.ARPA образуют иерархию цифр, которые соответствуют IP-адресам. Правда, записываются эти имена в обратном порядке относительно написания IP-адреса.

Например, машина vega-gw.vega.ru, которая имеет адрес 194.226.43.1 должна быть описана в домене in-addr.arpa как 1.43.226.194.in-addr.arpa, т.е. адрес записывается в обратном порядке.

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

Рис.1. Пример структуры части домена in-addr.arpa

Рис.1. Пример структуры части домена in-addr.arpa

Как видно из рисунка, в данном случае не играет ни какой роли тип сети или разбиение на подсети. Согласно правилам описания доменов и зон в этих доменах, разделителем в имени, который определяет подчиненное значение зоны в домене, является только символ «.».

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

Однако на самом деле сама идея инверсной записи IP-адреса опирается на принципы построения этого адреса. Понятно, что первая группа цифр, ближайших к корню IN-ADDR.ARPA, задает номер сети, а остальные номер хоста. Принимая во внимание тот факт, что первоначально при создании доменной адресации в ARPA речь шла о сетях класса A (первый байт-октет определяет номер сети), то первая цифра в доменном имени в зоне IN-ADDR.ARPA — это номер сети, а все последующие — это номер хоста:

1.0.0.10.IN-ADDR.ARPA

Пример определяет первый хост в 10-ой сети.

Поиск этого адреса занял бы поиск сервера, ответственного за 10.IN-ADDR.ARPA, а тот бы ответил именем соответствующим адресу хоста.

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

Теперь, прежде чем обсуждать проблемы поиска доменных имен в IN-ADDR.ARPA, необходимо вернуться к формату описания зон этого домена, которые принято называть «обратными».

Обратная зона состоит, главным образом из записей типа «Pointer» или PTR-записей. Формат записи имеет следующий вид:

[name][ttl] IN PTR [host]

Поле имя задает номер. Это, как уже обсуждалось, не реальный IP-адрес машыны, а имя в специальном домене in-addr.arpa или в одной из его зон. Приведем пример PTR записи:

$ORIGIN 43.226.194.in-addr.arpa. 1 IN PTR vega-gw.vega.ru.

По всей видимости провайдер выделили организации сетку класса С 194.226.43.0 (В нотации CIDR 194.226.43.0/24). При этом организации было также делегировано право ведения «обратной» зоны 43.226.194.in-addr.arpa. Вот в этой зоне администратор зоны и начал описывать «обратные» соответствия.

Следует признать, что соответствие обратных зон сетям — это общая практика описания «обратных» зон. Здесь точно также надо делегировать зоны из «обратного» домена. А делается это, как правило, на основе разбиения сети на подсети или сети.

В качестве примера для нашей учебной зоны в файле named.boot (BIND 4 или named.conf для BIND 8 — 9) определена «обратная» зона 43.226.194.in-addr.arpa. Ее описание будет выглядеть примерно так:

$TTL 3600
@		IN	SOA 	vega-gw.vega.ru	hostmaster.vega.ru (
				101		; serial number
				86400		; refresh within a day
				3600		; retry every hour
				3888000		; expire after 45 days
				3600 )		; negative caching
		IN	NS	vega-gw.vega.ru.
		IN	NS	ns.relarn.ru.
;
1		IN	PTR	vega-gw.vega.ru.
4		IN	PTR	dos1.vega.ru.
5		IN	PTR	dos2.vega.ru
2		IN	PTR	zone1-gw.zone1.vega.ru.
3		IN	PTR	zone2-gw.zone2.vega.ru.

Из этого примера видно, что для обратной зоны указаны те же записи описания зоны, что и для «прямой». Кроме того, обратную зону вовсе не обязательно разбивать в соответствии с разделением прямой зоны на другие зоны. Речь в данном случае идет о зонах zone1 и zone2. С точки зрения домена in-addr.apra все машины принадлежат одной зоне — 43.226.194.in-addr.arpa.

Другое дело машина с IP-адресом 127.0.0.1 (localhost). С точки зрения домена in-addr.arpa она принадлежит другой ветке иерархии, отличной от той, которой принадлежат все остальные хосты. Поэтому для домена 127.in-addr.arpa на любой машине есть отдельный файл обратной зоны, хотя localhost, которому соответствует этот IP-адрес, обычно описывается в прямой зоне домена вместе с другими хостами. Вот пример описания этой зоны:

;       From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10
; 15:31:40 peter Exp $
;
; This file is automatically edited by the `make-localhost' script in
; the /etc/namedb directory.
;
$TTL    3600
@       IN      SOA     generate.polyn.kiae.su. root.generate.polyn.kiae.su.  (
                                00000001        ; Serial
                                3600    ; Refresh
                                900     ; Retry
                                3600000 ; Expire
                                3600 )  ; Minimum
        IN      NS      generate.polyn.kiae.su.
1       IN      PTR     localhost.polyn.kiae.su.
>

Как следует из комментария этого файла для его генерации можно использовать специальный sh-скрипт make-localhost, который входит в комплект поставки BIND. Он берет в качестве основы файл прототипа PROTO.localhost.rev подставляет в него имя хоста и имя домена.

Любопытно, что вместо пользователя hostmaster, что рекомендовано в RFC2142, в данном случае указывается пользователь root. Оно и понятно. Пользователя hostmaster может и не быть, ведь не все читают все подряд RFC, а пользователь root есть обязательно. Тем более, что это скорее всего и есть администратор локального сервера доменных имен.

Следует при этом помнить, что в файле конфигурации named.conf должен быть блок, который указывает на эту «обратную» зону:

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

На самом деле мы опустили один интересный вопрос, а как прямой IP-адрес формата IPv4 преобразуется в доменное имя, которое имеет инверсную запись цифр.

Эти функции возложены на resolver. Resolver преобразует 32-битовый адрес в текстовую строку, размещая октеты в обратном порядке, разделяя их символами «.». К полученному имени resolver через разделитель «.» добавляет суфикс «in-addr.arpa». После этого формирует PTR запрос к системе доменных имен.

Вопросы делегирования зон в IN-ADDR.ARPA не столь просты, как может показаться на первый взгляд. Эта проблема тесно связана с получением пулов IP-адресов. Кроме получения адреса, нужно еще получить право на ведение обратного домена, соответствующего вашему адресному пулу.

На самом деле, никто кроме владельца адресного пула не знает, как распределено адресное пространство. Отдать кому-то ведение «обратной» зоны — это значит, во-первых, не обеспечить оперативность управления этой зоной, если только нет средств удаленного управления, как, например, в nic.ru, а, во-вторых, такая услуга стоит денег. По этим причинам обратную зону лучше вести самим.

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

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

Прежде всего, следует знать, что первоначально все адреса, которые мы используем в RuNet, получают RIPE Network Coordination Centre (RIPE — это Reseaux IP Europeens), который является одним из трех региональных интернет регистраторов поддерживающих глобальную инфраструктуру Интернет.

Из предыдущего абзаца важно только то, что все блоки адресов в нотации CIDR xxxx.xxxx.xxxx.xxxx/16 и xxxx.xxxx.xxxx.xxxx/24 выдаются этой организацией локальным интернет регистраторам (Local Internet Registres — LIR). А вот уж они и распределяют эти адреса между своими клиентами.

В обычной классификации сетей Интернет это означает, что RIPE NCC отвечает за делегирование в зоне IN-ADDR.ARPA не только сетей класса B, но и сетей класса C. Сети класса B сейчас почти не выдают, поэтому смело можно остановиться на сетях класса C.

Если Вы не являетесь LIR, а Вам выделена сетка класса C, то направить заявку на делегирование обратной зоны в RIPE NCC Вы напрямую все равно не сможете. Сделать это сможет только провайдер, имеющий статус LIR, который, собственно, эту сетку в RIPE NCC получил. Следовательно, нужно связываться с ним и выяснять все вопросы делегирования обратной зоны. Если Вам выделен пул адресов из сетки класса B, то все вопросы по делегированию обратной зоны нужно также направлять своему провайдеру, т.к. именно ему делегировано право управления обратной зоны этой сети.

Тем не менее следует знать, что для делегирования зоны необходимо три вещи:

  1. получить адресный блок;
  2. обеспечить поддержку зоны /16 или /24 в соответствии с требованиями RIPE NCC;
  3. направить заявку в RIPE NCC на делегирование домена.

Адресный блок получают в соответствии с документом RIPE «IPv4 Address Allocation and Assignment Policies in the RIPE NCC Service Region».

Требования по поддержке зоны заключаются в том, что параметры записи SOA зоны должны соответствовать RFC 1912. при этом серийный номер зоны следует записывать в виде YYYYMMDDnn.

Для зон /24 LIR должен организовать два сервера (один у себя, а другой желательно у другого провайдера, во всяком случае, должно быть обеспечено независимое подключение). Для зон /16 должно быть обеспечено 3 сервера, причем один из них дожен быть сервер RIPE NCC ns.ripe.net. Он должен выполнять функцию slave (secondary) для зоны.

Заявка на делегирование зоны, которая посылается в RIPE NCC роботу регистрации на адрес auto-inaddr@ripe.net, должна выглядеть примерно так:

domain: 65.35.80.in-addr.arpa
descr:     Reverse delegation for Bluelight 2nd /24
admin-c: JJ231-RIPE
tech-c:    JAJA1-RIPE
zone-c: WF2121-RIPE
nserver: ns.bluelight.nl
nserver: ns2.bluelight.nl
mnt-by: BLUELIGHT-MNT
changed: jan@bluelight.nl 19991110
source: RIPE

О назначении полей и правилах их заполнения лучше всего справиться у вашего LIR, либо в nic.ru, либо в RIPE.


Комментарий:
Вы можете изменить данные в БД RIPE и другим методом. Прочтите описание объекта domain, так же в статье описан ещё один метод обновления информации в БД RIPE.


На самом деле, общий порядок при создании своей собственной «обратной» зоны точно такой же, как и при создании «прямой». Сначала создается ее описание, и запускаются серверы, которые будут ее обслуживать, а потом заполняются заявки и начинается работа с провайдером.

Отдельно обратим внимание на то, что для каждой «обратной» зоны, которая соответствует сети класса C (адреса в CIDR xxxx.xxxx.xxxx/24) нужно свое собственное описание зоны. Нельзя в один файл мешать несколько зон данного типа. Мешать их может только в файле, описывающем родительскую зону типа xxxx.xxxx/16, например, в зоне 206.144.in-addr.arpa могут быть записи типа PTR для зон 160.206.144.in-addr.arpa и 192.206.144.in-addr.arpa, и то, только при условии, что данные зоны не делегированы на другой сервер.

Действительно, NS запись для делегирования будет находиться в том же файле описания зоны, что записи типа PTR. BIND отловит эту коллизию и проигнорирует соответствующие PTR записи.

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

Но на самом деле для небольших компаний гораздо более серьезной проблемой становится делегирование обратных зон для пулов адресов, меньших, чем сеть класса С. Рассмотрим эту проблему более подробно. Все примеры будем брать из RFC 2317, т.к. именно оно рекомендовано RIPE NCC для решения нашей проблемы. Именно этот способ поддерживается в самом RIPE NCC.

Сначала о существе проблемы. Провайдер «нашинковал» в сети класса С (пул адресов в нотации CIDR /24) на несколько частей. Таким образом границы пулов адресов не приходятся на границы октетов.

Пусть мы имеем дело с сетью 192.0.2.0/24. Провайдер разделил адресное пространство следующим образом:

192.0.0/25 - организация А
192.0.128/26 - организация Б
192.0.192/26 - организация С

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

$ORIGIN 2.0.192.in-addr.arpa.
;
1	PTR	host1.a.ru.
2	PTR	host2.a.ru.
3	PTR	host3.a.ru.
;
129	PTR	host1.b.ru.
130	PTR	host2.b.ru.
131	PTR	host3.b.ru.
;
193	PTR	host1.c.ru.
194	PTR	host2.c.ru.

195	PTR	host3.c.ru.

Делегировать поддержку такой зоны можно только кому-то одному. Все остальные будут зависимы от владельца зоны и все изменения должны будут вносить через него.

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

$ORIGIN 2.0.192.in-addr.arpa.
@		IN	SOA	ns.provider.ru. hostmaster.provider.ru. (…)
;
; 0-127 /25
;
0/25		IN	NS		ns.a.ru.
0/25		IN	NS		ns.slave.ru.
;
1		IN	CNAME	1.0/25.2.0.192.in-addr.arpa.
2		IN	CNAME	2.0/25.2.0.192.in-addr.arpa.
3		IN	CNAME	3.0/25.2.0.192.in-addr.arpa.
;
; 129-191 /26
;
128/26		IN	NS		ns.b.ru.
128/26		IN	NS		ns.slave.ru.
;
129		IN	CNAME	129.128/26.2.0.192.in-addr.arpa.
130		IN	CNAME	130.128/26.2.0.192.in-addr.arpa.
131		IN	CNAME	131.128/26.2.0.192.in-addr.arpa.
;
; 193-255 /26
;
192/26		IN	NS		ns.c.ru.
192/26		IN	NS		ns.slave.ru.
;
193		IN	CNAME	193.192/26.2.0.192.in-addr.arpa.
194		IN	CNAME	194.192/26.2.0.192.in-addr.arpa.
195		IN	CNAME	195.192/26.2.0.192.in-addr.arpa.

Сами организации при это обязаны зависти зоны следующего содержания:

$ORIGIN 0/25.2.0.192.in-addr.arpa.
@	IN	SOA	ns.a.ru	hostmaster.a.ru (…)
	IN	NS	ns.a.ru.
	IN	NS	ns.slave.ru.
;
1	IN	PTR	host1.a.ru.
2	IN	PTR	host2.a.ru.
3	IN	PTR	host3.a.ru.

Для блока 128/26 соответственно последовательность «0/25» следует заменить на «128/26», а сервер ns.a.ru на сервер ns.b.ru. Для блока 192/26 нужно также будет выполнить соответствующие замены.

Идея данного метода заключается в том, что, попадая в зону 2.0.192.in-addr.arpa, локальный сервер доменных имен или resolver на свой запрос доменного имени получают CNAME, т.е. сервер зоны говорит, что имя, которое ему было сообщено не является каноническим именем хоста, указанным в адресной записи. Это лишь синонимом канонического имени. При этом каноническое имя сообщается в качестве ответа на запрос. Обращаясь по каноническому имени, локальный сервер доменных имен или resolver получают в ответ ссылку на другой сервер, т.к. в нашей зоне указан NS для поддержки зон с каноническими именами. Переходя на новый сервер, локальный сервер доменных имен или resolver получают уже обычную PTR запись ресурсов и могут сообщить доменное имя приложению, которое инициировало запрос к обратной зоне.

Может показаться накладным набивать большое количество CNAME в зонах типа 2.0.192.in-addr.arpa. Но здесь можно воспользоваться директивой управления $GENERATE, которая существенно сократит число набираемых вручную записей описания ресурсов.

Следует также обратить внимание на то, что имена зон в 2.0.192.in-addr.arpa могут быть любыми допустимыми именами, а не только «0/25» или «192/26», как это указано в примере. Более того, имена могут указывать на зоны из совершенно других доменов, не входящих в in-addr.arpa. Правда, зоны должны содержать соответствующие PTR записи описания ресурсов.

Мы в самом начале этого материала упоминали об инверсных запросах, которые не следует путать со стандартными запросами к серверам домена IN-ADDR.ARPA. Какова их судьба?

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

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

И в заключении о том, зачем вообще нужно искать доменные имена по IP_адресам. Этому есть несколько причин.

Во-первых, многие сетевые сервисы блокируют доступ, если не могут отобразить IP-адрес хоста, с которого к ним обращаются, в доменное имя. Так поступают, например, ftp-серверы и серверы электронной почты.

Во-вторых, большое число запросов к «обратным» зонам возникает при работе систем электронной почты и веб-серверов. В электронной почте рассылка почты почтовыми транспортными агентами (ПТА) основана на процедуре канонизации адресов отправителя и получателя. А эта процедура подразумевает обращение к обратной зоне. Кроме того, ПТА блокируют пересылку почты, основываясь, в том числе, и на информации из «обратных» зон. При работе веб-серверов обращение к «обратной» зоне используется для сбора статистики.

В-третьих, при отсутствии «обратных» зон объем трафика, который генерируется прикладным программным обеспечением, гораздо больший, чем при наличии правильно сконфигурированных «обратных» зон.

Любопытно, что на 1999 год по данным RIPE NCC из 163124 зон, которые могли бы быть делегированы (зарегистрированые IP-адреса), реально было делегировано только 85352 или примерно 52%.

И еще одно замечание. Мы здесь вообще не рассматривали «обратное» отображение в рамках такой «экзотики», как адресное пространство IPv6. На самом деле современные версии BIND прекрасно справляются с этой задачей, но об этом как-нибудь в другой раз.

Оригинал статьи

Ссылки по теме:

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

В данной статье рассматривается возможность использование 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)
Загрузка...
Отправить на почту Отправить на почту

В этой статье мы рассмотрим концепцию статических маршрутов. Для этого мы будем использовать заведомо проблемный сценарий для демонстрации условий, при которых желательно указывать интерфейс через который достижим адрес следующего хопа (Next Hop Address), когда вы конфигурируете статический маршрут.

Введние в статичскую маршрутизацию

Статический маршруты используются по ряду причин и чаще всего, когда не существует динамического маршрута к определенному месту назначения или когда включение динамического протокола маршрутизации не выполнимо. По умолчанию статические маршруты имеют административную дистанцию равную 1, что дает им преимущество над маршрутами изученными из динамических протоколов маршрутизации. Что такое административная дистанция и как она влияет на выбор маршрута, читайте в статье “Административная Дистанция”, опубликованной ранее на CicsoLab.RU.

Когда вы увеличиваете административную дистанцию в значение большем чем значение динамического протокола маршрутизации, статический маршрут будет работать только в случае, когда пропадет динамическая маршрутизация. Например, маршруты изученные из динамического протокола IGRP имеют административную дистанцию по умолчанию 100. Для того, чтобы конфигурировать статический маршрут, который будет перекрыт IGRP маршрутом, укажите административную дистанцию больше 100. Такой вид статической маршрутизации называется “плавающей”. Такой маршрут инсталлируется в таблицу маршрутизации только, когда более предпочтительный маршрут исчезнет оттуда. Например,

ip route 172.31.10.0 255.255.255.0 10.10.10.2 101

Обратите внимание, что административная дистанция 255, рассматривается как недостижимая и статический маршрут с административной дистанцией 255 никогда не будет введен в таблицу маршрутизации.

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

ip route 0.0.0.0 0.0.0.0 Ethernet0

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

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

Указание числового следующего хопа (next hop) для маршрута, предотвратит выполнение ARP запросов на каждый адрес. Однако, если интерфейс за которым лежит next hop упадет, а числовое значение следующего хопа достижимо через рекурсивный маршрут, вы должный указать и IP адрес следующего хопа и интерфейс через который данный next hop может быть найден. Например,

ip route 0.0.0.0 0.0.0.0 Serial 3/3 192.168.20.1

Проблема

Теперь рассмотрим небольшой проблемный сценарий. В данной сетевой диаграмме, существует два статических маршрута к одному и тому же месту назначения (172.31.10.0/24). Один маршрут является “плавающим” маршрутом. Это резервный путь к целевой сети. Проблема в данном сценарии в том, что плавающий маршрут никогда не инсталлируется не таблицу маршрутизации, когда основной канал падает.

Рис.1

Рис.1

R1 имеет маршрут по умолчанию который указывает на маршрутизатор сервис провайдера (ISP) для доступа в Интернет. R1 также имеет два канала к R2. T1 это основной канал, а 56К это резервный канал. На R1 настроен статический маршрут в сторону сети 172.31.10.0/24, который указывает на IP адрес интерфейса Serial0 маршрутизатора R2 (10.10.10.2) в качестве следующего хопа. R1 также имеет плавающий маршрут для сети 172.31.10.0/24 который указывает на IP адрес интерфейса Serial1 роутера R2 (192.168.20.2). Административная дистанция для такого плавающего статического маршрута установлена в значение 250. Задача, сделать так, чтобы пакеты ходили по 56К каналу в обоих направлениях только в случае падения основного канала.

Конфигурация R1
hostname R1
!
ip subnet-zero
!
interface Serial3/0
description ISP Link
ip address 192.168.10.1 255.255.255.252
clockrate 64000
!
interface Serial3/2
description Primary Link to R2
ip address 10.10.10.1 255.255.255.252
!
interface Serial3/3
description Backup Link to R2
ip address 192.168.20.1 255.255.255.252
clockrate 64000
!
ip classless
#Это маршрут по умолчнию на ISP router
ip route 0.0.0.0 0.0.0.0 Serial3/0
!
#Это основной маршрут к LAN.
ip route 172.31.10.0 255.255.255.0 10.10.10.2
!
#Это плавающий маршрут к LAN.
ip route 172.31.10.0 255.255.255.0 192.168.20.2 250

Таблица маршрутизации на R1 выглядит следующим образом:

R1#show ip route
Gateway of last resort is 0.0.0.0 to network 0.0.0.0
10.0.0.0/30 is subnetted, 1 subnets
C 10.10.10.0 is directly connected, Serial3/2
192.168.10.0/30 is subnetted, 1 subnets
C 192.168.10.0 is directly connected, Serial3/0
192.168.20.0/30 is subnetted, 1 subnets
C 192.168.20.0 is directly connected, Serial3/3
#Основной статический маршруи к LAN через канал T1.
172.31.0.0/24 is subnetted, 1 subnets
S 172.31.10.0 [1/0] via 10.10.10.2
#Статический маршрут по умолчнию в Internet.
S* 0.0.0.0/0 is directly connected, Serial3/0

Конфигурация R2

hostname R2
ip subnet-zero
!
interface Ethernet0
description Local LAN
ip address 172.31.10.2 255.255.255.0
!
interface Serial0
description Primary Link to R1
ip address 10.10.10.2 255.255.255.252
clockrate 56000
!
interface Serial1
description Backup Link to R1
ip address 192.168.20.2 255.255.255.252
!
ip classless
!
#Это основной маршрут по умолчнию.
ip route 0.0.0.0 0.0.0.0 10.10.10.1
#Это плавающий маршрут по умолчнию, используется если канал T1 неисправен.
ip route 0.0.0.0 0.0.0.0 192.168.20.1 250

R2 имеет маршрут по умолчанию инсталлированный через 10.10.10.1, и когда вы используете команду traceroute от R2 к ISP, пакеты ходят по каналу T1.

R2#show ip route
Gateway of last resort is 10.10.10.1 to network 0.0.0.0
172.31.0.0/24 is subnetted, 1 subnets
C 172.31.10.0 is directly connected, Ethernet0
192.168.20.0/30 is subnetted, 1 subnets
C 192.168.20.0 is directly connected, Serial1
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.10.10.0/30 is directly connected, Serial0
#Это основной маршрут по умолчнию.
S* 0.0.0.0/0 [1/0] via 10.10.10.1

R2#traceroute 192.168.10.2
.
Type escape sequence to abort.
Tracing the route to 192.168.10.2
.
1 10.10.10.1 16 msec 20 msec 16 msec
2 192.168.10.2 32 msec * 32 msec

R2 посылает ICMP пакеты к Internet хосту 192.168.30.1 с адресом отправителя 172.31.10.2.

R2#ping 192.168.30.1 source 172.31.10.2
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 32/32/32 ms

Если мы опускаем интерфейс Serial3/2 на R1, то мы ожидаем, что R1 инсталирует плавающий статический маршрут к сети 172.31.10.0, а R2 инсталирует плавающий статический маршрут для 0.0.0.0 через 192.168.20.1. И по идее трафик будет ходить по 56К каналу.

Выполним указанный тест и посмотрим так ли это на самом деле:

R1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
Serial3/0 192.168.10.1 YES manual up up
Serial3/2 10.10.10.1 YES manual up up
Serial3/3 192.168.20.1 YES manual up up

R1#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#int s3/2
R1(config-if)#shut
R1(config-if)#end
2d21h: %LINEPROTO-5-UPDOWN: Line protocol on Interface Serial3/2, changed state to down
2d21h: %LINK-5-CHANGED: Interface Serial3/2, changed state to administratively down

R1#show ip interface brief
Interface IP-Address OK? Method Status Protocol
Serial3/0 192.168.10.1 YES manual up& up
Serial3/2 10.10.10.1 YES manual administratively down down
Serial3/3 192.168.20.1 YES manual up up

Взглянем на таблицы маршрутизации обоих роутеров.

R1#show ip route
Gateway of last resort is 0.0.0.0 to network 0.0.0.0
192.168.10.0/30 is subnetted, 1 subnets
C 192.168.10.0 is directly connected, Serial3/0
192.168.20.0/30 is subnetted, 1 subnets
C 192.168.20.0 is directly connected, Serial3/3
#Статический маршрут через канал T1 остался в таблице маршрутизации.
#Это не то, что мы ожидали увидеть, когда выключали Serial 3/2
172.31.0.0/24 is subnetted, 1 subnets
S 172.31.10.0 [1/0] via 10.10.10.2
#Маршрут по умолчнию в Интерент.
S* 0.0.0.0/0 is directly connected, Serial3/0

На маршрутизаторе R2 все правильно.

R2#show ip route
Gateway of last resort is 192.168.20.1 to network 0.0.0.0
172.31.0.0/24 is subnetted, 1 subnets
C 172.31.10.0 is directly connected, Ethernet0
192.168.20.0/30 is subnetted, 1 subnets
C 192.168.20.0 is directly connected, Serial1
S* 0.0.0.0/0 [250/0] via 192.168.20.1

Однако теперь более не возможно пинговать внешний хост 192.168.20.1, поскольку R1 пытается послать ICMP ответы через Serial3/2 который выключен.

R2#ping 192.168.30.1 source 172.31.10.2
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
…..
Success rate is 0 percent (0/5)

Итак плавающий статический маршрут не был инсталлирован на R1 и основной маршрут все еще находиться в таблице маршрутизации R1, даже хотя интерфейс Serial3/2 лежит.

Причина этого поведения в том, что статические маршруты являются рекурсивными по природе. У вас всегда статический маршрут будет храниться в таблице маршрутизации до тех пор пока у вас есть маршрут на следующий хоп. В данном случае, R1 думает, что он может получить 10.10.10.2 через 192.168.10.2, потому, что 192.168.10.2 это следующий хоп для 0.0.0.0 0.0.0.0. Маршрут на следующий хоп может быть более специфичным, менее специфичным или маршрутом по умолчанию. В этом сценарии вы думает, что поскольку линк упал, вы не должный иметь маршрута для 10.10.10.2, но если вы посмотрите на таблицу маршрутизации R1, вы увидите, что существует статический маршрут по умолчанию, указывающий на ISP роутер. Поэтому R1 думает, что он может достичь next hop (10.10.10.2) для сети 172.31.10.0/24, через свой маршрут по умолчанию и статический маршрут 172.31.10.0/24 через 10.10.10.2 остается в таблице маршрутизации, тем самым предотвращаю инсталляцию плавающего маршрута.

Для того, чтобы предотвратить данную проблему вы должны указать интерфейс через который может быть найден следующий хоп. Тогда плавающий маршрут будет инсталлироваться только в случае, когда IP адрес next-hop будет достижим через указный интерфейс. Решение, заключается в удалении старого статического маршрута к сети 172.31.10.0 и добавлении нового, но на этот раз указываем интерфейс, через который достижим IP адрес следующего хопа. Это позволит инсталлировать плавающий маршрут, когда упадет интерфейс Serial3/2.

R1(config)#no ip route 172.31.10.0 255.255.255.0 10.10.10.2
R1(config)#no ip route 172.31.10.0 255.255.255.0 192.168.20.2 250
R1(config)#ip route 172.31.10.0 255.255.255.0 Serial3/2 10.10.10.2
R1(config)#ip route 172.31.10.0 255.255.255.0 Serial3/3 192.168.20.2 250

Статический маршрут к сети 172.31.10.0 через 10.10.10.2 будет находиться в таблице маршрутизации только, если 10.10.10.2 будет виден через интерфейс Serial3/2. Если данное условие не выполняется, статический маршрут через 10.10.10.2 удаляется их таблицы и взамен инсталлируется плавающий маршрут через Serial 3/3 и следующий хоп 192.168.20.2.

По материалам: cisco.com

Оригинал статьи тут

Ссылки:

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

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

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

Выбираем наилучший путь

Административная дистанция это первый критерий который использует маршрутизатор, чтобы определить какой протокол маршрутизации использовать если два протокола предоставляют маршрутную информацию к одному и тому же месту назначения. Административная дистанция это мера доверия или надежности к источнику маршрутной информации. Административная дистанция имеет только местное значение и не вещается в маршрутных обновлениях (routing updates).

Чем меньше численное значение административной дистанции, тем более надежен протокол. Например, если роутер принимает маршрут к определенной сети и через OSPF и через IGRP, маршрутизатор выберет протокол IGRP, поскольку IGRP более надежен. Это значит, что маршрутизатор добавит в свою роутинговую таблицу маршрут от протокола IGRP.

Если вдруг, вы потеряли источник IGRP информации (например, выключили питание на нем), роутер будет использовать информацию поставляемую протоколом OSPF, до тех пор пока источник IGRP маршрутов не возобновит свою работу.

Таблица значений административной дистанции

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

Connected interface 0
Static route 1
Enhanced Interior Gateway Routing Protocol (EIGRP) summary route 5
External Border Gateway Protocol (BGP) 20
Internal EIGRP 90
IGRP 100
OSPF 110
Intermediate System-to-Intermediate System (IS-IS) 115
Routing Information Protocol (RIP) 120
Exterior Gateway Protocol (EGP) 140
On Demand Routing (ODR) 160
External EIGRP 170
Internal BGP 200
Unknown 255

Если административная дистанция равна 255, роутер не доверяет источнику маршрута и никогда не инсталлирует такой маршрут в таблицу маршрутизации.

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

ip route 10.0.0.0 255.0.0.0 Dialer 1 250

Здесь административная дистанция для маршурута 10.0.0.0/8 установлена в значение 250.

Таблица маршрутизации может выглядеть следующий образом

R1#show ip route

Gateway of last resort is not set

172.16.0.0/24 is subnetted, 1 subnets
C 172.16.1.0 is directly connected, Ethernet0
R 10.0.0.0/8 [120/1] via 172.16.1.200, 00:00:16, Ethernet0
C 192.168.1.0/24 is directly connected, Loopback0

Если интерфейс Ethernet0 упадет, то в таблицу маршрутизации инсталлируется плавающий статический маршрут и весь трафик предназначенный для сети 10.0.0.0/8 будет маршрутизироваться через интерфейс Dialer 1 и по резервному каналу.

R1#show ip route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 1 subnets
C 172.16.1.0 is directly connected, Ethernet0
S 10.0.0.0/8 is directly connected, Dialer1
C 192.168.1.0/24 is directly connected, Loopback0

Как только Ethernet интерфейс подниматься обратно, то в таблицу сразу же инсталлируется маршрут от динамического протокола RIP и трафик снова пойдет через Ethernet 0.

По материалам: cisco.com

Оригинал статьи тут

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