Переехал я недавно на новую квартиру и подклчился к домовой сети, и, как результат, остро стал вопрос настройки 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 настроено.