Linux32 - Блог



LINUX32

Свобода выбирать


ArchLinux
Блог >> 2014 >> Декабрь


21.12.2014

Проводной Beeline. Часть 3




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

Теперь подробнее. Для настройки понадобятся всего два пакета: dhcpcd и xl2tpd. Первый обычно поставляется по умолчанию в большинстве дистрибутивов Linux, второй, вместе с его зависимостями, необходимо скачать найдя где-нибудь машину с подключенным интернетом.

В теории, чтобы получить интернет от билайна должны выполниться следующие условия:

• получить от провайдера IP-адрес и адреса для таблицы маршрутизации (опционально);

• поднять VPN-туннель;

• установить маршрут до VPN-туннеля маршрутом по умолчанию.

Для выполнения первого условия предназначен пакет dhcpcd. Благодаря Natrio (огромное ему спасибо, кстати), участнику русскоязычного форума Archlinux я немного разобрался с опциями dhcpcd, которые прописываются в файле /etc/dhcpcd.conf. По умолчанию в Archlinux'е в этом файле есть такая строка с опциями получения необходимых маршрутов от dhcp-сервера:

option classless_static_routes


При этом IP-адрес от провайдера компьютер получает, то есть выполняется первое условие, но не получает маршрута по умолчанию, через который мы бы видели VPN сревер билайна (с именем tp.internet.beeline.ru), следовательно второе условие мы выполнить не сможем. Логично: как мы поднимем VPN-туннель, если мы не видим VPN-сервер. Но если в файле dhcpcd.conf привести указанную выше строку к такому виду:

option routers


То мы сможем получить и IP-адрес, и маршрут по умолчанию. Казалось бы, то что нам нужно. Я тоже так думал, но при попытке поднять VPN-туннель демон pppd вешает всю систему намертво. Помогает только ребут с кнопки системного блока. Какие только опции в настройках l2tp я не менял, добиться отсутствия зависаний не вышло. Возможно у вас получится и я приглашаю поделиться рабочим вариантом настройки в комментариях. А пока предложу свой вариант.

Так как с опцией routers в dhcpcd.conf мы получаем маршрут по умолчанию, но компьютер при этом виснет, поэтому уберем ее оттуда (то есть приведем файл /etc/dhcpcd.conf к первоначальному виду), но перед этим узнаем этот самый маршрут по умолчанию.

Да, кстати, после смены опций в dhcpcd.conf service dhcpcd@eth0.service необходимо перезапустить чтобы изменения вступили в силу. Сделать это можно либо перезагрузив компьютер, либо выполнив в терминале по очереди следующие команды:

systemctl stop dhcpcd@eth0
ip r flush all
ifconfig eth0 down
systemctl start dhcpcd@eth0


Все команды выполняются от рута.

Итак, мы изменили опции в dhcpcd.conf чтобы получить маршрут по умолчанию. Вводим в терминале команду:

route | grep ^default | awk '{print $2}' > default_route.txt


И получаем файл default_route.txt с нужным нам маршрутом в папке откуда запустили данную команду.

Теперь возвращаем файл /etc/dhcpcd.conf к первоначальному виду, перезапускаем dhcpcd@eth0.service и обнуляем таблицу маршрутизации четырмя, указанными выше командами. Замечу, что все команды здесь применимы для сетевого интерфейса с именем eth0, если имя вашего интерфейса отличается, то после значка @ нужно ввести свое.

Теперь, зная маршрут по умолчанию, у меня, например, он такой: 10.190.216.1, идем в папку /etc/ppp и создаем в ней файл add-beeline-routes с таким содержимым:

#!/bin/bash
GW=10.190.216.1
for new_route in $(cat /etc/resolv.conf | grep nameserver | awk '{print $2}');
do
route add -host $new_route gw $GW
done
route add -host tp.internet.beeline.ru gw $GW


Этот файл будет добавлять маршруты до DNS-серверов, указанных в файле /etc/resolv.conf (который заполняется при старте dhcp-клиента) и маршрут до tp.internet.beeline.ru, то есть выполнять первое из необходимых условий.

Делаем его исполняемым:

chmod +x /etc/ppp/add-beeline-routes


В папке /etc/xl2tpd создаем файл xl2tpd.conf со следующим содержимым:

[global]
access control = yes
auth file = /etc/ppp/chap-secrets
[lac beeline]
lns = tp.internet.beeline.ru
redial = yes
redial timeout = 5
require chap = yes
require authentication = no
name = <логин_beeline>
ppp debug = yes
pppoptfile = /etc/ppp/peers/options.l2tpd
require pap = no
autodial = yes
tx bps = 100000000


Где <логин_beeline> - соответственно ваш логин, выданный билайном. Идем в папку /etc/ppp/peers и создаем файл options.l2tpd с таким содержимым:

lcp-echo-interval 10
lcp-echo-failure 2
name <логин_beeline>
remotename l2tp
ipparam corbina
connect /bin/true
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
noauth
noproxyarp


С полем <логин_beeline> поступаем аналогично предыдущему файлу. Далее идем на одну папку выше, то есть в /etc/ppp и в файл chap-secrets заносим свои логин и пароль от билайн-интернета. В итоге файл должен выглядеть примерно так:

# Secrets for authentication using CHAP
# client server secret IP addresses
<ваш_логин> * <ваш_пароль>


Что делать с полями <ваш_логин> и <ваш_пароль> думаю понятно, отмечу только что кавычки не нужны.

С помощью всех этих файлов поднимается VPN-туннель, то есть выполняется второе условие.

Далее, идем в папку /etc/ppp/ip-up.d и создаем в ней файл 10-beeline-start.sh с таким содержимым:

#!/bin/sh
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
route del default
route add default dev ppp0
(
echo '#!/bin/sh'
echo 'PATH="/sbin:/bin:/usr/sbin:/usr/bin"'
echo 'route del default'
echo "route add default dev eth0"
) >/etc/ppp/ip-down.d/10-beeline-stop.sh
chmod +x /etc/ppp/ip-down.d/10-beeline-stop.sh


Также делаем его исполняемым:

chmod +x /etc/ppp/ip-up.d/10-beeline-start.sh


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

Теперь последний штрих: идем в папку /etc/systemd/system и создаем файл add-beeline-routes.service следующего содержания:

[Unit]
Description=Add beeline routes
After=network.target
After=dhcpcd.service

[Service]
Type=forking
ExecStart=/usr/bin/sh /etc/ppp/add-beeline-routes

[Install]
WantedBy=multi-user.target


И файл xl2tpd.service такого содержания:

.include /usr/lib/systemd/system/xl2tpd.service

[Unit]
After=add-beeline-routes.service


Теперь осталось только добавить эти сервисы в автозагрузку:

systemctl enable add-beeline-routes
systemctl enable xl2tpd


И перезагрузиться. Не забудьте также убедиться что и сервис dhcpcd@eth0 загружается при старте системы.

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

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

Статья


Ваш комментарий:

Имя:
E-mail:
Код с картинки:
Комментарий: