Условия задачи

Дано:

  1. Компьютер с установленной системой Debian Squeeze;
  2. Провайдер Интернет-услуг, предоставляющий доступ по PPPoE с выдачей локального или реального ip-адреса соединению пользователя;
  3. Транспортная сеть не используется и компьютер подключён непосредственно к xDSL-модему, работающему в режиме моста (Bridge);

Задача: настроить PPPoE-соединение для выхода в сеть Интернет через провайдера.
Уровень пользователя: средний, умеющий работать в консоли, с файловыми менеджерами и с текстовыми редакторами.
Решение:

Предполагается, что:

  • модем правильно настроен: работает в режиме моста и установлены параметры VPI и VCI;
  • для администрирования модем имеет адрес 192.168.1.1;
  • в компьютере установлена сетевая плата и именована как eth0 .

Для настройки PPPoE-соединения, провайдер должен выдать параметры этого соединения. Предположим они такие:

логин: UserName
пароль: user-007
тип аутентификации: CHAP, MS-CHAP
параметры TCP\IP: IP-адрес соединения, DNS-серверавыдаются провайдером автоматически
шифрование данных: нет
компрессия данных: нет

Шаг 1. Установка дополнительных пакетов

Доустанавливаем необходимые пакеты с зависимостями:

 # apt-get install pppoe

Так как доступа в Интернет ещё не имеется, установку пакетов делаем с компакт-дисков дистрибутива (содержится на первом DVD-диске) или скачиваем вручную с репозиториев сайта (для этого потребуются пакеты pppoe и ppp)

Шаг 2. Настройка сетевого адаптера

Если сетевой адаптер, который подключается к модему, ранее уже был настроен - пропускаем этот шаг.

Настроим сетевой адаптер, чтобы можно было заходить на модем и администрировать его посредством телнета или браузера. Ещё пользователю надо определиться, будет ли подключение стартовать при включении машины или только вручную.
Для начала определим, видит ли ядро сетевой адаптер, для чего вводим:

 
 # dmesg|grep eth0
 [[|   1.120454]] eth0: VIA Rhine III at 0x1e400, 01:a6:40:14:1f:a6, IRQ 17.
 [[|   1.121176]] eth0: MII PHY found at address 1, status 0x786d advertising 05e1 Link 45e1.
 [[|   9.113313]] via-rhine 0000:03:01.0: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
 [[|  19.968028]] eth0: no IPv6 routers present

Если в ответ появились подобные строки (достаточно первых двух), значит ядро определило адаптер и загрузило соответствующие модули для поддержки его работы. Если подобных строк вообще не появилось в ответ на ввод команды, значит либо адаптер отключен в БИОС`е (справедливо для сетевых карт, встроенных в материнскую плату) или ядро его не распознало. Проверьте включен ли адаптер в БИОС`е. Если ядро не распознаёт адаптер, придётся приобрести и вставить в PCI или PCI-X слот сетевую карту.

Когда вопрос с адаптером решён, останавливаем работу сети на машине:

 # /etc/init.d/networking stop

