Linux Slackware Энциклопедия от А до Я
Сайт посвящен свободно распространяемому ПО и Linux Slackware в частности.
Разделы:
Раздел/Тема
Главная -> Настройка -> PPPoE - подключаемся к интернету

Переехал я недавно на новую квартиру и подклчился к домовой сети, и, как результат, остро стал вопрос настройки PPPoE соединения, для доступа к интернету.

Итак посмотрим, что нам может предложить Slackware.

    Сначала актив:
  • у нас есть пакет rp-pppoe
  • он отлично работает

А пасив состоит в том, что скрипты загрузки не умеют работать с pppoe интерфейсами.

Ну растраиваться тут нечего: будем решать, проблемы по мере их поступления.

Итак ставим пакет rp-pppoe:

# installpkg rp-pppoe

Теперь у нас появилась куча интерестных бинарников и скриптов (дело в том что этот пакет содержит не только клиента PPPoE, но и сервер):

# ls /usr/sbin/*pppoe*
/usr/sbin/pppoe*          /usr/sbin/pppoe-discovery*  /usr/sbin/pppoe-server*  /usr/sbin/pppoe-sniff*  /usr/sbin/pppoe-status*
/usr/sbin/pppoe-connect*  /usr/sbin/pppoe-relay*      /usr/sbin/pppoe-setup*   /usr/sbin/pppoe-start*  /usr/sbin/pppoe-stop*

    Но по большому счёту нас интересуют только следущие
  • pppoe-setup - настройка клиента;
  • pppoe-start - инициализация соединения с сервером;
  • pppoe-stop - обрыв соединения;
  • pppoe-status - текущий статус.

Итак попробуем всем этим воспользоваться.

Для начала настроим соединение (просто запускаем pppoe-setup и отвечаем на вопросы):

root@YodaSlack:/home/toshach# pppoe-setup
Welcome to the Roaring Penguin PPPoE client setup.  First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...

Looks good!  Now, please enter some information:

USER NAME

>>> Enter your PPPoE user name (default ppp04920): ppp04920

INTERFACE

>>> Enter the Ethernet interface connected to the DSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0):

Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped.  If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses.  You may have some problems with demand-activated links.
>>> Enter the demand value (default no):

DNS

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
>>> Enter the DNS information here: server

PASSWORD

>>> Please enter your PPPoE password:
>>> Please re-enter your PPPoE password:

FIREWALLING

Please choose the firewall rules to use.  Note that these rules are
very basic.  You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security.  If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself.  Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc.  If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.

The firewall choices are:
0 - NONE: This script will not set any firewall rules.  You are responsible
          for ensuring the security of your machine.  You are STRONGLY
          recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
                for a LAN
>>> Choose a type of firewall (0-2): 0

** Summary of what you entered **

Ethernet Interface: eth0
User name:          ppp04920
Activate-on-demand: No
DNS addresses:      Supplied by ISP's server
Firewalling:        NONE

>>> Accept these settings and adjust configuration files (y/n)? y
Adjusting /etc/ppp/pppoe.conf
Adjusting /etc/ppp/pap-secrets and /etc/ppp/chap-secrets
  (But first backing it up to /etc/ppp/pap-secrets-bak)
  (But first backing it up to /etc/ppp/chap-secrets-bak)



Congratulations, it should be all set up!

Type 'pppoe-start' to bring up your PPPoE link and 'pppoe-stop' to bring
it down.  Type 'pppoe-status' to see the link status.

    В целом здесь всё довольно очевидно и хорошо объяснено, но всё же для тех кто не дружит с англиским, я объясню о чём тут собственно речь:
  • USER NAME - это имя pppoe пользователя (выдаётся провайдером)
  • INTERFACE - физический интерфейс (устройство), через которую проиходит коннект к провайдеру (это может быть, и сетевуха, и ADSL модем, и WiFi, и ещё чего-нить). В моём случае это сетевая карта eth0.
  • demand value - pppoe довольно умная штука и умеет не отваливаться в случае кратковременных сбоев на линии. Правда это должно быть разрешено на сервере. Но у меня локалка на витой паре, а как показывает практика уж если оно падает, то на долго. Поэтому я поставил no, в противном случае надо выставить время в течении которого соединение не будет разрываться.
  • DNS - адреса ДНС серверов в сети (если они есть конечно). Можно написать ключевое слово server (что я и сделал), в этом случае pppoe попытается захавать адреса автоматически (примерно как DHCP).
  • PASSWORD - ну тут комментарии излишни: пароль и в африке пароль (выдаётся провайдером)
  • FIREWALLING - тип настройки файрвола. Если выбрать 1 или 2, то pppoe-setup попытается сконфигурить ваш файрвол. От греха подальше поставим 0 - лучше потом ручками рульки настроим (это пожалуй тема отдельной статьи).

