Linux для сервера pppoe

Простейшая установка и настройка PPPoE-сервера под Linux

Архив номеров / 2008 / Выпуск №2 (63) / Простейшая установка и настройка PPPoE-сервера под Linux

Сергей Гулинов

Простейшая установка и настройка PPPoE-сервера под Linux
Исправление ошибки LCP Config Request

Сегодня многие провайдеры предоставляют доступ в Интернет посредством аутентифицируемого VPN на базе протокола PPP. Однако далеко не всегда использование этого протокола является оптимальным решением.

Наверное, уже все сталкивались или по крайней мере слышали про виртуальные частные сети, VPN (Virtual Private Network). Под виртуальными частными сетями подразумевается создание логической сети поверх другой, например Интернет. При этом созданная логическая сеть использует в качестве среды передачи данных уже существующие сети.

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

В качестве протокола уже существующей сети пусть будет выступать наиболее широко используемый сегодня протокол IP (Internet Protocol – протокол сети Интернет). Тогда схема инкапсуляции будет выглядеть следующим образом (см. рис. 1).

Рисунок 1. Схема инкапсуляции (IP)

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

Рисунок 2. Схема инкапсуляции (PPP)

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

Получается этакий многослойный пирог (см. рис. 3).

Рисунок 3. Схема передачи данных

Именно такая технология чаще всего используется у провайдеров для предоставления пользователям доступа в Интернет с использованием аутентифицируемого VPN как средства ограничения доступа к ресурсам глобальной сети.

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

Рисунок 4. Схема передачи данных, убран протокол IP

Таким образом, из нашего многослойного «пирога», исчезает один не нужный в данном случае уровень IP. Теперь перейдём от теории к делу и посмотрим, как настроить PPPoE-сервер под управлением Linux.

В качестве демонстрационной платформы будет выступать сервер под управлением Red Hat 9.0, однако всё написанное справедливо и для всех дистрибутивов от Red Hat, вплоть до Fedora Core 8.0 включительно.

Для настройки нам понадобятся последние версии 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

if (errfd == 0 || errfd == 1)

/* dup the in, out, err fds to 0, 1, 2 */

if (log_to_fd > 2)

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

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

Мы видим, что старая версия находится в /usr/sbin/.

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

На этом установка новой версии ppp завершена. И можно приступать к установки rp-pppoe.

Тут всё довольно тривиально и обычно. Загружаем rp-pppoe, распаковываем, запускаем скрипт установки:

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

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

# Secrets for authentication using CHAP

# client server secret IP addresses

То есть именем пользователя будет «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-адрес, выдаваемый клиентам.

Всё, сервер запущен и работает.

Теперь к нему можно подсоединяться, используя в качестве имени пользователя «testlogin» и пароля «testpass».

Проконтролировать работу сервера после подключения к нему клиента можно, набрав следующую команду:

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

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

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

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

RX bytes:1290 (1.2 Kb) TX bytes:121 (121.0 b)

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

Рубрика: Администрирование / Продукты и решения
Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Источник

Установка PPPoE сервера в Debian/Ubuntu Linux

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

Необходимо проинсталировать пакеты ppp, pppoe и pppstatus.

$ sudo apt-get install ppp pppoe pppstatus
Далее создаем файл /etc/ppp/pppoe-server-options со следующим содержанием:

require-chap
ktune
login
ms-dns 10.0.0.1
nobsdcomp
noendpoint
noproxyarp
noipdefault
noipx
novj
logfile /home/oc/pppoe-server.log

Так же там указано, что pppoe-server работает в kernel mode. Настройки доступа хранятся в файле /etc/ppp/chap-secrets в формате

# логин сервер пароль ip_адрес_клиента
«test» * «changeme» *
Что бы после перезапуска сервера pppoe server поднимался автоматически необходимо добавить в файл /etc/rc.local:

PROV=NET-PLUS
MAX=5
BASE=172.28.6.65
PLA=172.28.6.64/26
MYIP=172.28.6.1