В текстовом редакторе, из под учётной записи root`а открываем файл /etc/network/interfaces и добавляем такие строки:

interfaces
  auto lo                   # строка уже должна присутствовать  
  iface lo inet loopback    # строка уже должна присутствовать  
 
 # Настройка адаптера ppp0
 allow-hotplug eth0
 iface eth0 inet static
	address 192.168.1.2
	netmask 255.255.255.0
	network 192.168.1.0
	broadcast 192.168.1.255
 auto eth0

Строки в секции ppp0 конфигурируют сетевую карту: дают ей адрес 192.168.1.2 и устанавливают режим автоинициализации при подключении кабеля (включении модема).

После внесения изменений сохраняем файл. Далее подключаем сетевой кабель, даём питание модему, убеждаемся что на адаптере и на модеме загорелись лампочки, индицирующие связь между устройствами. Теперь запускаем сеть:

 # /etc/init.d/networking start

Если всё прошло успешно, введя команду ifconfig должно быть что-то подобное:

# ifconfig
 eth0     Link encap:Ethernet  HWaddr 01:a6:40:14:1f:a6
          inet addr:192.168.1.2  Bcast:192.168.51.255  Mask:255.255.255.0
          inet6 addr: fe80::16d6:01a6:4014:1fa6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5363933 errors:0 dropped:3858 overruns:0 frame:0
          TX packets:9890505 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:416 (416 B)  TX bytes:192 (192 B)
          Interrupt:16 Base address:0xe800 

 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:12886 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12886 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:875393 (854.8 KiB)  TX bytes:875393 (854.8 KiB)

Если в секции eth0 есть нечто подобное, значит адаптер работает. Дополнительно это можно проверить пингуя модем. В данном случае, модем имеет адрес 192.168.1.1:

 $ ping 192.168.1.1
 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
 64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=4.84 ms
 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=3.37 ms
 64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=3.03 ms
 64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=2.88 ms
 ^C
 --- 192.168.1.1 ping statistics ---
 4 packets transmitted, 4 received, 0% packet loss, time 3004ms
 rtt min/avg/max/mdev = 2.888/3.536/4.849/0.779 ms

Для остановки процесса жмём Ctrl + C
Если присутствуют подобные строки, значит обмен между модемом и компьютером работает - можно продолжать дальнейшую настройку.

Шаг 3. Настройка PPPoE-соединения

Настройку непосредственно PPPoE-соединения можно выполнить через правку конфигурационных файлов или через программы с графическим интерфейсом, такие как Network Manager или KVpnc. Далее, в статье пойдёт речь о настройке соединения посредством правки конфигурационных файлов, как универсальный метод, не требующий доустановки кучи программ.

В каталоге /etc/ppp/peers создаём конфигурационный файл параметров соединения и назовём его для примера dsl-provider :

dsl-provider
user UserName
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452"
 
noipdefault
usepeerdns
defaultroute
 
holdoff 15
maxfail 0
 
hide-password
lcp-echo-interval 20
lcp-echo-failure 3
 
connect /bin/true
noauth
persist
mtu 1412
 
noaccomp
 
default-asyncmap
 
unit 0

Пояснения к параметрам:

user UserName указывает на логин, пароль к которому необходимо взять из файла /etc/ppp/chap-secrets
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" строка инициализации, вместо eth0 нужно указать адаптер, через который будет работать pppoe
noipdefault указывает, что ip-адрес выдаётся провайдером.
usepeerdns переключить параметры DNS-сервера с глобальных (/etc/resolv.conf) на те, что выдаёт провайдер при установке соединения. При завершении соединения, глобальные параметры возвращаются обратно.
defaultroute указывает устанавливать для компьютера основной маршрут, выдаваемый провайдером для PPPoE-соединения
holdoff 15 пауза между попытками (требуется для завершения всех процессов на стороне провайдера, если разрыв произошёл аварийно
maxfail 0 количество попыток восстановить соединение, 0 - пробовать бесконечно
hide-password скрывать пароль из записей лога
lcp-echo-interval 20 интервал между тестами канала на работоспособность, секунд
lcp-echo-failure 3 это количество попыток проверки работоспособности канала, после которого соединение отключается, в случае, если проверка оказалась неуспешной
connect /bin/true разрешить соединение
noauth строка запрещает использовать обратную аутентификацию
persist после аварийного разрыва канала, всё-равно пытаться создать соединение
mtu 1412 уменьшать размеры передаваемых в Интернет сетевых пакетов до 1412 байт.
noaccomp не сжимать адреса в канале
default-asyncmap
unit 0 порядковый номер идентификатора соединения (циферка после ppp, например ppp0)

Если провайдер использует другой тип аутентификации нежели CHAP\MS-CHAP - почитайте man pppd на предмет опций: require-mschap, require-chap, require-pap.

Теперь открываем и редактируем файл паролей /etc/ppp/chap-secrets и вводим в него логин и пароль для соединения:

chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"UserName" * "user-007"

Не помешает дать права на чтение файлу /etc/ppp/chap-secrets только для root`а, если таковые ещё не установлены:

 # chmod 600 /etc/ppp/chap-secrets

Опробование соединения и диагностика

Когда всё настроено, пробуем запустить соединение командой pon от имени root`а:

 # pon dsl-provider

Здесь dsl-provider - это имя, которое дали файлу настроек соединения /etc/ppp/peers/dsl-provider.
Через несколько секунд, проверяем что соединение активно, командой ifconfig. Кроме секций lo и eth0 должна появиться секция ppp0, примерно так:

 ...
 ppp0      Link encap:Point-to-Point Protocol  
           inet addr:10.10.142.16  P-t-P:10.10.0.1  Mask:255.255.255.255
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1412  Metric:1
           RX packets:304 errors:0 dropped:0 overruns:0 frame:0
           TX packets:542 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:30 
           RX bytes:64800 (43.2 KiB)  TX bytes:193600 (129.0 KiB)
 ...

Если такой секции не появилось, то изучаем лог-файлы /var/log/daemon и /var/log/syslog в поисках причины неработоспособности.

Для разрыва соединения используем команду poff:

 # poff dsl-provider

Дополнительно

Тонкости, которые могут пригодиться в работе.

Управление соединением без прав root`а

Когда соединение настроено и проверено, нужно сконфигурировать операционную систему так, чтобы запускать соединение не от имени учётной записи root`а, а от имени обычного пользователя. Здесь поможет статья Настройка sudo - отредактируйте файл /etc/sudoers до примерно такого вида:

sudoers
root ALL=(ALL) ALL 
Host_Alias LOCALHOST = localhost, compname
username LOCALHOST = NOPASSWD: /usr/bin/poff, /usr/bin/pon

, где вместо compname - подставьте своё имя компьютера, username - имя пользователя, который будет манипулировать VPN-соединением.

Автостарт соединения при загрузке операционной системы

Если кто хочет, чтобы PPPoE-соединение автоматически запускалось при включении машины, в конец файла /etc/network/interfaces, нужно добавить такие строки:

interfaces
auto dsl-provider
iface dsl-provider inet ppp

, где dsl-provider - имя нашего pppoe-соединения.

Смотрите также

Печать/экспорт