Debian pppoe client настройка

Обновлено: 07.07.2024

Однажды возникла задача настроить раздачу интернета на пару десятков компьютеров (офисные и домашние). Коробочные решения оказались либо платными, либо достаточно сложно настраиваемыми, поэтому было принято решение использовать собственное на базе Debian Linux. Опытом его поднятия я хочу поделиться с вами в этом посте, но приведенные здесь версии могли немного устареть с момента написания мануала «для себя», так что нужно проявить некоторую внимательность. Также, нужно учитывать, что приведенное решение далеко от идеального и профессионального. Оно поможет скорее тем, кому нужно быстро поднять у себя сервер, раздающий интернет. В конце у нас будет раздача интернета через PPPoE с назначением внутренних IP клиентам, шейпинг трафика, DNS сервер и простой мониторинг текущих сессий из консоли.

Подготовка системы

aptitude update
aptitude install openssh-server mc mtr tracert nano tcpdump bind9 pppoe freeradius radiusclient1 rcconf php5

Настройка DNS-сервера

Выполняем
nano /etc/bind/named.conf.options

Добавляем в конец файла:
allow-transfer < none; >;
allow-query < 10.128.0.0/16; localhost; >; //подсеть наших пользователей
allow-recursion < 10.128.0.0/16; localhost; >; //рекурсия только локальным
version "My ISP DNS"; //скрыли информацию о версии сервера

Начнем настраивать chroot-окружение для нашего сервера DNS. Создадим каталоги корневой файловой системы сервера DNS — root-dns:
mkdir -p /root-dns/etc
mkdir /root-dns/dev
mkdir -p /root-dns/var/cache/bind
mkdir -p /root-dns/var/run/bind/run
/etc/init.d/bind9 stop
nano /etc/default/bind9

Нашли строчку «OPTIONS=» и заменили:
OPTIONS="-u bind -t /root-dns"

mv /etc/bind /root-dns/etc
ln -s /root-dns/etc/bind /etc/bind
nano /etc/init.d/bind9

Нашли строчку «OPTIONS=» и заменили:
OPTIONS="-u bind -t /root-dns"

Запускаем:
nano /etc/init.d/rsyslogd

Нашли «RSYSLOGD_OPTIONS» и заменили:
RSYSLOGD_OPTIONS="-c3 -a /root-dns/dev/log"

Защитим от редактирования и удаления файл конфигурации named.conf:
chattr +i /root-dns/etc/bind/named.conf

Примечание. Не забудьте снять атрибут «i» перед редактированием файла конфигурации (chattr -i …)

