1. О пакете
RP-PPPoE (Roaring Peguin PPP over Ethernet) - это пакет программ, предназначенных для работы с PPPoE-соединениями. В пакет входят клиент, сервер, релей, различные служебные утилиты и сценарии, модуль для PPP-демона, обеспечивающий поддержку соединений PPPoE в режиме ядра Linux.
Пакет написан Дэвидом Сколлом, домашняя страница проекта находится по адресу http://www.roaringpenguin.com/pppoe/.
Клиента можно использовать для подключения к сети DSL-провайдера или Ethernet-провайдера, раздающего доступ к интернет через PPPoE-соединения. Сервер и агент ретрансляции можно использовать для построения серверов доступа небольших Ethernet-провайдеров.
2. Переводы man-страниц
2.1. man pppoe(8) - PPPoE-клиент пространства пользователя
2.2. man pppoe-server(8) - PPPoE-сервер пространства пользователя
2.3. man pppoe-relay(8) - PPPoE-агент ретрансляции пространства пользователя
2.4. man pppoe-sniff(8) - поиск в сети нестандартных кадров PPPoE
2.5. man pppoe-connect(8) - сценарий для управления каналом PPPoE
2.6. man pppoe-start(8) - сценарий для установки канала PPPoE
2.7. man pppoe-stop(8) - сценарий для закрытия канала PPPoE
2.8. man pppoe-setup(8) - сценарий для настройки PPPoE-клиента Roaring Penguin
2.9. man pppoe-status(8) - сценарий просмотра состояния канала PPPoE
2.10. man pppoe.conf(5) - файл конфигурации, используемый pppoe-start(8), pppoe-stop(8), pppoe-status(8) и pppoe-connect(8)
2.11. man pppoe-wrapper(1) − SUID-посредник для включения и отключения PPPoE-соединений
Переводы страниц руководства выполнены на сайте коллективных переводов http://translated.by. Несмотря на то, что это сайт коллективных переводов, в переводе мне никто не помогал, поэтому все переводы были выполнены мной.
Результаты перевода размещены на сайте http://manpages.ylsoftware.com/. Автор сайта http://ylsoftware.com/ Вадим Калинников aka MooSE любезно предложил место для размещения моих переводов man-страниц.
Несмотря на то, что в названии страниц 2.1-2.3 написано, что программы работают в пространстве пользователя, из самой документации чётко видно, что каждая программа может работать в связке с модулем ядра Linux.
На некоторых системах можно встретить сценарии 2.5-9 под именами, в которых pppoe заменено на adsl: adsl-connect, adsl-start, adsl-stop, adsl-setup и adsl-status. По содержанию это абсолютно те же самые сценарии.
Использования сценариев и конфигурационного файла, описанных в пунктах 2.5-2.11, на мой взгляд, следует избегать. В большинстве систем обычно имеются собственные сценарии настройки соединений точка-точка.
В частности, в Debian PPPoE-соединения нужно настраивать точно так же, как и любые другие PPP-соединения, создав соответствующий файл в каталоге /etc/ppp/peers. В этом файле нужно указать все необходимые опции демона pppd. Управлять соединениями можно с помощью сценариев pon и poff. Подробнее настройки рассмотрены ниже.
3. Модуль rp-pppoe.so
Перед тем, как приступить к описанию настройки, я хочу рассказать о модуле rp-pppoe.so демона pppd. Этот модуль работает в связке с модулем ядра Linux для поддержки PPPoE-соединений.
Так как при обработке пакетов PPPoE программой, работающей в пространстве пользователя, происходит постоянное переключение из режима ядра в режим пользователя и обратно, довольно большая часть процессорного времени уходит собственно на переключения: на сохранение и восстановление контекста ядра и контеста задачи.
При обработке PPPoE-пакетов драйвером ядра переключений контекста не происходит. Это позволяет добиться высокой производительности PPPoE-содеинений и сильно снизить нагрузку на центральный процессор.
Модуль rp-pppoe.so входит в состав пакета pppd, однако документацию на него мне найти не удалось. Поэтому я решил заглянуть в webgit и посмотреть исходники плагина. На странице по ссылке http://git.ozlabs.org/?p=ppp.git;a=blob;f=pppd/plugins/rp-pppoe/plugin.c;h=e94494b96cc08587e05def9f7f1ec5023dc8bd9a;hb=HEAD я нашёл следующие опции:
3.1. device name - PPPoE device name
Первая опция не имеет названия. Её значение должно быть указано сразу после строчки подключения плагина. В ней передаётся имя Ethernet-интерфейса, подключенного к ADSL-модему.
Эта опция соответствует опции -I pppoe-клиента, работающего в пространстве пользователя.
3.2. rp_pppoe_service - Desired PPPoE service name
Желаемое имя службы PPPoE.
Соответствует опции -S pppoe.
3.3. rp_pppoe_ac - Desired PPPoE access concentrator name
Желаемое имя концентратора доступа PPPoE.
Соответствует опции -C pppoe.
3.4. rp_pppoe_sess - Attach to existing session (sessid:macaddr)
Подключиться к существующему сеансу идентификатор_сеанса:mac_адрес.
Соответствует опции -e pppoe.
3.5. rp_pppoe_verbose - Be verbose about discovered access concentrators
Сообщать об обнаруженных концентраторах доступа.
Соответствует опции -A pppoe, однако не предназначена для интерактивного использования, т.к. информация будет оправляться в журнал, а не на стандартный вывод.
3.6. pppoe-mac - Only connect to specified MAC address
Подключаться только к указанному MAC-адресу.
У этой опции нет аналогов в pppoe.
4. Настройка PPPoE-интерфейсов в Debian
Произведём настройку интерфейсов. В файл /etc/network/interfaces впишем следующие строки:
auto eth0 iface eth0 inet manual auto dsl-provider iface dsl-provider inet ppp pre-up /sbin/ifconfig eth0 up provider dsl-providereth0 - Ethernet-интерфейс, к которому подключен кабель от провайдера.
dsl-provider - имя файла в каталоге /etc/ppp/peers/ с настройками подключения к провайдеру.
Эти настройки заставят систему пытаться установить PPPoE-соединение сразу после загрузки компьютера. Чтобы соединение было успешно установлено, нужно прописать настройки в файле /etc/ppp/peers/dsl-provider. Настроить PPPoE-соединение можно одним из двух способов: с использованием описанного выше модуля rp-pppoe.so, работающего совместно с PPPoE-модулем ядра или используя pppoe-клиент, работающий в пространстве пользователя.
5. Настройка подключения с использованием модуля rp-pppoe.so
Сначала нужно убедиться, что ваше ядро имеет поддержку модуля PPPoE. Попробуем загрузить PPPoE-модуль ядра вручную:
# modprobe -q pppoeТеперь посмотрим, существует ли файл /proc/net/pppoe. Если модуль был вкомпилирован в ядро статически или модуль успешно загрузился, то этот файл должен появиться. Если нет - нужно разбираться с конфигурацией вашего ядра. Не будем отвлекаться на это, поскольку подавляющее большинство современных дистрибутивов Linux позволяет загрузить этот модуль приведённой выше командой.
Теперь займёмся настройкой подключения. Для этого в файле /etc/ppp/peers/dsl-provider пропишем настройки подключения:
# Здесь указываем имя пользователя, с которым pppd будет подключаться к dsl-провайдеру. # Пароль для соединения будет взят из файла /etc/ppp/pap-secrets или /etc/ppp/chap-secrets user "ваш_логин" # Указываем загрузить модуль plugin rp-pppoe.so # Указываем интерфейс, к которому подключен модем eth0 # Говорим, что провайдер выдаёт IP-адрес динамически noipdefault # Пытаемся получить IP-адреса DNS-серверов провайдера usepeerdns # Использовать это соединение как маршрут по умолчанию defaultroute # Заставить pppd переподключаться при обрыве соединения persist # Не запрашивать пароль у удалённого партнёра noauth
Далее в файле /etc/ppp/pap-secrets или /etc/ppp/chap-secrets нужно указать имя и пароль для подключения:
ваш_логин * ваш_пароль *Имя используемого файла зависит от метода аутентификации, затребованного PPPoE-сервером, но в большинстве случаев это будет файл chap-secrets.
Теперь можно воспользоваться обычными для Debian командами pon для установки подключения и poff для закрытия подключения:
# pon dsl-provider # poff dsl-provider6. Настройка подключения с использованием pppoe-клиента, работающего в пространстве пользователя
Файл /etc/ppp/peers/dsl-provider в этом случае практически идентичен предыдущему, за исключением того, что теперь вместо опции plugin используется опция pty, запускающая программу-посредник pppoe:
user ваш_логин pty "pppoe -I eth0 -T 80 -m 1452" noipdefault usepeerdns defaultroute persist noauthКак и в предыдущем случае, для установки и закрытия подключения можно воспользоваться командами pon и poff:
# pon dsl-provider # poff dsl-providerЗа кадром остались настройка PPPoE-сервера и релея. Возможно я когда-нибудь за них возьмусь и дополню статью соответствующими разделами.
Ссылки на использованные для подготовки статьи материалы:
7 комментариев:
Интересная статейка. Вопрос в догонку, как передать параметры в модуль, если использовать кернелмоде?
Модуль ядра PPPoE работает в связке с плагином pppd, который называется rp-pppoe.so. Этот плагин парсит опции pppd и находит среди них те, которые относятся к нему. Поэтому чтобы передать опции rp-pppoe.so, достаточно прописать их в файл опций pppd.
Вообще же модуль ядра сам по себе не принимает никаких опций. Плагин rp-pppoe.so самостоятельно занимается поиском сервера доступа и сервиса с нужным именем, согласует подключение, а затем передаёт в ядро структуру, соответствующую настройкам уже установленного PPPoE-соединения.
Спасибо за статью, очень помогла, вот также кусок из файла doc/KERNEL-MODE-PPPOE:
The rp-pppoe.so plugin adds the following command-line options to pppd:
ethXXX -- Use interface ethXXX as Ethernet interface
brXXX -- Use interface brXXX as Ethernet interface
nic-XXXX -- Use interface XXXX as the Ethernet interface
rp_pppoe_service SERVICE_NAME -- Specify desired service name
rp_pppoe_ac NAME -- Specify desired access concentrator name
rp_pppoe_verbose 0|1 -- Print names of access concentrators
rp_pppoe_sess nnnn:aa:bb:cc:dd:ee:ff -- Attach to existing session 'nnnn'
on AC with Ethernet address aa:bb:cc:dd:ee:ff
This skips the discovery phase.
подскажите как сделать, что бы сервер обрабатывал любые service_name(имя службы) абонента.
default_realm - это для пустых И.С.
файл realms не походит , абоненты пишут туда черти-что.
Правильнее будет воспитать абонентов. Но если вам хочется испортить себе жизнь, то можно залезть в исходники.
Патч для pppoe-server 3.10 (3.11 легко пропатчить по аналогии), позволяющий обрабатывать любые сервиснэймы http://dl.dropbox.com/u/943974/tmp/pppoe-server.c.patch
Проходил мимо, забрал rp_pppoe_ac NAME. Большое спасибо, полегчало. =)
Отправить комментарий