Страницы

четверг, 15 марта 2012 г.

Настройка Билайн Интернет в Ubuntu 12.04 на HP ProLiant MicroServer

Заметка по настройке сети Билайн-Интернет (быв. Корбина-Интернет) в Петербурге
Пошаговый, ручной способ, для лучшего понимания взаимодействия частей.
Девиз: пакет не знаешь куда идти? - иди на шлюз по умолчанию.

Чистый установленный сервер Ubuntu 12.04.
В принципе. методика применима к серверу Ubuntu 11.10, Ubuntu 11.04, Ubuntu 10.10.
Железо: HP Proliant Microserver, версия N40L.
Сервер будет использоваться как роутер домашней сети, сервер резервирования, сервер разработки.
 Т.к. сеть интернет недоступна из коробки, ее надо настроить. Сервер устанавливался с образа на флешке, подготовленного встроенным в Ubuntu средством "Создание загрузочного диска".
Сложностью здесь может быть то, что требуемые пакеты для нормальной работы Билайн-Интернет, надо скачивать из сети Интернет.

Требуются пакеты:
1. Для PPTP VPN - pptp-linux
2. Для L2TP VPN - xl2tpd

Я обошел эту проблему первоначальным временным подключением сервера к обычному настольному компьютеру с Ubuntu 11.10, на котором дополнительно установил адаптер USB-Ethernet (или вторую сетевую плату). Сеть между ними я временно настроил со статическими IP адресами. На настольном компьютере произвел настройки, предоставляющие доступ в Интернет серверу (IP mascarade) через настроенное соединение на настольном компьютере. У сервера адресом шлюза по-умолчанию был выбран IP настольного компьютера.
Есть и другой способ, можно создать собственный загрузочный диск с необходимыми пакетами, перебрав диск Ubuntu 12.04.
Можно также перенести эти файлы на флешке, предварительно их загрузив тем или иным способом.
Есть и самый интересный способ, - использовать локальный репозиторий Ubuntu, которые поддерживает Beeline Интернет на своих серверах. У них есть локальный FTP сервер, по адресу 195.14.50.21 (см. Ресурсы п. 5), там же и репозитории пакетов Ubuntu.

Итак, временные настройки на настольном компьютере, обеспечивающие NAT для сервера:
$sudo -s
$echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
$sysctl -p
$sudo iptables -t nat -I POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE

$sudo iptables-save >/etc/iptables.conf



Настройки на сервере, в файле /etc/network/interfaces, добавил:

auto eth0
iface eth0 inet static
 address   192.168.1.1
 netmask  255.255.255.0
 gateway 192.168.1.2

server$ sudo ifconfig eth0 up

Добавил маршрут по умолчанию, на сервере:
server$ route add default gw 192.168.1.2

Проверил и перепроверил соединения:
server$ ping 192.168.1.2
desktop$ ping 192.168.1.1
server$ ping www.google.com

Скачал требуемые пакеты
server$ sudo apt-get install pptp-linux xl2tpd

Заодно русифицировал консоль:
?
$ sudo apt-get install console-cyrillic
$ sudo dpkg-reconfigure console-cyrillic
$ sudo dpkg-reconfigure console-setup
Включить настройку консоли при загрузке. Для этого в файл /etc/initramfs-tools/initramfs.conf необходимо добавить параметр FRAMEBUFFER=Y. В результате будут показываться шрифты, приветствия на русском языке.
Обновить initramfs, чтобы в него добавились нужные параметры:
sudo update-initramfs -u

далее в файл /etc/rc.local добавляет строку:
/etc/init.d/console-cyrillic start
Перезагрузился.

Переименование сетевых интерфейсов в Ubuntu 12.04

Для удобства восприятия сетевых интерфейсов на сервере, сделаем переименование невнятных eth, в что-то более адекватное, например - интерфейс к провайдеру - district или beeline, интерфейс к домашней сети - home.
Это также позволит писать более-менее универсальные правила iptables.

Переименование делается на основе mac-адресов, сетевых плат в файле:
$sudo nano /etc/udev/rules.d/70-persistent-net.rules
Для строки сетевой платы (у меня usb-ethernet), я изменил только имя на beeline (быв. eth0).
Для встроенной сетевой платы, я задал имя home (быв. eth1).
Также изменил и /etc/network/interfaces

iface beeline inet dhcp

iface home inet static
 address   192.168.3.1
 netmask   255.255.255.0

auto home
auto beeline


