Навигация по сайту

Каталог оборудования

Настройка PPPoE сервера под Linux

Думаю уже все сталкивались или по крайней мере слышали про виртуальные частный сети, VPN (Virtual Private Network). Под виртуальными частными сетями подразумевается создание логической сети поверх другой, уже существующей. При этом созданная логическая сеть использует в качестве среды передачи данных  уже существующие сети.
При таком подходе протокол, используемый для создания частных сетей, инкапсулирует, т.е. вставляет, свои пакеты, в пакеты того протокола, который применяется в уже  существующих сетях. Немного запутанно, неправда ли? Теперь более понятным языком.
В качестве протокола уже существующий сети пусть будет выступать наиболее широко используемый сегодня протокол IP (Internet Protocol – протокол сети Интернет). Тогда схема инкапсуляции будет выглядеть следующим образом:

Для создания виртуальной сети чаще всего используется протокол PPTP (Point-to-Point Tunneling Protocol – туннельный протокол типа точка-точка). В качестве примера возьмём простой случай, когда данные протокола IP, передаются по сети Ethernet. Тогда инкапсуляция будет выглядеть следующим образом:

Но и это ещё не всё. Дело в том, что данные, чаще всего передаются по виртуальным  сетям, опять же по протоколу IP. Получается этакий многослойный пирог:

Именно такая технология чаще всего используется для организации виртуального защищённого канала. Однако такой подход не всегда является оптимальным, и вот почему.
Предположим, что нам надо создать виртуальную сеть между устройствами находящимися в одной и той же сети Ethernet, а так к стати говоря, чаще всего и бывает. Тогда, я думаю, вы вполне со мной согласитесь, что развёртывать сеть IP, по верх которой будет работать ещё одна такая же сеть не вполне разумно. Вполне очевидно, что в данном случае, оптимально развёртывать виртуальную сеть сразу по верх сети Ethernet, уменьшив тем самым число инкапсуляций одного протокола в другой. Вот тут нам на помощь и приходит протокол PPPoE (Point-to-Point Protocol over Ethernet) - сетевой протокол передачи кадров PPP через Ethernet. Этот протокол использует в качестве переносчика своей информации сеть Ethernet. Именно на этом уровне будет осуществляться шифрование данных, естественно при условие, что всё оборудование поддерживает требуемые алгоритмы шифровки. Таким образом, из нашего многослойного “пирога”, исчезает один абсолютно не нужный, в данном случае, уровень IP, и картина приобретает следующий вид:


Теперь перейдём от теории к делу, и посмотрим, как настроить PPPoE сервер под управлением Linux.
В качестве демонстрационной платформы будет выступать сервер под управлением  Fedora Core 8.0, которая является одним из самых распространённых дистрибутивов Linux.
Для настройки нам понадобиться последние версии ppp и pppoe. На момент написания это ppp 2.4.4, скачать который можно здесь: ftp://ftp.samba.org/pub/ppp/ , и rp-pppoe 3.8 который можно получить по адресу: http://www.roaringpenguin.com/products/pppoe.
Однако перед тем как описывать процесс установки необходимо сделать небольшое отступление.
Дело в том, что на момент написания данной статьи на всех  системах от компании Red Hat,  pppoe отказывался правильно функционировать в режиме демона (по поводу kernel mode ничего сказать не могу, потому как не пробовал). Ошибка кроется в демоне ppp, который при установлении соединения по протоколу pppoe отказывается посылать ответы на запросы LCP Config Request, тем самым приводя к “зависанию” соединения на этапе проверки имени пользователя и пароля.
При этом в логах, которые находятся в  /var/log/messages можно наблюдать такие ошибки:

Jan 30 03:24:51 Dark-server pppd[1979]: LCP: timeout sending Config-Requests
Jan 30 03:24:51 Dark-server pppd[1979]: Connection terminated.
Jan 30 03:24:51 Dark-server pppd[1979]: Modem hangup

Для устранения данной ошибки необходимо исправить файл main.c из комплекта pppd. После чего ppp надо заново откомпилировать и установить.
Итак приступим.
Загружаем ppp 2.4.4 , распаковываем, заходим в поддиректорию pppd, правим файл main.c (формат patch):

—- ppp-2.4.4/pppd/main.c.orig 2006-06-04 07:52:50.000000000 +0400
+++ ppp-2.4.4/pppd/main.c 2007-11-09 14:47:20.000000000 +0300
@@ -1567,6 +1567,8 @@
if (errfd == 0 || errfd == 1)
errfd = dup(errfd);

