Настройка PPPoE сервера на базе ОС Linux и клиента на базе ОС Windows

Все права защищены (c) 2001-2011 NetUP (www.netup.ru)
Перепечатка материалов разрешается только с предварительного разрешения
компании NetUP (info@netup.ru)
Настройка PPPoE сервера на базе ОС Linux и клиента на базе ОС Windows

Протокол PPPoE (Point-to-Point Protocol over Ethernet) представляет собой сетевой протокол позволяющий передавать PPP кадры поверх Ethernet. Так же как и pptp позволяет организовать доступ абонентов, в сеть, используя авторизацию, шифрование, сжатие и т.д.

Для предоставления доступа по протоколу PPPoE необходим PPPoE-сервер и абонентское устройство (клиент) с поддержкой протокола PPPoE. В качестве PPPoE-сервера будем использовать свободно распространяемый пакет rp-pppoe [1] работающий в режиме ядра (KERNEL MODE) под управлением ОС Gentoo Linux. В качестве клиента будем использовать персональный компьютер под управлением ОС Microsoft Windows 2003 и пакет raspppoe [2].

Авторизация абонентов будет производиться по протоколу RADIUS через единое хранилище абонентской информации в биллинговой системе NetUP UTM 5.

Настройка PPPoE-сервера

Для установки сервера необходимо произвести установку пакетов pppd с поддержкой протокола RADIUS и rp-pppoe. Для установки pppd необходимо добавить строку

net-dialup/ppp radius

в файл

/etc/portage/package.use

После этого необходимо произвести установку командой:

emerge ppp

После установки необходимо отредактировать конфигурационные файлы. В частности необходимо в файле /etc/ppp/radius/radiusclient.conf указать корректно переменные authserver и acctserver. В этих полях указывается доменное имя либо IP-адрес сервера, где запущен RADIUS-сервер (процесс utm5_radius). Пример:

authserver localhost:1812acctserver localhost:1813

Для корректной работы авторизации и аккаунтинга по протоколу RADIUS необходимо указать секретное слово в файле /etc/ppp/radius/servers. Пример:

localhost secret

После этого необходимо установить пакет rp-pppoe командой:

emerge rp-pppoe

Для корректной работы rp-pppoe в режиме ядра (KERNEL MODE) необходимо в файле /etc/ppp/pppoe.conf указать строку:

LINUX_PLUGIN=rp-pppoe.so

Так же в файле /etc/ppp/pppoe-server-options необходимо указать следующие настройки:

require-chaprequire-mschap-v2proxyarpnologfdplugin radius.so

Согласно этим настройкам разрешены безопасные протоколы авторизации CHAP и MSCHAPv2. Так же указано, что необходимо загружать модуль для работы с протоколом RADIUS (radius.so).

Перед запуском сервера необходимо произвести загрузку модуля ядра Linux. Для этого выполните команду:

modprobe pppoe

Для того, что бы данный модуль загружался автоматически при старте операционной системы необходимо добавить строку pppoe в файл /etc/modules.autoload.d/kernel-2.6. В случае если у вас появляется ошибка, сигнализирующая об отсутствии этого модуля в системе, то необходимо установить следующую опцию при сборке ядра Linux:

PPP over Ethernet

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

pppoe-server -k

На этом настройка PPPoE-сервера закончена.

Настройка PPPoE-клиента

Для настройки клиентского компьютера необходимо скачать и распаковать пакет raspppoe с сайта производителя. В результате у вас должна получится папка RASPPPOE_099. Для установки необходимо зайти в раздел Control panel->Network Connections и в свойствах любого соединения выбрать пункт Install Protocol -> Have Disk ->Browse. Укажите путь к папке RASPPPOE_099 и выберите файл RASPPPOE.INF. Нажмите "OK" когда будет предложено установить протокол "PPP over Ethernet Protocol".

После того как установка протокола будет закончена можно запустить файл RASPPPOE.EXE из папки RASPPPOE_099. В предложенном меню выберите Ethernet адаптер, подключенный к локальной сети, и нажмите "Query Available Services". После непродолжительного поиска будут отображены найденные PPPoE-сервера (рис. 1).