Для моей домашней сети выбран диапазон 192.168.3.1/24

после перезагрузки, команда ifconfig выводит:
beeline   Link encap:Ethernet  HWaddr ....  
...
home Link encap:Ethernet  HWaddr ....  
...
Т.е. в системе получилось два понятных сразу, по их назначению, интерфейса. Гут. Это становится актуально при наличии многих интерфейсов, виртуальных бриджей и пр.

Позже, тоже самое проделал и для домашнего компьютера.


Настройка VPN PPTP Билайн-Интернет в Ubuntu 12.04
Вначале начал настраивать PPTP соединение, как более легкое и отработанное. Это туннель через соединение точка-точка (PtP)
Сервер VPN - vpn.internet.beeline.ru
Должен быть открыт порт PPTP - 1723.
MTU PPTP - 1460, MSS PPTP - 1452, MRU - 1500.

Особенностью подключения является то, что при получении IP-адреса через локальную (районную) сеть, также устанавливается шлюз по-умолчанию. Но этот шлюз, не обеспечивает доступ в Интернет, однако можно получить доступ к районными ресурсам провайдера.
Вот вывод команды, после загрузки и поднятия интерфейса beeline.
$sudo route -n

Таблица маршрутизации ядра протокола IP

здесь 10.123.240.1 - шлюз по-умолчанию. У меня beeline, у вас может быть eth0, eth1 или иное, если  делали переименование.

Также, автоматически сервер VPN не становиться доступным, т.е.
$ ping vpn.internet.beeline.ru
не отрабатывает в моей системе.

Т.к. подразумевается что в системе должен быть один шлюз по умолчанию, а при подключении к pptp создается правильный шлюз,  то старых районных шлюз все рекомендуют удалить. Что мы и проделаем ниже. Можно удалить до подключения ppp, а можно после.
$ ip route del default

Также на форумах Beeline Интернет настоятельно советуют настроить таблицу маршрутов, следующим образом - указать доступ к vpn-серверам, dns-серверам через шлюз (он же шлюз по-умолчанию) полученный нами по DHCP.
Очень странно, что не все эти маршруты не передаются автоматически в dhcp - запросе. А они передаются, только хитрым способом (см. ресурсы п.2). Для этого надо настроить еще клиент dhcp, через /etc/dhcp/dhclient.conf.


# Добавляем маршрут от районного шлюза к впн-серверу и к днс-серверам
# Обратите внимание шлюз, который нам выдал DHCP-сервер, в данном примере это 10.123.240.1 (районный шлюз).

Добавлю DNS-адрес,  актуальный для моих условий Петербурга. У Вас может быть свои DNS-серверы, это можно выяснить у тех. поддержки.
$ sudo ip route add 85.21.192.3 via 10.123.240.1 dev beeline
или route add -host 85.21.192.3 gw 10.123.240.1
после добавления маршрута к dns серверу, команда route стала способна показывать dns-адреса  маршрутов.

C VPN сервером сложнее, он не один, а их много, а выдает их адреса, один vpn.internet.beeline.ru
Для того, чтобы имя vpn сервера, было доступно, после добавления маршрута к DNS-серверу, добавляем маршрут по умолчанию через районный шлюз, а там пусть шлюз разбирается. Главное dns-сервер доступен.
$ sudo ip route add default via 10.123.240.1 dev beeline

В принципе, остальные маршруты не нужны для функционирования Интернет.


в папке /etc/ppp/peers создадим настройку для нашего соединения VPN, назовем ее beeline. В результате, мы сможем управлять соединением, с помощью команд вида, pon beeline и poff beeline, из под рута.
$ sudo touch /etc/ppp/peers/beeline

Заполним настройку beeline, для этого отредактируем ее:
$ sudo nano /etc/ppp/peers/beeline
Внесем следующее:
# Настройка подключения к провайдеру Beeline Интернет
# сервер: микросервер
# 15 марта 2012
name {мой логин}
remotename beeline
# Строка опции linkname передается в скрипты  ip-up, ip-pre-up and ip-down
# может быть использована для создания скрипта, выполняющегося исключительно, 
# только для этого соединения
linkname beeline-pptp

# Тип авторизации не eap и не pap, т.е. либо chap либо chap+MD5
refuse-eap
refuse-pap
#Устанавливать шлюз по умолчанию для соединения ppp
defaultroute

# Заменить существующий шлюз по-умолчанию
# в журнале отражается как
# microserver pppd[2294]: replacing old default route to beeline [10.123.240.1]
# после отключения восстанавливается, удобно
# В этой конфигурации сделано так, а в L2TP несколько иначе
replacedefaultroute