+ closelog();
+
/* dup the in, out, err fds to 0, 1, 2 */
if (infd != 0)
dup2(infd, 0);
@@ -1575,7 +1577,6 @@
if (errfd != 2)
dup2(errfd, 2);

- closelog();
if (log_to_fd > 2)
close(log_to_fd);
if (the_channel->close)

(Скачать патч и более подробно о данной проблеме можно прочитать сдесь: https://bugzilla.redhat.com/show_bug.cgi?id=222295)

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

which pppd
pppd: /usr/sbin/pppd

Мы видим, что старая версия находится в /usr/sbin/
Далее, всё довольно обычно, как и при установке всех программ из исходных текстов. Запускаем скрипт конфигурации ppp, указывая параметр “prefix”,имея в виду, что установка должна выполняться, заменяя предыдущую версию. Компилируем, устанавливаем:

./configure —prefix=/usr
 make
 make install

На этом установка новой версии ppp завершена. И можно приступать к установки rp-pppoe.
Тут всё довольно тривиально и обычно. Загружаем rp-pppoe, распаковываем, запускаем скрипт установки:
./go
Если не будет ни каких ошибок, то на этом установка завершена.

Далее необходимо отредактировать файл опций /etc/ppp/pppoe-server-options. Это самый обычный файл конфигурации ppp. Вот пример такого файла, который работает у меня:

name pppoe
logfile /var/log/log.pppoe
refuse-pap
refuse-chap
require-mschap
require-mschap-v2
require-mppe-128
lcp-echo-interval 20
lcp-echo-failure 3
netmask 255.255.255.0
nobsdcomp
lock

Далее необходимо  завести учётные записи для устройств, которым будет разрешен доступ к серверу, а правильнее сказать к нашей виртуальной защищённой сети. Учётные записи находятся в файлах: /etc/ppp/pap-secrets  и /etc/ppp/chap-secrets. Не вдаваясь в подробности, могу сказать, что эти файлы должны быть одинаковы по содержанию. Приведу пример такого файла:

# Secrets for authentication using CHAP
# client  server  secret   IP addresses
"testlogin"   * "testpass"  *

Т.е. именем для доступа в нашу защищённую сеть будет “testlogin” а паролем  “testpass”. Ну вот практически и всё, теперь остаётся только запустить сервер, выполнив следующую команду:
 
pppoe-server -I eth0 -L 192.168.0.1 -R 192.168.0.2

Где: eth0 — имя интерфейса на котором запущен сервер, 192.168.0.1- IP адрес сервера, 192.168.0.2 — начальный IP адрес выдаваемый устройствам. Всё, PPPoE сервер запущен и работает.
Теперь к нему можно подсоединяться, используя в качестве имени пользователя “testlogin” а пароля  “testpass”.
Проконтролировать работу сервера, после подключения к нему устройства, можно набрав следующую команду:

ifconfig

Ответ будет приблизительно такой:

eth0      Link encap:Ethernet  HWaddr 00:E0:4C:39:32:1A
          inet addr:192.168.22.200  Bcast:192.168.22.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1005 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1583 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:73417 (71.6 Kb)  TX bytes:191052 (186.5 Kb)
          Interrupt:5 Base address:0xf000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:700 (700.0 b)  TX bytes:700 (700.0 b)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.0.1  P-t-P:192.168.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1480  Metric:1
          RX packets:14 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:1290 (1.2 Kb)  TX bytes:121 (121.0 b)

Среди запущенных интерфейсов можно увидеть интерфейс ppp0, который и является интерфейсом для устройства только что созданной нами сети VPN. Вот собственно и всё. Желаю успехов.
C.Ю. Гулинов 2008 г.
Перепечатка без согласия автора запрещена.

© 2007 Euro-engineering group
105082, Москва, ул. Перовская, 21 офис №26
Тел./факс: (495) 921-02-18 Skype: euro.engineering ICQ: icq: 464903452464903452


статистика Центр безопасности и связи. Каталог оборудования, технические описания, поставщики, рейтинг компаний, поисковая система Прайс-центр рынка систем безопасности и связи. Все фирмы, товары, цены, прайс-листы Безопасность и связь. Каталог фирм поставщиков, дилеров и дистрибьюторов оборудования Системы безопасности и связи. Производители, брэнды, торговые марки и поставщики оборудования

Создание сайта —

Студия Интайтл
На главную

Для закрытия этого окна достаточно нажать на фотографию.