Теперь если мы посмотрим файл /etc/ppp/pppoe.conf, то увидим всё наши ответы (кроме паролей конечно) и можем чего-нить изменить. Есть там и ряд дополнительных параметров, но играться с ними в большинстве случаев не смысла, вот и я не буду.

Теперь как нам посоветовал скрипт pppoe-setup запустим другой скрипт:

root@YodaSlack:/home/toshach# pppoe-start
. Connected!

Говорит что законектилось. Проверим.

root@YodaSlack:/home/toshach# ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol
          inet addr:213.24.21.222  P-t-P:213.24.21.73  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:205 (205.0 b)  TX bytes:79 (79.0 b)

И правда. Законектилось, создало виртуальный интерфейс ppp0 и отхватило ip 213.24.21.222. Только в инет почему-то не ходит :(.

А проблема в том что у нас не настрены правила роутинга:

root@YodaSlack:/home/toshach# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
213.24.21.73    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
213.24.20.138   192.168.1.2     255.255.255.254 UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.1.5     0.0.0.0         UG    0      0        0 eth0

Как мы видим default getway у нас по прежнему настроен на eth0 интерфейс. Чтож исправим этот недостаток (правда для этого надо узнать адрес гейтвэя у ваше провайдера, а они иногда партизанят :) - в моём случае это 213.24.21.77):

root@YodaSlack:~# route add 213.24.21.77 ppp0
root@YodaSlack:~# route add default gw 213.24.21.77
root@YodaSlack:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
213.24.21.77    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
213.24.21.73    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
213.24.20.138   192.168.1.2     255.255.255.254 UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         213.24.21.77    0.0.0.0         UG    0      0        0 ppp0 

Итак роутинг настроили, пробуем DNS (как вы поните я попробовал автоматическую конфигурацию).

root@YodaSlack:~# nslookup www.slackware.pp.ru
Server:         213.24.21.77
Address:        213.24.21.77#53

Non-authoritative answer:
www.slackware.pp.ru     canonical name = slackware.hopto.org.
Name:   slackware.hopto.org
Address: 85.21.236.20

Отлично. Всё работает. Теперь задача поинтерестнее: надо сделать автоматичскую конфигурацию всего этого добра. Как я уже сказал слаковские скрипты не умеют работать с pppoe интерфейсом (в отличии от например ppp). Щас будем их учить.

    Итак что нам нужно добится от скриптов:
  • автоматический запуск pppoe-start
  • проверка того что соединение удачно
  • настройка роутинга
  • остановка с помощью pppoe-stop
    Есть два пути решения проблемы:
  • переписать скрипт /etc/rc.d/rc.inet1 и файл /etc/rc.d/rc.inet1.conf - наверное самый хороший вариант, но слабо переносимый от версии к версии
  • написать свой собственный скрипт - как раз то что нужно.

Я пошёл по второму пути и вот что у меня получилось: rc.pppoe

Однако небольшое исправление в слаковские скрипты придется внести Чтобы интерфейс у нас поднимался вовремя его надо будет запускать сразу после rc.inet1 из rc.M.

vim /etc/rc.d/rc.M

# Initialize the networking hardware.
if [ -x /etc/rc.d/rc.inet1 ]; then
  . /etc/rc.d/rc.inet1
fi

# Initialize the pppoe interface.
if [ -x /etc/rc.d/rc.pppoe ]; then
  . /etc/rc.d/rc.pppoe start
fi

Вот и все: pppoe настроено.

Yoda 28.06.2007