# Использовать DNS-адреса, получаемые через PPP
# но можно не использовать, а прописать DNS сервера вручную в домашнем dhcp-сервере
usepeerdns

# Поддержание постоянного соединения, если оно рвется, то демон пытается соединиться
persist
# столько раз он пытается и только тогда выключается
maxfail 20

mtu 1476
pty "pptp vpn.internet.beeline.ru --nolaunchpppd"

# Не требовать от билайна того, что он билайн
noauth
# Возможно пригодится, - бесценный опыт из Интернета, собранный долгими мучениями пользователей
#nomppe
#nomppc
#sync
#lock
#nobsdcomp
#nodeflate
#nopcomp
#noaccomp
#updetach

где {мой логин} - это имя пользователя выданное провайдером Beeline, совпадает с именем Личного кабинета в Beeline. Пароль будет указан в другом файле

Указываем пароль для соединения
$ sudo nano /etc/ppp/chap-secrets
{мой логин} beeline {мой пароль}

Все. Теперь можно устанавливать тестовое соединение с Интернет. под sudo. Superuser DO.
# pon beeline
Чтобы отключиться:
# poff beeline

Чтобы просмотреть статистику подключения:
# pppstats

Быстро проверить результат выполнения (несколько последних строк вывода pppd)
# plog



Чтобы контролировать процесс установки соединения, надо выбрать вторую виртуальную консоль на сервере (alt+F2), войти в систему и выполнить команду:

$ tail -f /var/log/syslog

Команда будет показывать хвост журнала syslog, до тех пор, пока не нажмете Ctrl-C.
Alt+F1 - переключиться на первую консоль.

$ sudo ifconfig
Среди списка интерфейсов ищем обычно ppp0,  и смотрим его IP адрес.

Следующее, не нужно делать, если опция replacedefaultroute нормально отрабатывает.
Удаляем маршрут по-умолчанию, установленный на интерфейс eth0:
$ sudo ip route del default
Далее, добавляем маршрут по умолчанию:
route add default gw {IP-адрес}
К примеру, у меня был IP-адрес 176.14.13.105, соотв. добавление маршрута выглядело так:
route add default gw 176.14.13.105
либо с использование команды ip (новый способ)
ip route add default via 176.14.13.105 dev ppp0

либо так:
ip route add default dev ppp0

Итак, после подъема соединения pon beeline (beeline - это имя для ppp peer), я делаю две команды:
ip route del default
ip route add default dev ppp0


Проверка соединения:
$ sudo ping www.google.com
Должно работать, при синтаксически верных файлах и правильных паролях. PPtP - для доступа в Интернет, более менее отработанная технология.

После отключения от Интернет, надо восстановить маршрут по умолчанию, у меня через beeline.
$ sudo ip route add default via ..... dev beeline
автоматически восстанавливается, если работает опция replacedefaultroute.



Для автоматического поднятия соединения вносим в файл /etc/network/interfaces, запись относительно ppp


# Подключение сети Интернет при загрузке и заодно переименовываем интерфейс в internet
 iface ppp9 inet ppp
  provider beeline
# делаем так, что vpn-подключение всегда создает интерфейс вида: ppp9
# это для того, чтобы другие ppp соединения имели возможность выбрать номер 0-8.
  unit 9
# Также строка для выполнения, команд после поднятия интерфейса ppp9
  post-up ip link set dev ppp9 down && ip link set dev ppp9 name "internet" && ip link set dev internet up && ip route add default dev internet

auto ppp9


после перезагрузки видим четкие и понятные интерфейсы
$ ifconfig
lo ...
beeline ...
home ...
ppp9 ...

иногда интернет отваливается, можно поднять ifup ppp9, а остановить ifdown ppp9.






Настройка L2TP соединения. УЖЕ НАСТРОЕНО.
L2TP сервер VPN - tp.internet.beeline.ru
L2TP - 1701, MTU L2TP 1460, MSS L2TP - 1460

