Настройка pppoe клиента на Cisco

Есть интернет провайдеры, которые предоставляют доступ в Интернет по протоколу PPPoE. Сейчас расскажу как настроить Cisco в качестве pppoe клиента для доступа в Интернет через такого провайдера. Маршрутизатор, на котором я буду выполнять настройки, выступает также в роли коммутатора. Версия IOS на данном маршрутизаторе 15.3.


Настройка доступа в Интернет по протоколу PPPoE на маршрутизаторе Cisco состоит из вот таких пунктов:

Настройка виртуального Dialer интерфейса;

Настройка физического WAN интерфейса (FastEthernet или GigabitEternet);

Поднятие NAT и определение внутреннего и внешнего интерфейса;

Определение списка доступа для NAT;

Добавление маршрута.

Настройка интерфейса Dialer 0

И так настраиваем виртуальный интерфейс Dialer, который будет поднимать соединение с провайдером по протоколу PPPoE:

(config)#interface Dialer 0
(config-if)#description -=ISP Name=-
(config-if)#ip address negotiated
(config-if)#ip mtu 1492
(config-if)#encapsulation ppp
(config-if)#dialer pool 1
(config-if)#ppp authentication chap callin
(config-if)#ppp chap hostname username
(config-if)#ppp chap password userpassword
Вот такие минимальные настройки для виртуального интерфейса Dialer, чтобы он смог поднимать соединение с интернет пройвадером по протоколу PPPoE. Теперь я расскажу что каждая из этих строчек означает, чтобы было понятно для чего они нужны и чтобы Вы бездумно не делали copy-paste.
description - из названия уже понятно, что это описание. Я привык всем интерфейсам на оборудование делать описание, для того чтобы было понятно что находится за этим интерфейсом или же в каком он состоянии. У меня на работе принято в описание интерфейса прописывать IP адрес клиента или же название оборудования, которое висит на этом интерфейсе. Вышедшем из строя портам я даю описание -=Bad Port=-. Старайтесь и не ленитесь давать описания портам т.к. эта наглядная информация будет удобна например при просмотре портов по команде show interfaces status.
ip address negotiated - это команда указывает, что IP адрес этому интерфейсу выдаст DHCP интернет провайдера.
ip mtu 1492 - здесь задается максимально допустимый размер Ethernet пакета в 1492 байта. Сам Ethernet пакет не может превышать 1500 байт. Заголовок PPP занимает 8 байт. Таким образом, при использование PPPoE, Ethernet пакеты больше 1492 байта будут отбрасываться. Так вот чтобы этого не происходило мы и указываем размер Ethernet пакета равным 1492 байта.
encapsulation ppp - эта строка задает тип инкапсуляции. Инкапсуляция - это метод согласования транспортных протоколов. При инкапцуляции фреймы одного протокола запаковываются в фреймы другого протокола. Так как нам необходимо фреймы протокола Ethernet на нашем маршрутизаторе на интерфейсе Dialer 0 передавать и принимать по протоколу PPPoE, то мы указываем тип инкапцуляции ppp. PPPoE является подвидом протокола PPP, поэтому указывается тип инкапсуляции ppp.
dialer pool 1 - тут задается номер пула, к которому будет принадлежать интерфейс Dialer 0.
ppp authentication chap callin - данная строка указывает тип протокола аутентификации. В данном случае устанавливается аутентификация по протоколу CHAP. Этот протокол аутентификации надежнее чем PAP, т.к. по протоколу CHAP пароль передается в зашифрованом виде. Опция callin говорит, что авторизоваться на сервере провайдера будет только наш маршрутизатор и авторизоваться серверу интернет провайдера на нашем маршрутизаторе нет необходимости.
ppp chap hostname username - указываем логин (username) для аутентификации по протоколу CHAP, выданный интернет провайдером.
ppp chap password userpassword - указываем пароль (userpassword) для аутентификации по протоколу CHAP, выданный интернет провайдером.
Если же Ваш интернет провайдер использует PAP протокол для аутентификации, то настройка аутентификации будет выглядеть вот так:
(config-if)#ppp authentication pap callin
(config-if)#ppp pap sent-username username password userpassword


Настройка WAN интерфейса