Рис. 1 Поиск доступных PPPoE серверов в локальной сети

Выделите необходимый PPPoE-сервер и нажмите кнопку "Create a Dial-Up Connection for the selected Service". В результате в ОС Windows должно появиться соединение "Connection to zavidovo". Для установки этого соединения необходимо перейти в раздел "Control panel"->"Network Connections" и произвести двойной клик по соединению. Введите ваши логин и пароль и нажмите "Dial" (рис. 2).


Рис.2 Установка PPPoE соединения с севером

Отладка и тестирование

Протоколирование сообщений PPPoE-сервера производится в файл /var/log/messages. Ниже приведена выдержка из этого файла в случае успешной авторизации абонента:

 

Oct  7 22:27:29 zavidovo pppoe-server[18595]: Session 10 created for client 00:80:48:30:4b:f8
(10.67.15.10) on eth0 using Service-Name ''
Oct 7 22:27:29 zavidovo pppd[18595]: Plugin /etc/ppp/plugins/rp-pppoe.so loaded.
Oct 7 22:27:29 zavidovo pppd[18595]: RP-PPPoE plugin version 3.3 compiled against pppd 2.4.3
Oct 7 22:27:29 zavidovo pppd[18595]: Plugin radius.so loaded.
Oct 7 22:27:29 zavidovo pppd[18595]: RADIUS plugin initialized.
Oct 7 22:27:29 zavidovo pppd[18595]: pppd 2.4.3 started by root, uid 0
Oct 7 22:27:29 zavidovo pppd[18595]: using channel 66
Oct 7 22:27:29 zavidovo pppd[18595]: Using interface ppp0
Oct 7 22:27:29 zavidovo pppd[18595]: Connect: ppp0 <--> eth0
Oct 7 22:27:29 zavidovo pppd[18595]: sent [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0xcfd25f4e>]
Oct 7 22:27:29 zavidovo pppd[18595]: rcvd [LCP ConfReq id=0x0 <mru 1492> <magic 0x19595f15>
<callback CBCP> <mrru 1614> <endpoint [local:33.4d.35.0e.08.2d.4f.5d.9b.16.34.42.43.fb.be.74.00.00.00.00]>]
Oct 7 22:27:29 zavidovo pppd[18595]: sent [LCP ConfRej id=0x0 <callback CBCP> <mrru 1614>]
Oct 7 22:27:29 zavidovo pppd[18595]: rcvd [LCP ConfReq id=0x1 <mru 1492> <magic 0x19595f15> <endpoint
[local:33.4d.35.0e.08.2d.4f.5d.9b.16.34.42.43.fb.be.74.00.00.00.00]>]
Oct 7 22:27:29 zavidovo pppd[18595]: sent [LCP ConfAck id=0x1 <mru 1492> <magic 0x19595f15> <endpoint
[local:33.4d.35.0e.08.2d.4f.5d.9b.16.34.42.43.fb.be.74.00.00.00.00]>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [LCP ConfReq id=0x1 <mru 1492> <auth chap MD5> <magic 0xcfd25f4e>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [LCP ConfAck id=0x1 <mru 1492> <auth chap MD5> <magic 0xcfd25f4e>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [CHAP Challenge id=0x47
<139c175d3a37a56422dd83540583188f38a8c8>, name = "net11"]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [LCP Ident id=0x2 magic=0x19595f15 "MSRASV5.20"]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [LCP Ident id=0x3 magic=0x19595f15 "MSRAS-0-MONDIALE"]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [CHAP Response id=0x47 <ca381f6597d1c7208c0285121ded1e2b>, name = "pppoe"]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [CHAP Success id=0x47 ""]
Oct 7 22:27:32 zavidovo pppd[18595]: peer from calling number 00:80:48:30:4B:F8 authorized
Oct 7 22:27:32 zavidovo pppd[18595]: sent [IPCP ConfReq id=0x1 <addr 10.0.0.1>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [CCP ConfReq id=0x4 <mppe -H -M -S -L -D +C>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [CCP ConfReq id=0x1]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [CCP ConfRej id=0x4 <mppe -H -M -S -L -D +C>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [IPCP ConfReq id=0x5 <compress VJ 0f 01> <addr 0.0.0.0>
<ms-dns1 0.0.0.0> <ms-wins 0.0.0.0> <ms-dns3 0.0.0.0> <ms-wins 0.0.0.0>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [IPCP ConfRej id=0x5 <compress VJ 0f 01> <ms-dns1 0.0.0.0>
<ms-wins 0.0.0.0> <ms-dns3 0.0.0.0> <ms-wins 0.0.0.0>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [IPCP ConfAck id=0x1 <addr 10.0.0.1>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [CCP ConfAck id=0x1]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [CCP TermReq id=0x6 19 59 5f 15 00 3c cd 74 00 00 02 dc]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [CCP TermAck id=0x6]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [IPCP ConfReq id=0x7 <addr 0.0.0.0>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [IPCP ConfNak id=0x7 <addr 172.16.0.102>]
Oct 7 22:27:32 zavidovo pppd[18595]: rcvd [IPCP ConfReq id=0x8 <addr 172.16.0.102>]
Oct 7 22:27:32 zavidovo pppd[18595]: sent [IPCP ConfAck id=0x8 <addr 172.16.0.102>]
Oct 7 22:27:32 zavidovo pppd[18595]: Cannot determine ethernet address for proxy ARP
Oct 7 22:27:32 zavidovo pppd[18595]: local IP address 10.0.0.1
Oct 7 22:27:32 zavidovo pppd[18595]: remote IP address 172.16.0.102
Oct 7 22:27:32 zavidovo pppd[18595]: Script /etc/ppp/ip-up started (pid 18608)
Oct 7 22:27:32 zavidovo pppd[18595]: Script /etc/ppp/ip-up finished (pid 18608), status = 0x1

 

В результате успешной авторизации utm5_radius выделяет абоненту IP-адрес 172.16.0.102. Протоколирование работы RADIUS-сервера utm5_radius производится в файл /netup/utm5/log/radius_main.log. Ниже приводится выдержка из этого файла при успешной авторизации абонента:

 

?Debug : Oct 07 22:27:32 AuthServer: User  connecting
?Debug : Oct 07 22:27:32 AuthServer: Session for sessionid not found in <127.0.0.1> cache
?Debug : Oct 07 22:27:32 RADIUS DBA: Info for login found. type <1>
?Debug : Oct 07 22:27:32 AuthServer: Auth scheme: CHAP
?Debug : Oct 07 22:27:32 AuthServer: CHAP: Challenge size: 19
?Debug : Oct 07 22:27:32 AuthServer: CHAP: Authorized user
?Debug : Oct 07 22:27:32 AuthServer: IP claimed: 0xac100066 (<172.16.0.102>)
?Debug : Oct 07 22:27:32 AuthServer: Calling fill radius attributes for service. Attr storage size <0>
?Debug : Oct 07 22:27:32 AuthServer: Calling fill radius attributes for slink. Attr storage size <0>
?Debug : Oct 07 22:27:32 AuthServer: Calling fill radius attributes for NAS. Attr storage size <0>
Notice: Oct 07 22:27:32 AuthServer: Login OK from NAS <127.0.0.1> CLID <>
Notice: Oct 07 22:27:32 AuthServer: Login OK from NAS <127.0.0.1> CLID <>
?Debug : Oct 07 22:27:32 AuthServer: Setting interim update interval from config

 

При успешной авторизации на сервере создается выделенный ppp-интерфейс для данного абонента:

 

ppp0      Link encap:Point-to-Point Protocol
inet addr:10.0.0.1 P-t-P:172.16.0.102 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:133 (133.0 b) TX bytes:115 (115.0 b)

 

[1] Страница проекта rp-pppoe в Интернете http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php
[2] Страница проекта raspppoe в Интернете http://www.raspppoe.com/