Особенности: у нас есть подключение ethernet к локальной (районной) сети Beeline Интернет (быв. Корбина). Адрес IPv4 получается динамически, через DHCP. Интернет доступен через l2tp сервер. Протокол рукопожатия - простой CHAP. Существуют проблемы с правильной настройкой подключения в Linux, с таблицей маршрутизации. Например, соединение vpn есть, а интернета нет.
Протокол DHCP сообщает нам адрес шлюза, но через него мы не можем выйти в Интернет, надо поднимать l2tp соединение, так уж устроено в Билайн-Интернет.
При каждом обращении по адресу tp.internet.beeline.ru выдается какой-либо vpn сервер, с собственными адресом. Т.е. похоже какой-то балансировщик нагрузки. Это исключает возможность статически прописать все IP-адреса vpn-серверов.

Настройка L2TP долго не давалась, пока не были выяснены все нюансы подключения, обходы багов и пр., основная засада от корбины-билайна.

Куда я вносил изменения:
1. /etc/dhcp/dhclient.conf
2. /etc/network/interfaces
3. /etc/xl2tpd/xl2tpd.conf
4. /etc/ppp/options.xl2tpd
5. /etc/ppp/options
6. /etc/ppp/ip-up.d/delroute
7. /etc/ppp/chap-secrets

Итак, после установки пакета xl2tpd.

root@microserver:~# xl2tpd -v
xl2tpd version:  xl2tpd-1.3.1

Видим, на сервере Ubuntu 12.04 установлена версия 1.3.1 демона xl2tpd.

Порядок действий и ручных проверок подключения по протоколу L2TP
Предварительно.
 Отключен интерфейс beeline. В файле /etc/network/interfaces
минимально задано, для начала:
iface beeline inet dhcp
 Таблица маршрутов пустая, за исключением маршрута в home. Маршрута по умолчанию - нет, у меня он удаляется автоматически при поднятии home. Если он есть, его надо удалить, чтобы он не мешался при поднятии интерфейса beeline.

1. Открываем дополнительную консоль, на которой исполняем команду просмотра хвоста системного журнала. Тут мы будем наблюдать за ходом подключения:
$ tail -f /var/log/syslog

2. Поднимаем Ethernet-интерфейс beeline.
$ sudo ifup beeline

В консоли наблюдаем получение IP-адреса по DHCP.
Распечатываем таблицу маршрутов:
$ ip route

Видим, что получены различные маршруты.

Просматриваем содержимое файла /etc/resolv.conf
$ cat /etc/resolv.conf
Видим серверы имен, полученные по dchp и внесенные сюда командой ifup, через вызов resolvconf.
Записываем на бумаге их.

3. Начинаем проверку доступности L2TP-сервера. Делаем ping.
$ ping tp.internet.beeline.ru
Видим доступность L2TP-сервера, потому что работает маршрут по-умолчанию, через районный шлюз.

4. Делаем пинг, до DNS серверов.
Видимо их доступность, потому что работает маршрут по-умолчанию, через районный шлюз.

5. Начинаем вносить маршруты до DNS-серверов в таблицу маршрутизации.
ip route add 85.21.192.3 via 10.123.240.1
ip route add 213.234.192.8 via 10.123.240.1
Мы обеспечили доступность DNS серверов через районный шлюз, независимо от маршрута по-умолчанию. 10.123.240.1 - это районный шлюз, у Вас может быть другой. Выясняется по команде ifconfig


6. Делаем пинг, до L2TP сервера. Несколько раз. При работающем маршруте по-умолчанию
$ ping tp.internet.beeline.ru

$ ping tp.internet.beeline.ru

Видим, что каждый раз IP-адрес L2TP сервера меняется, но они кучкуются в одной подсетке.

7. Добавляем маршрут к выявленной подсетке серверов в таблицу маршрутизации, через районный шлюз
ip route add 83.102.254.0/24 via 10.123.240.1

8. Удаляем маршрут по-умолчанию
ip route del default

9. Проверяем доступность L2TP-серверов, при удаленном маршруте по-умолчанию.
$ ping tp.internet.beeline.ru
Видим, что DNS-имя L2TP-сервера, переводится в IP-адрес. Каждый раз новый, как ранее.
Т.е. при отключенном маршруте по умолчанию, L2TP-сервер доступен. DNS-сервера доступны. Мы теперь можем использовать доменное имя L2TP-сервера в конфигурационных файлах.

10. Готовим урезанные версии конфигурационных файлов демона xl2tpd, для целей ручного тестирования и поднятия туннеля.

Файлы конфигураций xl2tpd находятся:
/etc/xl2tpd/xl2tpd.conf
/etc/ppp/options.xl2tpd

Редактируем, основываясь на прочтении man xl2tpd.conf
Временно исключаем ряд опций: redial
Временно добавляем ряд опций отладки: debug network, debug tunnel


$ sudo nano /etc/xl2tpd/xl2tpd.conf

[global]
access control = yes
port = 1701
auth file = /etc/ppp/chap-secrets
debug network = yes
debug tunnel = yes

[lac beeline]
lns = tp.internet.beeline.ru
require chap = yes
name = <ваш логин>
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
tx bps = 1000000000
autodial = yes


lac - L2TP Access Concentrator (LAC)
lns - L2TP Network Server (LNS)
Замените строчку <ваш логин> на свой, он совпадает с логином для входа в личный кабинет.
На моем тарифе, опция tx bps роли не играет. Без нее тоже работает.

$  sudo nano /etc/ppp/options.xl2tpd

# Опции для L2TP подключения к Beeline Интернет
# сервер: микросервер
# Дата изменения: 
unit 8
name <ваш_логин>
remotename = l2tp
linkname = beeline-l2tp
connect /bin/true
noauth
defaultroute

Небольшой такой, компактный файл опций. Все нужное, ничего лишнего, для начала
Опция defaultroute - определяет, что туннель ppp8 будет установлен как маршрут по-умолчанию в таблице маршрутизации. Здесь важно, чтобы в таблице маршрутизации, перед установлением соединения l2tp,  не было маршрута по умолчанию, иначе pppd не станет устанавливать маршрут по-умолчанию.
Опция linkname используется в скрипте delroute в папке /etc/ppp/ip-up.d/ ,
чтобы выполниться только когда поднимается соединение l2tp.

Можно добавить опцию, mtu 1460. У меня, без этой опции  скорость на отдачу низкая. Есть еще mru 1460.



11. Исправляем цепляющиеся опции pppd, которые присоединяются к нашим опциям из файла /etc/ppp/options

Особенность, в том, что демон pppd присоединяет файл /etc/ppp/options к конфигурации /etc/ppp/options.l2tp

Просмотр опций которые присоединяются:
egrep -v '#|^ *$' /etc/ppp/options

Вот что я оставил:
asyncmap 0
xonxoff
lock
hide-password
lcp-echo-interval 30
lcp-echo-failure 4
noipx

12. Теперь основная проблема pppd (см. Ресурсы. п.8) у провайдера Билайн (быв. Корбина)

Цитата: "Распространённая ошибка при настройке бывает в том, что после поднятия ppp0 не указывают маршрут до vpn-сервера, поэтому ppp0 генерирует гигабайты tx bytes. "

В ручном режиме, я исправлял так, после установления соединения. Если успевал.
$sudo ip route del 83.102.254.204 dev ppp8
где 83.102.254.204 IP-адрес L2TP сервера

13. Создаем файл, в пути /etc/ppp/ip-up.d/delroute для обхода особенности с паразитным маршрутом
Сразу делаем его исполняемым, чтобы не забыть.
$ sudo chmod +x /etc/ppp/ip-up.d/delroute

Редактируем:
$ sudo nano /etc/ppp/ip-up.d/delroute


#!/bin/sh
# Скрипт для удаления паразитного маршрута
# env > /tmp/env.vpn
if [ $LINKNAME = "beeline-l2tp" ]; then
 ip route del $5 dev $1
 echo "Выполнен delroute" >> /var/log/syslog
 echo "5 параметр:" $5 >> /var/log/syslog
 echo "1 параметр:" $1 >> /var/log/syslog
else
 echo "Не выполнен delroute" >> /var/log/syslog
fi
exit 0


В этом скрипте, одно условие, которое выполняется, когда исполняются наши опции из файла /etc/ppp/options.xl2tpd. Опция linkname и играет роль условия при котором этот скрипт будет выполнен.
Параметры $LINKNAME, $5,$1 передаются в скрипт демоном. $LINKNAME, устанавливается опцией linkname, $1 - это имя вновь создаваемого интерфейса ppp. По умолчанию, ppp0, но можно изменить опцией pppd - unit. Я себе сделал unit 8.
На основе имени линка, я определяю, что подключение L2TP и соответственно удаляю паразитный маршрут, для всех остальных ppp-соединений ничего не случается.
Ранее используемая опция ipparam не работает у меня, в ней не передаются параметры.


14. Редактируем файл /etc/ppp/chap-secrets
Вносим имя пользователя (логин) и пароль

$ sudo nano /etc/ppp/chap-secrets

<ваш логин> l2tp <пароль>

Заменить <ваш логин> вашим именем пользователя (договора), а <пароль> паролем. У билайн имя пользователя выглядит приблизительно так - 0123456789.


