Beeline, L2TP на сервере и VPN
Этот гайд был написан в 2014 году и может не отражать текущее положение вещей!
В связи с моим переездом в Екатеринбург, у меня сменился провайдер интернетов. Так как тут не было подключено ни одного годного ethernet-провайдера, а был всего-лишь пчелайн с очень неприятным L2TP, пришлось искать способы настроить мой “сервер” (хотя на самом деле это ноутбук за 8 тысяч) для раздачи интернета. Итак-с…
Первое, что стоит запомнить - инструкции в интернете, в большинстве своем, очень неполные. А для дебиана я вообще не смог найти ничего удобоваримого. Практически все инструкции были про PPTP-соединение, которое на относительно новых тарифах недоступно. Единственная более-менее годная инструкция для настройки L2TP-соединения предназначена для CentOS, которую я не держу у себя на сервере. Но она послужила отправной точкой для раскапывания годных параметров.
Подготовка.
Для начала нам необходимо выяснить:
- Адреса DNS-серверов. У меня они находились в подсети
172.18.49.0/24
. - Подсеть PPP-шлюза. Именно подсеть, потому что пчелайн любит делать гейты на сразу нескольких IP-адресах, видимо, для балансировки нагрузки. У меня это
172.18.48.0/24
. - Гейтвей для eth0, то есть для локальной сети. У меня это
10.124.81.1
.
ACHTUNG: эти параметры сугубо специфичны для района проживания!
В Linux это можно выяснить с помощью команды route
или ip r
. Тут был DIR-300 с пчелайновской прошивкой, который выдал мне вот это:
Первая строчка как раз и обозначала текущий PPP-шлюз.
Адреса DNS я выяснил «методом DHCP», то есть я получил в Linux настройки интернета, а потом сделал cat /etc/resolv.conf
. Это были адреса 172.18.49.10
и 172.18.49.18
.
Настройка xl2tpd и pppd.
Приводим /etc/xl2tpd/xl2tpd.conf
к такому виду:
[global]
access control = yes
[lac beeline]
lns = tp.internet.beeline.ru
redial = yes
redial timeout = 1
require chap = yes
require authentication = no
name = YOUR_USERNAME
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
require pap = no
autodial = yes
tx bps = 100000000
flow bit = no
Вместо YOUR_USERNAME
нужно подставить имя пользователя.
Теперь /etc/ppp/options.xl2tpd
:
asyncmap 0000
name YOUR_USERNAME
remotename l2tp
ipparam beeline
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
persist
maxfail 0
nopcomp
noaccomp
noauth
novj
novjccomp
noipx
nomp
refuse-eap
refuse-pap
unit 0
replacedefaultroute
defaultroute
Роутинг.
Теперь самое время запилить шелл-скриптики, которые будут добавлять нужные нам роуты. Делаем /etc/ppp/ip-up.d/beeline
, который будет настраивать нам роуты при поднятии соединения:
#!/bin/bash
ip r a 172.18.49.0/24 via 10.124.81.1 dev eth0 # DNS
ip r a 172.18.48.0/24 via 10.124.81.1 dev eth0 # PPP-gateway
ip r a 10.0.0.0/8 via 10.124.81.1 dev eth0 # Local network
ip r d $5 dev $1
ip r d default dev eth0
ip r d default dev eth0
ip r a default dev $1 # Гейтвей по-умолчанию должен быть ppp0
Заменяем подсети и гейтвей на свои.
Тут у меня 2 раза удаляется дефолтный роут через eth0
, так как он, зачем-то, опять добавлялся при установке соединения.
Далее сохраним этот файл и дадим ему бит исполняемости (chmod +x
).
Теперь восстановление роутов при падении или отключении соединения, файл /etc/ppp/ip-down.d/beeline
:
#!/bin/bash
route del $5
route del default
route add default gw 10.124.81.1
Заменяем гейтвей на свой. Не забываем сделать chmod +x /etc/ppp/ip-down.d/beeline
.
Проверка.
Запускаем xl2tpd:
# Service xl2tpd start
Если все пройдет хорошо - то у вас последнее в /var/log/daemon.log
от xl2tpd
будет что-то вроде такого:
Apr 29 13:33:49 eburg xl2tpd[2731]: Connecting to host tp.internet.beeline.ru, port 1701
Apr 29 13:33:49 eburg xl2tpd[2731]: Connection established to 172.18.48.171, 1701. Local: 31861, Remote: 56245 (ref=0/0).
Apr 29 13:33:49 eburg xl2tpd[2731]: Calling on tunnel 31861
Apr 29 13:33:49 eburg xl2tpd[2731]: Call established with 172.18.48.171, Local: 12300, Remote: 31248, Serial: 12 (ref=0/0)
Apr 29 13:33:49 eburg xl2tpd[2731]: start_pppd: I'm running:
Apr 29 13:33:49 eburg xl2tpd[2731]: "/usr/sbin/pppd"
Apr 29 13:33:49 eburg xl2tpd[2731]: "passive"
Apr 29 13:33:49 eburg xl2tpd[2731]: "nodetach"
Apr 29 13:33:49 eburg xl2tpd[2731]: ":"
Apr 29 13:33:49 eburg xl2tpd[2731]: "name"
Apr 29 13:33:49 eburg xl2tpd[2731]: "YOUR_USERNAME"
Apr 29 13:33:49 eburg xl2tpd[2731]: "debug"
Apr 29 13:33:49 eburg xl2tpd[2731]: "file"
Apr 29 13:33:49 eburg xl2tpd[2731]: "/etc/ppp/options.xl2tpd"
Apr 29 13:33:49 eburg xl2tpd[2731]: "/dev/pts/0"
Если после этого начинают сыпать строчки вида:
Apr 28 10:15:57 eburg xl2tpd[2731]: Can not find tunnel 17161 (refhim=0)
Apr 28 10:15:57 eburg xl2tpd[2731]: network_thread: unable to find call or tunnel to handle packet. call = 60961, tunnel = 17161 Dumping.
то это значит, что вы напортачили с роутингом. Скорее всего, вы прописали плохие роуты для PPP-подсети.
Пара слов о VPN.
Для подключения по SSH к своим серверам я использую только свой VPN. Спасибо L2TP, VPN over TCP работал… Ну, никак он не работал. Я пробовал играться и с MTU, и с опциями, но так и не смог заставить работать и не рвать соединение через 10 секунд-10 минут. Я не стал углубляться в причины этой фигни, и поэтому просто перевел свой VPN на использование UDP. Соединение держится уже третий день подряд. Из минусов - иногда не грузятся сайты, и приходится много раз жмякать F5, чтобы оно загрузилось, спасибо UDP.
Не стоит мне говорить, что VPN over TCP имеет большой оверхед по производительности. Я это знаю. Просто с TCP пакетики не терялись, какая бы плохая сеть не была, хоть 3G.