pppoe-server pty \
-T 60 \
-I eth1 \
-L $MYIP \
-N $MAX \
-C $PROV \
-S $PROV \
-R $PLA

exit 0
Важно не забыть подгрузить модуль ядра pppoe при старте системы — для этого добавляем запись «pppoe» в /etc/modules. Сам модуль можно подгрузуть в любой момент с помощью modprobe.

В iptables хорошо бы добавить

-A FORWARD -p tcp —tcp-flags SYN,RST SYN -j TCPMSS —clamp mss-to-pmtu
В /etc/sysctl.conf должна быть раскомментирована строчка «net.ipv4.ip_forward=1», иначе Linux не будет перенаправлять пакеты с одного интерфейса на другой. Эту же опцию можно сменить с помощью утилиты sysctl.

В таблице маршрутизации должен быть один default router — адрес провайдера (при условии, что на машине несколько поднятых интерфейсов). В итоге вывод `netstat -rn`должен выглядеть примерно так

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Iface
172.28.6.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
74.56.59.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 74.56.59.1 0.0.0.0 UG 0 0 0 eth0

Источник

Записки IT специалиста

Технический блог специалистов ООО»Интерфейс»

  • Главная
  • Настройка PPPoE подключения в Ubuntu Server

Настройка PPPoE подключения в Ubuntu Server

Протокол PPPoE пользуется заслуженной популярностью у многих интернет-провайдеров, так как позволяет подключаться к сети без сложных настроек, просто указав логин и пароль. Если в графической среде современных ОС настройка PPPoE крайне проста, то столкнувшись с командной строкой Ubuntu многие администраторы испытывают затруднения, поэтому в данной статье мы решили подробно разобраться с этим вопросом.

PPPoE сегодня широко используется не только ADSL-провайдерами, но и провайдерами кабельных сетей, однако существенной разницы в том, какой тип доступа использует провайдер нет. В случае с ADSL вам придется настроить модем в режиме Bridge и правильно указать значения VPI/VCI выданные вашим провайдером, IP-адрес внешнего интерфейса можно задать любым, чаще всего его выбирают из одного диапазона с ADSL-модемом, чтобы можно было без лишних проблем заходить к нему в админ-панель. В кабельных сетях вам нужно будет указать IP-адрес выданный вам провайдером или настроить сетевой интерфейс на автоматическое получение настроек через DHCP.

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

Сама настройка осуществляется консольной утилитой pppoeconf в интерактивном режиме:

Утилита выполнит поиск доступных концентраторов PPPoE и в случае успеха перейдет к следующему шагу, в противном случае вам следует еще раз проверить настройки внешнего сетевого интерфейса (модема) и повторить попытку.

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

Указываем логин и пароль:

Отвечаем утвердительно на остальные вопросы и разрешаем автоматический запуск соединения:

После чего будет предложено установить соединение. Его состояние можно проверить командой ifconfig c аргументом ppp (выводит информацию о всех ppp-соединениях).

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

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

Настройки соединения хранятся в /etc/ppp/peers/dsl-provider, содержимое данного файла перезаписывается при каждом запуске pppoeconf и вносить в него изменения без четкого понимания, что и зачем вы делаете не следует.

Отдельно следует остановиться на опции user, как понятно из называния, она указывает учетные данные какого пользователя использовать при подключении. Список пользователей для коммутируемых соединений хранится в /etc/ppp/chap-secrets. Синтаксис весьма прост: имя, список разрешенных серверов, пароль, в нашем случае имя и пароль test.

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

За автоматический запуск соединения отвечает секция в файле /etc/network/interfaces, его содержимое понятно и комментариев не требует.

Как видим ничего сложного в настройке PPPoE в среде командной строки Ubuntu Server нет, а в случае необходимости вы всегда можете изменить настройки вручную, не прибегая к повторному запуску pppoeconf.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Или подпишись на наш Телеграм-канал:

Источник

Читайте также:  Windows не может получить доступ 80004005
Оцените статью