mknod /root-dns/dev/null c 1 3
mknod /root-dns/dev/random c 1 8
chmod 666 /root-dns/dev/null /root-dns/dev/random
chown -R bind:bind /root-dns/var/*
chown -R bind:bind /root-dns/etc/bind
/etc/init.d/bind9 start

Сервер PPPoE

cd /tmp
apt-get build-dep pppoe
apt-get source pppoe
cd rp-pppoe-3.8/src
./configure

Запускаем:
nano config.h

Заморозим пакет в системе, чтобы предотвратить его автоматическое обновление:
echo pppoe hold | dpkg —set-selections

С этого момента нужно как минимум при каждом обновлении системы просматривать список обновлений. Если для pppoe будет выпущено обновление, закрывающее уязвимость, необходимо будет собрать пакет из свежих исходников заново, снять фиксацию пакета в системе с помощью команды:
echo pppoe install | dpkg --set-selections

Теперь в системе установлен пакет с PPPoE-сервером, позволяющим поддерживать PPPoE-соединения на уровне ядра. Для запуска сервера в этом режиме, к команде описанной в предыдущем разделе нужно добавить опцию -k: pppoe-server -I eth1 -L 192.168.0.1 -k

Запускаем:
nano /etc/ppp/pppoe-server-options

Запускаем:
nano /etc/ppp/options

В конфиге /etc/ppp/options: убираем всё, ставим:
lock

Запускаем:
nano /etc/init.d/pppoe-server

Отключаем bind. Потом туда опять заходим и видим что он вообще исчез из списка. Внизу он таки есть, а рядом наш pppoe-server. Включили и то и то. Вышли.

cd /root-dns/etc/bind
rndc-confgen -r /dev/urandom -a
chgrp bind rndc.key
chmod +r rndc.key
nano named.conf.options

В конце файла добавляем:
controls inet 127.0.0.1 allow < localhost; >keys < rndc-key; >;
>;
include "/etc/bind/rndc.key";

Теперь ещё нужно включить форвардинг в ядре и сделать подхват правил iptables. Конфигурация пока будет тестовой.

Параметры sysctl.conf, iptables, настройки сетевых интерфейсов

Запускаем:
nano /etc/sysctl.conf

Последние 4 строчки — это перезагрузка при различных падениях системы, чтобы не ездить ради перезагрузки куда-то в другой город. Сохранили, далее делаем тестовый конфиг для iptables:
iptables -t nat -F
iptables-save > /etc/firewall.conf
nano rc.local

Теперь в rc.local у нас будет:
ifconfig eth0 up
iptables-restore </etc/firewall.conf

Далее, конфигурируем /etc/network/interfaces — тут eth0 получился локальным, для него ничего вообще не пишем, разве что auto eth0. А по поводу eth1 — если это интернет — я бы задумался о статическом внешнем айпи, в противном случае нельзя использовать SNAT, а только MASQUERADE, а он сильнее грузит систему.

Запускаем:
nano /etc/network/interfaces

Конфиг:
auto lo
iface lo inet loopback
auto eth0
auto eth1

allow-hotplug eth0 eth1
iface eth1 inet dhcp

В данном листинге eth1 — интернет через NAT и DHCP конфиг.

Пробный запуск сервера PPPoE

Далее надо протестировать PPPoE без радиуса. Для этого комментируем 2 строчки плагинов в /etc/ppp/pppoe-server-options.

Запускаем:
nano /etc/ppp/pppoe-server-options

Запускаем:
nano /etc/ppp/pap-secrets

Дописываем в конец либо заменяем полностью содержимое:
test * test 10.128.2.10

Запускаем pppoe-server:
/etc/init.d/pppoe-server start

Перезагрузили сервер, проверили PPPoE и инет. На любом клиенте создаем PPPoE соединение и подключаемся, используя логин и пароль test. Для того чтобы инет работал у клиента, нужно включить маскарадинг:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Работает? Хорошо, вернули как было:
iptables -t nat -F

FreeRadius

Запускаем:
nano /etc/radiusclient/servers

Заменяем содержимое файла:
127.0.0.1 my-isp-radius

Запускаем:
nano /etc/radiusclient/radiusclient.conf

Запускаем:
nano /etc/freeradius/radiusd.conf

Auth-Type CHAP chap
>

Auth-Type MS-CHAP mschap
>

Запускаем:
nano /etc/freeradius/clients.conf

Заменяем содержимое файла:
client localhost ipaddr = 127.0.0.1
secret = my-isp-radius
require_message_authenticator = no
nastype = other
>

Запускаем:
nano /etc/freeradius/users

Конфиг:
steve Cleartext-Password := "testing"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 10.128.13.3,
Framed-IP-Netmask = 255.255.0.0,
Framed-Routing = Broadcast-Listen,
Framed-Filter-Id = "std.ppp",
Framed-MTU = 1500,
Framed-Compression = Van-Jacobsen-TCP-IP

DEFAULT Framed-Protocol == PPP
Framed-Protocol = PPP,
Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "CSLIP"
Framed-Protocol = SLIP,
Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "SLIP"
Framed-Protocol = SLIP

Вообще в будущем вам нужно будет настроить связку с MySQL, но на данном этапе это не критично. При добавлении пользователя нужно перезапустить Freeradius:
/etc/init.d/freeradius restart

Теперь нужно разобраться с шейпингом трафика. Идея такова, что скорость должна регулироваться индивидуально для каждого пользователя и передаваться в виде атрибута от Radius-сервера серверу NAT. Зачем? Для того чтобы в последствии было возможно расширить структуру и распределить нагрузку между несколькими NAS.

Шейпинг трафика

Итак, подготовка. Установим Wondershaper:
aptitude install wondershaper

Этот пакет представляет собой один скрипт, работающий с CBQ/HTB приоритезацией и имеющий вменяемый формат вызова. При желании можно протестировать его работу до внедрения:
wondershaper ppp0 512 512

и убеждаемся в том, что скорость опять нормальная (то есть равна скорости, которую мы берем от «старшего брата» на WAN интерфейсе. Добавление ограничений скорости нужно автоматизировать, используя простой парсер файлов /var/run/radattr.ppp*, которые появляются при успешном ppp соединении и содержат все атрибуты, передаваемые Radius-сервером серверу PPPoE. Займемся атрибутами. Дополняем содержимое файла дополнительных атрибутов /etc/freeradius/dictionary вот этим:

Запускаем:
nano /etc/freeradius/dictionary

Далее, эти же атрибуты нужно добавить в словарь Raduisclient-а. Редактируем /etc/radiusclient/dictionary, в конце добавляем то же самое:

Запускаем:
nano /etc/radiusclient/dictionary

Всё отлично, теперь они (FreeRadius и RadiusClient) друг друга поймут. Соответственно, в настройках пользователей freeradius-а появятся дополнительные строчки с указанием лимита входящей и исходящей скорости (но не обязательные). Пример /etc/freeradius/users с учетом изменений:

Запускаем:
nano /etc/freeradius/users

DEFAULT Framed-Protocol == PPP
Framed-Protocol = PPP,
Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "CSLIP"
Framed-Protocol = SLIP,
Framed-Compression = Van-Jacobson-TCP-IP

DEFAULT Hint == "SLIP"
Framed-Protocol = SLIP

Теперь NAS получает сведения о скорости, но не умеет их обрабатывать. Делаем два скрипта, выполняющих парсинг переданных атрибутов при установлении соединения:

Запускаем:
nano /etc/ppp/ip-up.d/0001shaper

Запускаем:
nano /etc/ppp/ip-down.d/0001shaper

Как видно из этих листингов, вызывается некий скрипт, применяющий и отменяющий шейпинг. С этого момента — поподробнее. $1 — это переданное имя интерфейса, то есть ppp0 к примеру, $5 — это Framed-IP, то есть IP клиента PPP. Создадим заветный каталог и положим в него два файла:
mkdir /root-scripts
nano /root-scripts/shape-on

Запускаем:
nano /root-scripts/shape-off

Запускаем:
chmod +x /root-scripts/*

В листингах eth1 — это всё ещё WAN интерфейс. Итак, что мы получаем в результате: Клиент соединяется с сервером PPP, получает IP адрес. Автоматически вызывается скрипт, настраивающий шейпинг на клиентском PPP интерфейсе и включающий для него маскарадинг. При рассоединении правило маскарадинга удаляется также автоматически. Вроде как wondershaper не нужно принудительно отцеплять от pppx, во всяком случае мануалы об этом молчат и всё нормально работает на практике.

Простая защита на основе iptables

Теперь уделим немножко внимания iptables и безопасности сервера. Заменим /etc/firewall.conf:

Запускаем:
nano /etc/firewall.conf

Что мы тут видим? Во-первых, выделенное правило. Оно будет отличаться в реальной конфигурации или просто отсутствовать за ненадобностью, но смысл таков: если шлюзом для сервера является ADSL модем или подобный девайс с веб-админкой, нам не нужно выдумывать хитрые пароли для входа туда. Вместо этого, мы запрещаем к ним обращаться из клиентских туннелей, но одному таки разрешаем — это будет сервисная учетная запись, которой можно на него ломиться. Само собой, она не для клиентов. Далее. Добавлены команды, включающие защиту от брутфорсинга SSH сервера. Для их работы нужно настроить blocksshd.

BlockSSHd

Этот скрипт написан на Perl и требует некоторых дополнительных модулей для работы. Итак, займемся модулями:
cpan
upgrade
install Sys::Syslog
install Sys::Hostname
install File::Tail
install Tie::File
install Net::DNS
install Net::Subnets
install Getopt::Long
exit

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

Теперь нужно распаковать blocksshd и установить его:
cd /tmp
tar -xvzf ./blocksshd-1.3.tar.gz
cd blocksshd-1.3
make install

Ну и естественно, версия на момент написания мануала была именно эта, а может быть любая, так что нужно внимательно всё сделать а не копипастить в консоль. Осталось отредактировать конфигурацию blocksshd:

Запускаем:
nano /etc/blocksshd.conf

В этом листинге нужно обратить внимание на выделенные строчки. Первая — максимальное число попыток входа с одного адреса, вторая — нужно ли разблокировать забаненный айпи по истечении времени в секундах, указанного в третьей строчке. Четвертая — оповещать ли по email о попытках взлома.
Теперь можно перезагрузить сервер и тестировать то что получилось.

Простейший мониторинг

Для удобства мониторинга активных сессий можно использовать скрипт, написанный «на коленке». Создадим его и настроим симлинк для простого запуска, ну и проверим конечно:

Запускаем:
nano /root-scripts/clients

function execShellCmdRaw($cmd) ob_start();
passthru($cmd);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
>

function rawToArray($buffer) return empty($buffer)?array():preg_split('/[\r\n]+/', $buffer, -1, PREG_SPLIT_NO_EMPTY);
>

function execShellCmd($cmd) return rawToArray(execShellCmdRaw($cmd));
>

function getNATSources() $nat = execShellCmd('iptables -t nat -L | grep MASQUERADE');
$nats = array();
foreach ($nat as $s) $pos_start = strpos($s, '--') + 2;
$pos_end = strpos($s, 'anywhere');
$n = trim(substr($s, $pos_start, $pos_end - $pos_start));
$nats[$n] = $n;
>
return $nats;
>

function getTunnelMacAddr($pid) $pppdc = execShellCmd('ps -p '.$pid.' -f | grep pppd');
$pppdc = $pppdc[0];
$pos_start = strpos($pppdc, '-e ') + 3;
$pos_end = strpos($pppdc, '-S \'\'');
return trim(substr($pppdc, $pos_start, $pos_end - $pos_start));
>

function getPPPTunnels() $ifc = execShellCmd('ifconfig -a');
$tunnels = array();
$nat = getNATSources();
foreach ($ifc as $i => $s) if (substr($s, 0, 3) == 'ppp') $ppp = array();
$ppp['interface'] = substr($s, 0, 4);
$ppp['framed_ip'] = trim(substr($ifc[$i+1], strpos($ifc[$i+1], 'P-t-P:') + 6, 12));
$RXpos_start = strpos($ifc[$i+6], '(') + 1;
$RXpos_end = strpos($ifc[$i+6], ')');
$ppp['tx'] = substr($ifc[$i+6], $RXpos_start, $RXpos_end - $RXpos_start); //TX(user) = RX(server)
$tx_sub = substr($ifc[$i+6], $RXpos_end + 1);
$TXpos_start = strpos($tx_sub, '(') + 1;
$TXpos_end = strpos($tx_sub, ')');
$ppp['rx'] = substr($tx_sub, $TXpos_start, $TXpos_end - $TXpos_start);
$ppp['nat'] = array_key_exists($ppp['framed_ip'], $nat)?'on':'off';
$pidf = '/var/run/'.$ppp['interface'].'.pid';
if (file_exists($pidf)) $ppp['uptime'] = time_since(filemtime($pidf));
$ppp['pid'] = trim(file_get_contents($pidf));
$ppp['mac_addr'] = getTunnelMacAddr($ppp['pid']);
$ppp['username'] = 'detectedusername';
$tunnels[] = $ppp;
>
>
>
return $tunnels;
>

function clientTable($tunnels) printf("\n");
printf(" %15s | ","IP Address");
printf("%20s | ","MAC Address ");
printf("%3s | ","NAT");
printf("%16s | ","User name ");
printf("%9s | ","TX (up)");
printf("%9s | ","RX (down)");
printf("%11s","Uptime ");
printf("\n ");
for ($i = 0; $i < 101; $i++) printf("-");
printf("\n");
foreach($tunnels as $tun) printf(" %15s | ",$tun['framed_ip']);
printf("%20s | ",$tun['mac_addr']);
printf("%3s | ",$tun['nat']);
printf("%16s | ",$tun['username']);
printf("%9s | ",$tun['tx']);
printf("%9s | ",$tun['rx']);
printf("%11s",$tun['uptime']);
printf("\n");
>
printf("\n");
>

function addRadParams(&$tunnels = NULL) $radusers = rawToArray(file_get_contents('/etc/freeradius/users'));
$users = array();
foreach ($radusers as $i => $s) if (strpos($s, 'Cleartext-Password') !== FALSE) $user = array();
$user['username'] = trim(substr($s, 0, strpos($s, 'Cleartext-Password')));
$si = $i + 1;
while (strpos($radusers[$si], 'Framed-IP-Address') == FALSE) $si++;
$ip_raw = explode('=', $radusers[$si]);
$ip_raw = $ip_raw[1];
$users[trim($ip_raw, ' ,')] = $user;
>
>
foreach ($tunnels as $i => $tun) $tunnels[$i]['username'] = $users[$tun['framed_ip']]['username'];
>
return $tunnels;
>

$t = getPPPTunnels();
addRadParams($t);
clientTable($t);

Запускаем:
chmod +x /root-scripts/clients
ln -s /root-scripts/clients /usr/bin/clients
clients

Получим что-то типа:

IP Address | MAC Address | NAT | User name | TX (up) | RX (down) | Uptime
-----------------------------------------------------------------------------------------------------
10.128.1.7 | 1:00:19:66:df:39:26 | on | room56 | 507.4 MiB | 445.5 MiB | 16h:31min
10.128.1.3 | 23:00:13:8f:70:30:03 | on | room47 | 8.2 MiB | 137.8 MiB | 1h:14min
10.128.1.5 | 3:00:a1:b0:11:74:cf | on | room50 | 19.2 MiB | 500.2 MiB | 16h:30min

Вот и всё, наш сервер готов к использованию. По своим наблюдениям могу сказать, что простого системника с 1 гб DDR1 и 2 ГГц процессором хватает для раздачи 16-мегабитного канала для 30 пользователей (больше просто не нужно было) и ощутимой нагрузки система не испытывает.

PPPoE (англ. Point-to-point protocol over Ethernet) — сетевой протокол передачи кадров Протокол PPP, стандарт которого определён в документе RFC 2516, является установление соединения «точка-точка» поверх общей среды Ethernet. Настройка подключения отличается для абонентов сетей Что такое Ethernet и ADSL. В основном используется xDSL-сервисами. Предоставляет дополнительные возможности (Аутентификация, сжатие данных, шифрование).

К сожалению, его MTU ниже, чем на стандартном Что такое Ethernet, что иногда вызывает проблемы с плохо настроенными межсетевыми экранами.

Работа PPPoE осуществляется следующим образом. Существует Ethernet-среда, то есть несколько соединённых сетевых карт, которые адресуются MAC-адресами. Заголовки Ethernet-кадров содержат адрес отправителя кадра, адрес получателя кадра и тип кадра. Одну из карт слушает PPPoE сервер. Клиент посылает широковещательный Ethernet кадр, на который должен ответить PPPoE сервер (адрес отправителя кадра — свой MAC-адрес, адрес получателя кадра — FF:FF:FF:FF:FF:FF и тип кадра — PPPoE Active Discovery Initiation). PPPoE сервер посылает клиенту ответ (адрес отправителя кадра — свой MAC-адрес, адрес получателя кадра — МАС-адрес клиента и тип кадра — PPPoE Active Discovery Offer). Если в сети несколько PPPoE серверов, то все они посылают ответ. Клиент выбирает подходящий сервер и посылает ему запрос на соединение. Сервер посылает клиенту подтверждение с уникальным идентификатором сессии, все последующие кадры в сессии будут иметь этот идентификатор. Таким образом, между сервером и клиентом создается виртуальный канал, который идентифицируется идентификатором сессии и MAC-адресами клиента и сервера. Затем в этом канале устанавливается PPP соединение, а уже в PPP пакеты упаковывается IP-трафик.

Для Ethernet необходима установка клиента РРРоЕ (для всех ОС за исключением Windows XP). В настройках сетевой карты можно отключить все протоколы (в том числе и TCP\IP), так как они не используются для создания РРРоЕ сессии. После установки драйвера клиента РРРоЕ необходимо из командной строки один раз запустить утилиту конфигурации «raspppoe», где в списках всех обнаруженных серверов доступа необходимо будет выбрать свой городской сервер. Автоматически будет создано новое соединение удаленного доступа. При запуске этого соединения будет запрошен логин и пароль и установлена сессия РРРоЕ. После этого становится возможен доступ в локальную сеть и Интернет. Пользователь идентифицируется по логину, паролю, МАС адресу (фиксируется при установлении первой сессии, поэтому важно первую сессию устанавливать со своего компьютера), IP адрес (назначается автоматически, но не меняется от сессии к сессии). Для Windows XP, где поддержка РРРоЕ встроена в ОС настройка сводится с созданию нового соединения, дополнительно устанавливать и настраивать специальное ПО не требуется.

Для ADSL настройка доступа через РРРоЕ производится следующим образом. Для USB ADSL модемов необходимо установить WAN драйвер модема. При этом будет создано соединение Dial-up через ADSL модем и нет необходимости устанавливать и настраивать программное обеспечение PPPoE клиентов, так как его роль выполняет ADSL оборудование. Чтобы установить РРРоЕ сессию необходимо ввести логин и пароль. Для модемов, имеющих Ethernet выход, через WEB интерфейс модема выбирается соединение через РРРоЕ, указывается логин и пароль. Сессия устанавливается модемом автоматически при подаче на него питания. Сетевой интерфейс компьютера настраивается на локальное подключение к ADSL модему (возможно использование встроенного в модем DHCP для автоматической настройки сетевой карты компьютера). При этом при включении компьютера автоматически устанавливается соединение с локальной сетью и Интернетом. Чтобы разорвать соединение, необходимо отключить питание модема или отключить сетевой интерфейс компьютера.

В стандартный состав дистрибутива Debian (и Ubuntu) входит утилита для настройки PPPoE соединений — pppoeconf. Для настройки PPPoE нам потребуются полномочия супер пользователя root (по сути администратора системы). Для этого вызовем команду pppoeconf через sudo (запуск команды от пользователя root).

В терминале (Приложения → Стандартные → Терминал, либо комбинацией клавиш Ctrl+Alt+T) набираем команду sudo pppoeconf :

yjdiX5TSB9gujVtY491Y

Для подтверждения запуска команду pppoeconf от супер пользователя root нас просят ввести пароль нашего непривилегированного пользователя. Вводим свой пароль и нажимаем клавишу Enter

Далее перед нами появляется непосредственно сама программа настройки соединения.

Она предлагает перезаписать текущие настройки (если они есть).

В большинстве случаев, нужно просто нажать “Да”. Мы так и сделаем — жмём “Да”.

Xrgbs3DMdCMZJ4VcnnFt

Следующий шаг — поиск сервера PPPoE-авторизации на каждом из сетевых устройств. Эта процедура обычно занимает несколько секунд. Если на этом этапе утилита pppoeconf выдаст отрицательный ответ — проверьте,

подключен ли кабель к вашей сетевой карте и так далее.

OXuJcaVRMmFKIKKezTzM

Далее у вас спросят, хотите ли вы использовать опции defaultroute (автоматически добавляет маршрут по умолчанию ) и noauth (не требовать от аутентификации PPPoE сервера) и удалить опцию nodetach. В большинстве случаев все эти действия необходимы для успешного подключения — отвечаем Да:

fHkbFdx508px4OhG08PM

Далее pppoeconf запросит у вас ваш PPPoE логин. Вам нужно будет ввести свой логин по договору.

Вводим и нажимаем “Ок”:

B9GJdfbZY1MGEnLOCjbe

Далее вводим пароль. И опять же — “Ок”. Будьте внимательны при вводе пароля. В случае ошибки вы сможете повторить настройку при помощи pppoeconf.

YHp2n71r8dhU3HPkdktn

В следующем диалоге выбираем «Да». Если вы знаете что это за параметры, можете настроить их под себя. Типичное значение MTU для нашей сети - 1480.

H1bkKJf400HSZ2oauXTj

Далее выбираем нужно ли автоматически подключаться к интернету, отвечаем «Да»:

crFEyROL2j9vVBZJfss0

Для проверки соединения нажимаем «Да»:

0ITCdDatIGtupIF0KOHp

Завершающий диалог, просто нажимаем «Ок»:

P4jeu7SuPEsJibHnuVGo

На этом настройка окончена. Теперь вы можете открыть ваш браузер и проверить всё ли работает. Так же вы можете убедится в успешном подключении через PPPoE введя в терминале команду plog :

5h5BSBLMJXN2A45lN93Z

Напоминаем, что вы в любой момент можете разорвать соединение командой sudo poff dsl-provider и установить соединение командой sudo pon dsl-provider .

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

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

2. Переводы 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-содеинений и сильно снизить нагрузку на центральный процессор.

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 впишем следующие строки:
eth0 - Ethernet-интерфейс, к которому подключен кабель от провайдера.
dsl-provider - имя файла в каталоге /etc/ppp/peers/ с настройками подключения к провайдеру.

Эти настройки заставят систему пытаться установить PPPoE-соединение сразу после загрузки компьютера. Чтобы соединение было успешно установлено, нужно прописать настройки в файле /etc/ppp/peers/dsl-provider. Настроить PPPoE-соединение можно одним из двух способов: с использованием описанного выше модуля rp-pppoe.so, работающего совместно с PPPoE-модулем ядра или используя pppoe-клиент, работающий в пространстве пользователя.

5. Настройка подключения с использованием модуля rp-pppoe.so

Сначала нужно убедиться, что ваше ядро имеет поддержку модуля PPPoE. Попробуем загрузить PPPoE-модуль ядра вручную:
Теперь посмотрим, существует ли файл /proc/net/pppoe. Если модуль был вкомпилирован в ядро статически или модуль успешно загрузился, то этот файл должен появиться. Если нет - нужно разбираться с конфигурацией вашего ядра. Не будем отвлекаться на это, поскольку подавляющее большинство современных дистрибутивов Linux позволяет загрузить этот модуль приведённой выше командой.

Теперь займёмся настройкой подключения. Для этого в файле /etc/ppp/peers/dsl-provider пропишем настройки подключения:

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

Теперь можно воспользоваться обычными для Debian командами pon для установки подключения и poff для закрытия подключения:
6. Настройка подключения с использованием pppoe-клиента, работающего в пространстве пользователя

Файл /etc/ppp/peers/dsl-provider в этом случае практически идентичен предыдущему, за исключением того, что теперь вместо опции plugin используется опция pty, запускающая программу-посредник pppoe:
Как и в предыдущем случае, для установки и закрытия подключения можно воспользоваться командами pon и poff:
За кадром остались настройка PPPoE-сервера и релея. Возможно я когда-нибудь за них возьмусь и дополню статью соответствующими разделами.

Есть доступ через PPPoE в Интернет,
через сетевую карту Intel.
В Win доступ в Интернет есть.

Поставил Debian Lenny.
Базовая установка.
+ Поставил pppoe и pppoeconf через aptitude
Подправил

/etc/ppp/peers/dsl-provider
user логин
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452"
noipdefault
usepeerdns
defaultroute
hide-password
lcp-echo-interval 20
lcp-echo-failure 3connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap

/etc/network/interfaces
auto lo
iface lo inet loopback
auto ppp0
iface ppp0 inet ppp
provider dsl-provider

eth0 Link encap:Ethernet HWaddr 00:a0:c9:a0:dd:ab
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2688 (2.6 KiB) TX bytes:2688 (2.6 KiB)

PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.049 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.042 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.050 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.047 ms
64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.044 ms
64 bytes from localhost (127.0.0.1): icmp_seq=6 ttl=64 time=0.049 ms
64 bytes from localhost (127.0.0.1): icmp_seq=7 ttl=64 time=0.043 ms
64 bytes from localhost (127.0.0.1): icmp_seq=8 ttl=64 time=0.048 ms
64 bytes from localhost (127.0.0.1): icmp_seq=9 ttl=64 time=0.045 ms
64 bytes from localhost (127.0.0.1): icmp_seq=10 ttl=64 time=0.043 ms
64 bytes from localhost (127.0.0.1): icmp_seq=11 ttl=64 time=0.045 ms
64 bytes from localhost (127.0.0.1): icmp_seq=12 ttl=64 time=0.041 ms
64 bytes from localhost (127.0.0.1): icmp_seq=13 ttl=64 time=0.044 ms
64 bytes from localhost (127.0.0.1): icmp_seq=14 ttl=64 time=0.046 ms
--- localhost ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 12998ms
rtt min/avg/max/mdev = 0.041/0.045/0.050/0.006 ms

Читайте также: