Настраиваем PPPoE в (K)Ubuntu

Сегодня все больше пользователей переходят на высокоскоростное соединение с Интернет, благо цены на эти услуги стали вполне демократичными. При этом для организации соединения и аутендификации используется протокол PPPoE (Point-to-Point Protocol over Ethernet). В котором PPP фреймы заключены в фреймы Ethernet. Подробнее протокол описан в RFC 2516. Наша же задача разобраться, как настроить GNU/Linux для работы с PPPoE, на примере дистрибутива KUbuntu.

Поддержка этого протокола появилась уже давно, еще в ядре Linux, начиная с версии 2.3. Поэтому в сегодняшних дистрибутивах пересобирать ядро или махать напильником не придется. Вся работа реализована подобно обычному PPP используемого при модемном соединение с использованием pppd. Для установки PPPoE соединения потребуется наличие в системе следующих пакетов ppp, pppoe, pppoeconf. По умолчанию в Ubuntu они уже установлены, проверить правильность их установки, можно введя.

$ dpkg -s pppoeconf

Если будет выведено.

Package: pppoeconf

Status: install ok installed

Значит все в порядке.


Следующим шагом настраиваем Ethernet интерфейс. Можно воспользоваться графическими утилитами, через K->System Setting -> Network settings -> Add -> Ethernet -> Manual. А можно и вручную, для этого открываем файл /etc/network/interfaces.

$ gksudo kate /etc/network/interfaces&

Если IP-адрес назначается динамически с помощью DHCP, то так и пишем.

iface eth0 inet dhcp

Если адрес устанавливается статически, то строка выглядит примерно так.

iface eth0 inet static

address 192.168.1.58

network 192.168.1.0

gateway 192.168.1.1

netmask 255.255.255.0

mtu 1492

Далее обязательно указываем в файле /etc/resolv.conf адрес хотя бы одного DNS сервера. Если на сайте провайдера не даны эти данные, то его очень просто узнать и самому используя что то вроде nslookup www.microsoft.com

Server: relay4.uar.net

Address: 194.44.212.131

В ответе будет содержаться такая строка, которая и показывает используемый при запросе DNS сервер. Его и вписываем в resolv.conf.

nameserver 194.44.212.131

nameserver 207.46.225.60

Теперь переходим непосредственно к настройке клиентского PPPoE соединения. В принципе для этого понадобится залезть в два файла: /etc/ppp/pap-secrets и /etc/ppp/peers/dsl-provider. Последний файл впрочем, может иметь любое имя. Но прежде, чем редактировать его вручную попробуйте настроить с помощью утилиты pppoeconf.

$ sudo pppoeconf

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


Дело в том, что по спецификации PPPoE есть две стадии: поиска и сессии. В процессе поиска используются специальные пакеты PADI (PPPoE Active Discovery Initiation) с помощью которых идет поиск активных концентраторов доступа. Вот это и пытается сделать pppoeconf. Правда, в моем случае это не помогло, но это не страшно. Далее утилита предлагает сохранить оригинальный файл dsl-provider, можно и согласиться. На этапе POPULAR OPTION в этот файл можно занести наиболее, часто используемые опции. Наша задача сначала настроить, а может сразу и заработает, а шлифовкой лучше заняться потом, поэтому нажимаем Yes. На следующих двух шагах вводим логин и пароль. Далее утилита спрашивает, что делать с параметром MSS и предлагает значение 1452. После этого можно установить автоматическое соединение при загрузке системы и все.

Уголок маньяка

Параметр MTU (Maximum Transmit Unit) отвечает за максимальный размер пакета. Если он не указать принудительно, оно будет выставлено автоматически и не всегда рационально. Хотя это актуально, как правило, до первого маршрутизатора. Если размер пакета будет большим, чем пропустит маршутизатор, он будет разделен, что сразу же скажется на скорости и пропускной способности. Если меньше, то опять же канал будет использован не рационально, так как будут проходить полупустые кадры. Хотя применительно к PPPoE приходится учитывать несколько обстоятельств. Так максимальный размер Ethernet фрейма равен 1518 байт, из них 14 идет на заголовок и 4 на контроль. На полезную нагрузку осталось ровно 1500 байт, это наибольшая IP-датаграмма которая может передаваться через интерфейс без фрагментации. Поэтому значение обычно и указывают для Ethernet. Далее PPPoE отбирает еще 6 байт, а PPP – 2. В итоге значение MTU для PPPoE должно составлять уже не более 1492. При установлении TCP соединения каждая сторона опционально устанавливает и параметр Maximum Segment Size (MSS) указывающий максимальный TCP сегмент. По умолчанию его значение берется как MTU для исходящего интерфейса минус размер заголовков TCP и IP то есть 40. Исходя из этого, максимальное значение MSS для Ethernet будет равняться 1460, а для PPPoE – 1452. Вот отсюда и взялась эта цифра.

Выход из уголка

Знакомимся с конфигурационными файлами.

Когда утилита pppoeconf отработала, можно пробовать соединиться с Интернет.

$ sudo pon dsl-provider

В моем случае чуда не произошло и пришлось лезть в конфигурационные файлы. Файл /etc/ppp/pap-secrets содержит имя пользователя и пароль для соединения.

user * password

Здесь достаточно проверить правильность введенных данных. Все параметры соединения записаны в /etc/ppp/peers/dsl-provider. После настройки он у меня имел такой вид.

noipdefault

defaultroute

replacedefaultroute

hide-password

#lcp-echo-interval 30

#lcp-echo-failure 4

noauth

persist

#mtu 1492

usepeerdns

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

pty “/usr/sbin/pppoe -I eth0 -T 80 -m 1452″

Кстати если заглянуть в /etc/network/interfaces, то можно заметить и появление следующих строк.

auto dsl-provider

iface dsl-provider inet ppp

provider dsl-provider


# added by pppoeconf

auto eth0

iface eth0 inet manual

pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf

Если не хотите, чтобы PPPoE поднимался автоматически при загрузке системы, просто закомментируйте эти строки.

Теперь можно повторить попытку соединения. На этот разу все получилось. Для контроля можно ввести команду.


$ ifconfig ppp0

ppp0 Link encap:Point-to-Point Protocol

inet addr:194.23.7.135 P-t-P:192.168.101.1 Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1480 Metric:1

RX packets:183 errors:0 dropped:0 overruns:0 frame:0

TX packets:184 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:3

RX bytes:19768 (19.3 KiB) TX bytes:2744 (2.6 KiB)

И просмотреть за ходом соединения в системном журнале /var/log/messages.

Aug 27 13:19:41 localhost — MARK –

Aug 27 13:22:45 localhost pppd[5890]: Plugin rp-pppoe.so loaded.

Aug 27 13:22:45 localhost pppd[5892]: pppd 2.4.4b1 started by root, uid 0

Aug 27 13:22:45 localhost pppd[5892]: Using interface ppp0

Aug 27 13:22:45 localhost pppd[5892]: Connect: ppp0 <–> /dev/pts/9

Aug 27 13:22:46 localhost pppd[5892]: CHAP authentication succeeded

Aug 27 13:22:46 localhost kernel: [ 3902.440673] PPP BSD Compression module registered

Aug 27 13:22:46 localhost pppd[5892]: replacing old default route to eth0 [192.168.1.1]

Aug 27 13:22:46 localhost pppd[5892]: local IP address 194.23.7.135

Aug 27 13:22:46 localhost pppd[5892]: remote IP address 192.168.101.1

Aug 27 13:22:46 localhost pppd[5892]: primary DNS address 194.44.212.131




Бывает ситуация когда адрес получен вроде все нормально, но доступ к ресурсам получить невозможно. В этом случае следует просмотреть еще и таблицу маршрутизации route –n. Например, в VectorLinux почему то маршрут по умолчанию никак не хотел устанавливаться через ppp0. И это мне после соединения приходилось делать принудительно, вводя команду route add default ppp0.

Пакет rp-pppoe

В некоторых дистрибутивах, например VectorLinux можно настраивать PPPoE описанным выше образом, но есть более простой вариант. И все потому, что у них используется пакет RP-PPPoE. Ничего не мешает вам самим его установить, последнюю версию которого можно скачать по ссылке http://www.roaringpenguin.com/penguin/pppoe/rp-pppoe-3.8.tar.gz. Установка проста до безобразия. Распаковываете архив и выбираете go-gui или просто go, если не будет работать первая команда. Далее вам следует ответить на те же вопросы, что при использовании pppoeconf т.е. имя пользователя, интерфейс, активация при загрузке, DNS, пароль, настройки межсетевого экрана. В последнем случае предлагается на выбор три варианта: NONE (отключен), STANDALONE (используем в том случае когда компьютер один) и MASQUERADE (когда компьютер используетсяя в качестве сетевого шлюза). По окончании работы скрипта выводится итог.

** Summary of what you entered **


Ethernet Interface: eth1

User name: grinder

Activate-on-demand: No

Primary DNS: 194.44.212.131

Secondary DNS: 207.46.225.60

Firewalling: STANDALONE

На этом собственно вся установка и закончена. В системе появится еще несколько скриптов и утилит: pppoe-relay, pppoe-setup, pppoe-start, pppoe-stop, pppoe-connect, pppoe-server, pppoe-sniff, pppoe-status, pppoe-wrapper и tkpppoe. Кстати в до 3.6 версии эти скрипты имели другую приставку в имени, adsl поэтому в более ранних дистрибутивах вполне вероятно встретите другое название утилит.

Для того чтобы инициировать соединение, достаточно набрать pppoe-start, остановить pppoe-stop, просмотреть статистику pppoe-status, запустить заново конфигурационный скрипт pppoe-setup. Но все это можно сделать с помощью графического фрон-енда tkpppoe. Просто вызываем ее, заполняем параметры во всех вкладках, затем нажимаем Start.

Все довольно просто. Linux forever!

Источник: www.tux.in.ua



Комментарии

Популярные сообщения из этого блога

Марк Шаттлворт

Linux Mint Росинка

Измерения в байтах