15. Установка соединения и разрыв соединения L2TP, посредством service
service - команда управления сервисами SysV init.
Файл относящийся к xl2tpd находится в /etc/init.d/xl2tpd. Он исполняемый.

$ sudo service xl2tpd start
Сервис автоматически начнет устанавливать соединение pppd. В консоли наблюдаем за ходом выполнения.

Например, я забыл сделать файл delroute исполняемым, в результате паразитный маршрут не удалялся, Интернета не было. При этом быстрый рост счетчика TX на интерфейсе ppp0. За пару минут, он достигал значения 4 гигабайта и соединение разрывалось.
Т.к. у меня установлено только однократное подключение, в памяти оставался висеть демон xl2tpd.

Останавливал я его командой.
$ sudo service xl2tpd stop

После этого, все было чисто.

Разрывом - установкой соединения можно управлять и не останавливая demon xl2tpd, через pipe /var/run/l2tp-control

Из документации к xl2tpd, команды выполняются следующим образом, при правах суперпользователя:
echo "t tp.internet.beeline.ru" >/var/run/xl2tpd/l2tp-control
echo "c beeline" > /var/run/xl2tpd/l2tp-control
echo "d beeline" >/var/run/xl2tpd/l2tp-control

beeline - это мой настроенный LAC указанный в файле /etc/xl2tpd/xl2tpd.conf

Цитата:
"
t <host> - create a tunnel to <host>
c <tid> or <entry> - originate an l2tp call on the tunnel identified locally by <tid>, or dial the entry <entry>
h <cid> - hang up a call with the local identifier <cid>
d <tid> or <entry> - disconnect the tunnel locally identified by <tid> or a lac entry <entry>
"

Если отключить опцию autodial в /etc/xl2tpd/xl2tpd.conf , то можно запустить демона xl2tpd без автоподключения, а подключение выполнять по требованию.


В принципе это все позволяет создать в ppp/peers новое подключение и управлять им через pon / poff, но надо умудриться.

Как-то, случился у меня CHAP authentication failed: Authentication failed, минут 10 не мог понять, причину отказа. Оказалось кончились деньги на счете. Воспользовался доверительным платежем. Инет подключился, с небольшой задержкой. Пополнил через Интернет. Очень удобно.
Хотелось бы в логах видеть причину CHAP Authentication failed. Например сообщение: деньги кончились.

Иногда случается:

Connection terminated.
Mar 22 23:17:47 microserver xl2tpd[7997]: network_thread: recv packet from 83.102.254.x, size = 88, tunnel = 21415, call = 22037 ref=0 refhim=0
Mar 22 23:17:47 microserver xl2tpd[7997]: handle_avps:  don't know how to handle atribute 46.
Mar 22 23:17:47 microserver xl2tpd[7997]: handle_avps:  don't know how to handle atribute 104.
Mar 22 23:17:47 microserver xl2tpd[7997]: control_finish: Connection closed to 83.102.254.x, serial 1 (Locally generated disconnect)

Лечиться это у меня обычно либо перезапуском демона xl2tpd, либо установление нового туннеля: echo "t tp.internet.beeline.ru" >/var/run/xl2tpd/l2tp-control
и последующим соединение: echo "c beeline" > /var/run/xl2tpd/l2tp-control



Для окончательно включения функции NAT и транзита пакетов, отредактируем:
$sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

Осталось настроить iptables, чтобы при загрузке они пополнялись правильными правилами.
итак, у меня
home - интерфейс домашней сети
beeline - интерфейс провайдера
ppp9 - интерфейс к сети Интернет через VPN PPTP
ppp8 - интерфейс к сети Интернет, через VPN L2TP

Минимально необходимые команды, для обеспечения интернетом домашней сети, при 2 типах подключения:
iptables -t nat -I POSTROUTING -o ppp9    -j MASQUERADE
iptables -t nat -I POSTROUTING -o ppp8    -j MASQUERADE
iptables -t nat -I POSTROUTING -o beeline -j MASQUERADE

iptables -A FORWARD -i home    -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ppp8    -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i ppp9    -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i beeline -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


Последние 5 правила добавляются по умолчанию в таблицу "фильтр", опция -t filter. Однако, без них работает с перебоями, то страницы не открываются, то долго, одни сайты легко, другие задумчиво.
Если еще упростить,для одного соединения то:
iptables -t nat -I POSTROUTING -o ppp8    -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