Переходим к настройке физического интерфеса:
(config)#interface FastEthernet 8
(config-if)#description -=Internet=-
(config-if)#no ip address
(config-if)#pppoe enable
(config-if)#pppoe-client dial-pool-number 1
no ip address - указываем, что данный интерфейс не будет иметь IP адрес.
pppoe enable - включаем протокол pppoe на интерфейсе. После выполнения данной команды строка будет иметь вид pppoe enable group global.
pppoe-client dial-pool-number 1 - прописываем номер пула, который необходимо повесить на данный интерфейс. Напомню, что на интерфейсе Dialer 0 мы указали dialer pool 1.
Ну что же минимальные настройки интерфейсов мы прописали. Теперь соединение по протоколу PPPoE уже должно подняться. Чтобы это посмотреть нужно ввести команду show interfaces dialer0. Если все будет настроено верно и до оборудования интернет провайдера будет связь, то интерфейс Dialer 0 получит IP адрес от интернет провайдера, а также Dialer 0 будет привязан к виртуальному интерфейсу Virtual-AccessX. Также можно будет посмотреть информацию о pppoe сессии командой show pppoe session. Можно еще посмотреть маршруты show ip route. В информации маршрутов можно будет увидеть что-то вроде этого:
C          10.10.10.10 is directly connected, Dialer0
C    185.86.0.0/32 is subnetted, 1 subnets
C          185.86.121.206 is directly connected, Dialer0
C    192.168.10.0/24 is variably subnetted, 5 subnets, 2 masks


Настройка NAT

У меня схема подключения к интернет провайдеру простая. Между провайдером и локальной сетью установлен маршрутизатор. Провайдер выдает мне IP адрес динамически, а хостов за маршрутизатором в локальной сети больше 2-ух. И чтобы все эти хосты могли иметь доступ в Интернет с одного IP адреса, выданного провайдером, на маршрутизаторе необходимо поднять NAT и указать внутрение и внешний интерфейсы. В качестве внешнего интерфейса я назначу Dialer 0. И поэтому в конфигурацию Dialer 0 я добавлю строку ip nat outside. В качестве внутреннего интерфеса NAT можно указать определенные интерфейсы куда будут подключаться хосты. В конфигурацию данных интерфейсов будет необходимо добавить строчку ip nat inside. Я же в качестве внутреннего интерфейса NAT указал интерфейс Vlan, а те порты которые будут иметь доступ в Интернет перевел в соответветствующий Vlan. Вот как это выглядит:
(config)#interface Vlan 10
(config-if)#ip address 192.168.10.1 255.255.255.240
(config-if)#ip nat inside
(config)#interface FastEthernet 1
(config-if)#switchport access vlan 10
В конфигурацию интерфейса, который будет Вами указан в качестве внешнего, автоматически добавится строка ip virtual-reassembly in.

Настройка списка доступа

После выполненных настроек интерфейсов дальше приступаем к созданию списка доступа, чтобы хосты за маршрутизатором имели доступ в Интернет. Для более быстрого доступа или же если Вы не хотите практически никак фильтровать трафик, то вполне достаточно создать простой список и применить его к NAT на интерфейсе Dialer 0.
(config)#ip access-list standard 1
(config-std-nacl)#permit 192.168.10.0 0.0.0.15
(config)#ip nat inside source list 1 interface Dialer0 overload
ip access-list standard 1 - создает стандартный список доступа под номером 1.
permit 192.168.10.0 0.0.0.15 - разрешающее правило для сети 192.168.10.0 с маской сети 255.255.255.240. Обратите внимание, что здесь задается обратная маска.
ip nat inside source list 1 interface Dialer0 overload - эта команда настраивает NAT для перегрузки по адресу, присвоенному интерфейсу Dialer 0. Причем команда inside source list 1 указывает, что преобразование исходных адресов необходимо проводить для тех которые указаны в списке доступа 1. Опция overload указывает на то, что трансляция будет перегружена. Перегрузка трансляции адресов позволяет нескольким внутренним хостам транслироваться на один и тот же IP-адрес. В нашем случае это актуально т.к. Интернет провайдер нам не предоставлет пул статических внешних IP-адресов.
Для более тщательной фильтрации трафика от локальных хостов в Интернет лучше воспользоваться расширенным списком доступа, где можно будет указывать тип протокола, порт назначения и многое другое. О настройке таких списков доступа выходят за рамки данной заметки и поэтому ограничимся простым списком.

Добавление маршрута

