Решил объединить три своих заметки о пакете RP-PPPoE.
RP-PPPoE (Roaring Peguin PPP over Ethernet) - это пакет программ, предназначенных для работы с PPPoE-соединениями. В пакет входят клиент, сервер, релей, различные служебные утилиты и сценарии, модуль для PPP-демона, обеспечивающий поддержку соединений PPPoE в режиме ядра Linux.
Пакет написан Дэвидом Сколлом, домашняя страница проекта находится по адресу http://www.roaringpenguin.com/pppoe/.
Клиента можно использовать для подключения к сети DSL-провайдера или Ethernet-провайдера, раздающего доступ к интернет через PPPoE-соединения. Сервер и агент ретрансляции можно использовать для построения серверов доступа небольших Ethernet-провайдеров.
Переводы страниц руководства выполнены на сайте коллективных переводов 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. Подробнее настройки рассмотрены ниже.
Перед тем, как приступить к описанию настройки, я хочу рассказать о модуле 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 я нашёл следующие опции:
Первая опция не имеет названия. Её значение должно быть указано сразу после строчки подключения плагина. В ней передаётся имя Ethernet-интерфейса, подключенного к ADSL-модему.
Эта опция соответствует опции -I pppoe-клиента, работающего в пространстве пользователя.
Желаемое имя службы PPPoE.
Соответствует опции -S pppoe.
Желаемое имя концентратора доступа PPPoE.
Соответствует опции -C pppoe.
Подключиться к существующему сеансу идентификатор_сеанса:mac_адрес.
Соответствует опции -e pppoe.
Сообщать об обнаруженных концентраторах доступа.
Соответствует опции -A pppoe, однако не предназначена для интерактивного использования, т.к. информация будет оправляться в журнал, а не на стандартный вывод.
Подключаться только к указанному MAC-адресу.
У этой опции нет аналогов в pppoe.
Произведём настройку интерфейсов. В файл /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-клиент, работающий в пространстве пользователя.
Сначала нужно убедиться, что ваше ядро имеет поддержку модуля 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
Файл /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-сервера и релея. Возможно я когда-нибудь за них возьмусь и дополню статью соответствующими разделами.