Опционально, пока не проработано окончательно.
Определим место хранения настроек iptables в /etc/default/iptables
Сохранение
$sudo iptables-save > /etc/defualt/iptables
Восстановление
$sudo iptables-restore < /etc/defualt/iptables


Обеспечение автоматического подъема соединения L2TP при загрузке микросервера

В этом разделе, я настроил автоматическое установление соединения посредством создания "работ" Upstart. Upstart , в Ubuntu, - основная подсистема инициализации сервисов. У меня есть статья на тему Upstart.
Файл /etc/init/internet.conf создаем с правами суперпользователя

$ sudo nano /etc/init/internet.conf

# Работа по поднятию соединения с Интернет Билайн через VPN
# сервер: микросервер
# Дата изменения: 24 марта 2012

author "gimmor.blogspot.com"
description "управление соединением с Интернет Билайн"

exec /usr/sbin/xl2tpd -c /etc/xl2tpd/xl2tpd.conf
expect fork

pre-start script
test -d /var/run/xl2tpd || mkdir -p /var/run/xl2tpd
end script

post-start script
iptables -t nat -I POSTROUTING -o ppp8 -j MASQUERADE
end script


pre-start script
# нет пока
end script

post-stop script
iptables -t nat -D POSTROUTING -o ppp8 -j MASQUERADE
end script

# Сервис пытается запуститься после поднятия beeline
start on net-device-up IFACE=beeline
stop on net-device-down IFACE=beeline


В последних двух строчках в параметре IFACE надо указать свое актуальное имя интерфейса провайдера, если оно не изменено на beeline. У меня изменено.
Важная опция в файле: expect fork, она позволяет системе Upstart правильно получить PID демона xl2tpd, чтобы корректно управлять запуском/остановкой службы internet.



Также надо не забыть отключить запуск сервиса xl2tpd через службу SysV.
sudo chmod -x /etc/init.d/xl2tpd
для избежания конфликта и недоразумений.

При этом в файле /etc/network/interfaces, устанавливаются правильные маршруты, для корректного последующего поднятия ppp8 (xl2tpd L2TP PPP).

iface beeline inet dhcp
  post-up iptables -t nat -I POSTROUTING -o beeline -j MASQUERADE
   post-up iptables -t filter -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  post-up ip route del default
  post-up ip route add 85.21.192.3 via 10.123.240.1
  post-up ip route add 213.234.192.8 via 10.123.240.1
  post-up ip route add 83.102.254.0/24 via 10.123.240.1
  post-up ip route add 224/4 via 10.123.240.1

Также, в /etc/network/interfaces , убрать строку auto ppp9, относящуюся к PPTP, чтобы оно не поднималось автоматически и не вступало в конфликт с ppp8.

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

В результате:
 - автоматическое поднятие соединения L2TP во время загрузки микросервера
 - управление остановкой службы internet, посредством стандартной команды: $sudo stop internet
 - управление запуском службы internet, посредством стандартной команды: $ sudo start internet
 - получение состояния службы internet,  посредством стандартной команды: $ sudo status internet
Надо заметить, из-за особенностей серверов Билайна, перезапуск службы internet командой initctl reload internet, не всегда, а в большинстве случаев всегда, не срабатывает. Я это понимаю так, что на сервере Билайна не окончательно отключается туннель. В результате в журнал сыпятся сообщения вида:


Mar 24 07:04:08 microserver xl2tpd[2628]: Can not find tunnel 28736 (refhim=0)
Mar 24 07:04:08 microserver xl2tpd[2628]: network_thread: unable to find call or tunnel to handle packet.  call = 0, tunnel = 28736 Dumping.
Ну что же, надо подождать минут 3-4 и потом запускать start.


Первоначально, между запуском и остановкой службы internet, надо делать паузу, чтобы дать время процессам завершиться.

