Пакет RP-PPPoE

Решил объединить три своих заметки о пакете RP-PPPoE.

1. О пакете

RP-PPPoE (Roaring Peguin PPP over Ethernet) - это пакет программ, предназначенных для работы с PPPoE-соединениями. В пакет входят клиент, сервер, релей, различные служебные утилиты и сценарии, модуль для PPP-демона, обеспечивающий поддержку соединений PPPoE в режиме ядра Linux.

Пакет написан Дэвидом Сколлом, домашняя страница проекта находится по адресу http://www.roaringpenguin.com/pppoe/.

Клиента можно использовать для подключения к сети DSL-провайдера или Ethernet-провайдера, раздающего доступ к интернет через PPPoE-соединения. Сервер и агент ретрансляции можно использовать для построения серверов доступа небольших Ethernet-провайдеров.

2. Переводы man-страниц

  1. man pppoe(8) - PPPoE-клиент пространства пользователя
  2. man pppoe-server(8) - PPPoE-сервер пространства пользователя
  3. man pppoe-relay(8) - PPPoE-агент ретрансляции пространства пользователя
  4. man pppoe-sniff(8) - поиск в сети нестандартных кадров PPPoE
  5. man pppoe-connect(8) - сценарий для управления каналом PPPoE
  6. man pppoe-start(8) - сценарий для установки канала PPPoE
  7. man pppoe-stop(8) - сценарий для закрытия канала PPPoE
  8. man pppoe-setup(8) - сценарий для настройки PPPoE-клиента Roaring Penguin
  9. man pppoe-status(8) - сценарий просмотра состояния канала PPPoE
  10. man pppoe.conf(5) - файл конфигурации, используемый pppoe-start(8), pppoe-stop(8), pppoe-status(8) и pppoe-connect(8)
  11. man pppoe-wrapper(1) − SUID-посредник для включения и отключения PPPoE-соединений

Переводы страниц руководства выполнены на сайте коллективных переводов http://translated.by. Несмотря на то, что это сайт коллективных переводов, в переводе мне никто не помогал, поэтому все переводы были выполнены мной.

Результаты перевода размещены на сайте http://manpages.stupin.su/.

Несмотря на то, что в названии страниц 1-3 написано, что программы работают в пространстве пользователя, из самой документации чётко видно, что каждая программа может работать в связке с модулем ядра Linux.

На некоторых системах можно встретить сценарии 5-9 под именами, в которых pppoe заменено на adsl: adsl-connect, adsl-start, adsl-stop, adsl-setup и adsl-status. По содержанию это абсолютно те же самые сценарии.

Использования сценариев и конфигурационного файла, описанных в пунктах 5-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-provider

Эти настройки заставят систему пытаться установить 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-provider

6. Настройка подключения с использованием 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. Ссылки на использованные для подготовки статьи материалы:

  1. Домашняя страница RP-PPPoE
  2. Сайт коллективных переводов
  3. Страницы руководства Debian
  4. Мой проект перевода страниц руководства
  5. Web-интерфейс Git-репозитория программы pppd
  6. Настройка PPPoE-соединений в Debian
  7. Настройка pppoe в Debian GNU/Linux на примере провайдера TeNeT

Написать автору