Ну что же практически все готово, чтобы можно было локальные хосты выпустить в Интернет. Осталось только прописать маршрут по умолчанию.
(config)#ip route 0.0.0.0 0.0.0.0 Dialer0
Эта строка устанавливает шлюз последней очереди. Все пакеты для адресованных сетей, не описанных явным образом в таблице маршрутизации, маршрутизатор будет направлять на интерфейс Dialer 0. Если после прописанного маршрута ввести команду show ip route, то в таблице маршрутизации должен появиться статический маршрут.
S*          0.0.0.0 is directly connected, Dialer0
              10.0.0.0/32 is subnetted, 1 subnets
На этом настройка маршрутизатора закончена и можно тестировать доступ в Интернет.

P.S. В данной заметке я привел только минимальные настройки маршрутизатора Cisco для доступа в Интернет по протоколу PPPoE. Здесь я не стал затрагивать дополнительные настройки интерфейса Dialer и настройки расширенного списка доступа.


Cisco#show run int dial1
interface Dialer1
 ip address negotiated
 encapsulation ppp
 ip tcp adjust-mss 1452
 dialer pool 1
 ppp mtu adaptive
 ppp authentication chap callin
 ppp chap hostname USERNAME
 ppp chap password 7 FFFFFFFFFFFFFFFFF
 no cdp enable
end
ыр 


Поехали по списку.

interface Dialer1
Этим мы создали новый логический интерфейс Dialer. Такой тип интерфейса используется для установления всех ppp-соединений. Название пошло с тех времен, когда соединения устанавливались через ISDN или dial-up. Почитать про него можно тут.

ip address negotiated
Легко догадаться, что это команда для того, чтобы наш новый логический интерфейс получил IP-адрес от удаленного роутера. Как это делается? Известный факт, что PPPoE поднимает стек протоколов PPP (кстати, это отдельная система, которую также можно классифицировать по модели OSI) через Ethernet. В рамках этого стека есть так называемый протокол IPCP. Он-то и помогает получить правильный IP-адрес. Кому интересно, дамп можно посмотреть тут.

ip tcp adjust-mss 1452
Для туннельных интерфейсов я предпочитаю выставлять окно MSS протокола TCP (читай MTU для TCP) в явном виде. Причина - много разных интерфейсов физических и логических, чей MTU может повлиять на MSS. А результат неправильного MSS приведет к тому, что часть сайтов будет работать, часть нет. Вернее, даже почти все не будут работать.


dialer pool 1
На одном и том же маршрутизаторе можно запустить несколько копий PPPoE клиента на различных интерфейсах. Этой командой фактически мы привязываем наш новый логический интерфейс Dialer к другому интерфейсу, через который реально и будет обмен данными. Ранее в настройках логического интерфейса мы указывали опцию pppoe-client dial-pool-number 1. Собственно, можно считать, что и Vlan, и Dialer привязаны к одному пулу.

ppp mtu adaptive
По логике понятно, что опция подстраивает MTU. При попытке подключения в рамках LCP сессии стека PPP клиент и сервер пытаются согласовать ряд параметров, в том числе и MTU (вернее даже MRU - Maximum Reciavable Unit). Настройка говорит вашему роутеру, чтобы он согласился с MRU удаленной стороны. Про это хорошо расписано в здесь.

ppp authentication chap callin
Собственно сам метод аутентификации. CHAP использует большинство современных операторов ШПД. При использовании данного метода передается хеш от логина и пароля, а не сам пароль в незашифрованном виде. Опция callin говорит маршрутизатору, что нужно только аутентифицировать только себя перед удаленным сервером, аутентификация удаленного сервера перед собой не требуется. Подробнее назначения функции callin описано в этом ответе.

ppp chap hostname USERNAME
ppp chap password 7 FFFFFFFFFFFFFFFFF
Собственно сам логин и пароль. При аутентификации типа CHAP для подключения к PPPoE маршрутизатор использует имя и пароль. Здесь представлен пароль в захешированном (cipher) виде. При конфигурации из консоли строка будет выглядеть так: ppp chap password 0 abcdef1234.

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


debug pppoe events
debug pppoe packets
debug ppp authentication
terminal monitor
Чтобы остановить отладку (debug) на устройствах Cisco, можно использовать команды no debug all или undebug all.

Например, чтобы отключить отладку событий ICMP, нужно ввести команду no debug ip icmp.  4

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

Комментарии

Популярные сообщения из этого блога

Шпаргалка по Zimbra

Горячие клавиши в mcedit (Midnight Commander)

Добавление домена в белый список антиспама Zimbra