И всё равно, это не позволяет вовремя получить сообщение на клиенте о пропадании сети Интернет. :-(.

Конфигурация - не окончательное, еще не используется автоматическое поднятие при разрыве ppp-соединения. при наличии поднятого туннеля (опции redial в /etc/xl2tpd/xl2tpd.conf). Просто, пока не решил, как микросервер будет это обрабатывать.


Мы затронули изменениями файлы, каждый файл содержит строчку-метку "микросервер", которая, в дальнейшем позволяет этот файл направить на резервное копирование.

Также можно создать собственный пакет конфигурации, для быстрого развертывания. Пока не сделал.

И да, перезагрузка в Ubuntu - помогает.
Часто после манипуляций с подключениями на сервере, начинают не открываться страницы на клиенте. Для исправления, на клиенте, переподключаюсь. Сетевой интерфейс обновляет dns и пр., и пропадания проходят.



Опционально. Локальные репозитории Beeline Интернет

Укажем маршрут до сервера с репозитариями Beeline Интернет:
$sudo ip route add 195.14.50.21 via РАЙОННЫЙ_ШЛЮЗ
заменить РАЙОННЫЙ_ШЛЮЗ IP-адресом собственного районного шлюза, получаемого по dhcp (default gateway)
2. Исправляем список репозиториев
$sudo cp /etc/apt/soources.list /etc/apt/sources.list.orig
$sudo nano /etc/apt/sources.list

Содержимое файла должно быть таким, для версии сервера 12.04 LTS (precise):
deb http://195.14.50.21/pub/Linux/ubuntu/ precise main restricted
deb http://195.14.50.21/pub/Linux/ubuntu/ precise-updates main restricted
deb http://195.14.50.21/pub/Linux/ubuntu/ precise universe
deb http://195.14.50.21/pub/Linux/ubuntu/ precise-updates universe
deb http://195.14.50.21/pub/Linux/ubuntu/ precise multiverse
deb http://195.14.50.21/pub/Linux/ubuntu/ precise-updates multiverse
deb http://195.14.50.21/pub/Linux/ubuntu/ precise-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu precise partner
deb http://195.14.50.21/pub/Linux/ubuntu precise-security main restricted
deb http://195.14.50.21/pub/Linux/ubuntu precise-security universe
deb http://195.14.50.21/pub/Linux/ubuntu precise-security multiverse

Обновляем репозитарии:      
$sudo apt-get update
Обновляем пакеты, если есть обновления
$sudo apt-get upgrade



Выводы

Обеспечить стабильный Интернет посредством протоколов PPP - это трудная, почти не выполнимая задача. То что оно как-то работает, при этом влияющих факторов - море, это чудо. Отсюда проистекает и то понимание, что соединение может рваться по причинам, которые нам не ведомы в момент настройки и предусмотреть реакцию на них заранее сложно.


Почитать про дополнительное конфигурирование микросервера, воспользоваться меткой: микросервер

Вполне может пригодиться настройка DNS на микросервере.


Что ещё почитать

Есть у меня новая заметка о настройке маршрутизатора Mikrotik RB951G-2HnD, аналогично, для доступа к сети Beeline. Mikrotik в сети Beeline.


Ресурсы

1. В. Федорчук. Настройка сетевых интерфейсов с помощью IPROUTE 2,  http://www.opennet.ru/base/net/iproute2.txt.html
2. Получение полных маршрутов сети Beeline через DHCP. http://homenet.beeline.ru/index.php?showtopic=297786
3. Скрипт помощник vpn. http://help.ubuntu.ru/wiki/%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82_vpn
4. Документация Ubuntu. Настройка сети в ручную. http://help.ubuntu.ru/wiki/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E
5. Локальные репозитории Ubuntu в Beeline Интернет. http://president.sytes.net/wordpress/lokalnyie-repozitarii-korbinyi-ubuntu
6. По теме, от пользователя услуг Yorick. http://yorick.homelinux.com/blogs/corbinabeeline-i-perehod-na-ih-l2tp-protokol/#more-5
7. Подключения к Internet Beeline (Corbina) в Debian GNU/Linux 6 по протоколу l2tp. http://www.opennet.ru/tips/info/2539.shtml
8. О проблеме демона PPPD, в приложении к Корбине (а теперь и Билайн). http://homenet.beeline.ru/index.php?showtopic=69646






5 комментариев:

Andrey комментирует...

Спс за статью, изучаю.

pre-start script
# нет пока
end script
Думаю, здесь должно быть stop.

post-up ip route add 224/4 via 10.123.240.1
А это что?

Анонимный комментирует...

Spasibo!!!
Ochen zaleu, chto ne nashel stat'u 5 dnei nazad...
Udachi!

Анонимный комментирует...

Супер! Без твоей статьи не разобрался бы! Спасибо огромное!

CSRedRat комментирует...

Можно очень просто настроить L2TP подключение с помощью дополнения для Network Manager. Для всех актуальных версий Ubuntu: http://forum.ubuntu.ru/index.php?topic=181916

NosferatY комментирует...

Спасибо за статью.

Сергей - гуевая приблуда не канает :)