01.08.2008
Некоторое время назад поднимал на Debian Etch подключение через Корбину. Столкнулся с тем, что вроде информации на тему l2tp много, но так чтобы всё было debian way и одним куском - нигде. Решил написать свой мануал.
В /etc/apt/sources.list
добавляем:
deb http://www.backports.org/debian etch-backports main contrib non-free
Добавляем pgp-ключи этого репозитария в apt-keyring:
$ gpg --keyserver hkp://subkeys.pgp.net --recv-keys 16BA136C
$ gpg --export 16BA136C | sudo apt-key add -
Создаём pin для xl2tpd (подробнее об apt pinning).
Для этого в файл /etc/apt/preferences
добавляем:
Package: xl2tpd
Pin: release a=etch-backports
Pin-Priority: 999
Файла /etc/apt/preferences
может и не быть, в таком случае его нужно создать.
Обновляем списки пакетов, устанавливаем xl2tpd:
$ sudo aptitude update
$ sudo aptitude install xl2tpd
Ещё его сразу нужно убрать из автозапуска:
$ sudo update-rc.d -f x2ltpd remove
Инструкция по работе с репозитарием backports.org здесь.
Содержимое файла /etc/xl2tpd/xl2tpd.conf
:
[global]
access control = yes
[lac corbina]
name = username
require chap = yes
require pap = no
lns = 85.21.230.1
redial = yes
redial timeout = 5
require authentication = no
ppp debug = no
pppoptfile = /etc/ppp/options.xl2tpd
autodial = yes
Значение параметра lns
- это адрес нашего l2tp сервера. Его приходится
добавлять в виде ip, иначе после обрыва соединение не восстанавливается. Вот
здесь чуть
подробнее об этой проблеме.
Для Ростова-на-Дону этот адрес 85.21.230.1
.
Значение параметра name - наш корбиновский логин. Пароль прописывается, как
водится, в /etc/ppp/chap-secrets
, об этом далее.
Содержимое /etc/ppp/options.xl2tpd
:
unit 0
name username
remotename corbina
ipparam corbina
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
noauth
persist
maxfail 0
nopcomp
noaccomp
defaultroute
replacedefaultroute
Здесь name - тоже корбиновский юзернейм. Есть ощущение, что либо здесь, либо в
xl2tpd.conf
он лишний, но убрать и проверить руки не дошли.
В /etc/ppp/chap-secrets
добавляем строку:
"username" * "password"
Вместо username
и password
ставим свои логин/пароль.
Далее основное отличие моего метода от того, что мне удалось нарыть в сети. Люди предлагают init.d-скрипт xl2tpd. Мне эта идея не нравится, тем более, что для тех операций, которые этими изменениями производятся существует вполне определённое место.
После подъёма ppp-интерфейса нужно обновить маршруты на vpn-сервер и dns-сервера таким образом, чтобы трафик на них проходил не через ppp-соединение, а как прежде напрямую, через локальную сеть Корбины.
Файл /etc/ppp/ip-up.local
:
#!/bin/sh
# PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
CORBINA_GW=xx.xx.xx.xx
if [ $PPP_IPPARAM == "corbina" ]; then
route add -host 85.21.230.1 gw $CORBINA_GW
route add -host 213.234.192.8 gw $CORBINA_GW
route add -host 85.21.192.3 gw $CORBINA_GW
fi
Файл /etc/ppp/ip-down.local
:
#!/bin/sh
# PPP_IFACE PPP_TTY PPP_SPEED PPP_LOCAL PPP_REMOTE PPP_IPPARAM
CORBINA_GW=xx.xx.xx.xx
if [ $PPP_IPPARAM == "corbina" ]; then
route del -host 85.21.230.1 gw $CORBINA_GW
route del -host 213.234.192.8 gw $CORBINA_GW
route del -host 85.21.192.3 gw $CORBINA_GW
fi
Здесь переменной CORBINA_GW нужно присвоить значение равное ip-адресу шлюза по умолчанию, который присваивается ethernet-интерфейсу dhcp-сервером Корбины. Выяснить можно вот так:
$ route|grep default
Разумеется, сработает только если поднят интерфейс, смотрящий в сеть Корбины.
Первый маршрут - на vpn-сервер. Тут адрес должен быть такой же, как в
xl2tp.conf
. Остальные два по идее от города не зависят.
Кусок /etc/network/interfaces
, отвечающий за интерфейс, смотрящий в сеть
Корбины должен выглядеть так:
auto eth2
iface eth2 inet dhcp
up invoke-rc.d xl2tpd start
pre-down invoke-rc.d xl2tpd stop || true
pre-down killall pppd || true
В текущем состоянии всё должно работать. Недостаток в том, что трафик на
внутренние сервисы Корбины будет идти через ppp-соединение, и как следствие,
скорость будет порезана. Чтобы получать доступ к внутренним ресурсам на полной
скорости, нужно добавить кое-какие маршруты. В итоге кусок
/etc/network/interfaces
, отвечающий за интерфейс, смотрящий в сеть
Корбины должен приобрести вот такой вид:
auto eth2
iface eth2 inet dhcp
up route add -host 89.179.135.67 gw xx.xx.xx.xx dev eth2
up route add -host 195.14.50.26 gw xx.xx.xx.xx dev eth2
up route add -net 85.21.72.80 netmask 255.255.255.240 gw xx.xx.xx.xx dev eth2
up route add -net 85.21.34.0 netmask 255.255.255.240 gw xx.xx.xx.xx dev eth2
up route add -net 10.0.0.0 netmask 255.0.0.0 gw xx.xx.xx.xx dev eth2
up invoke-rc.d xl2tpd start
pre-down route del -host 89.179.135.67 gw xx.xx.xx.xx dev eth2
pre-down route del -host 195.14.50.26 gw xx.xx.xx.xx dev eth2
pre-down route del -net 85.21.72.80 netmask 255.255.255.240 gw xx.xx.xx.xx dev eth2
pre-down route del -net 85.21.34.0 netmask 255.255.255.240 gw xx.xx.xx.xx dev eth2
pre-down route del -net 10.0.0.0 netmask 255.0.0.0 gw xx.xx.xx.xx dev eth2
pre-down invoke-rc.d xl2tpd stop || true
pre-down killall pppd || true
Адрес шлюза определяется точно так же, как и ранее, в пункте про настройку ppp.
Всё это довольно коряво сделано, мне не нравится. Но работает. Опенсорсная реализация l2tp очень далека от совершенства. Вообще Корбина могла бы и позаботиться чтобы конфигурирование маршрутов происходило автоматически на стороне vpn-сервера. Или могла бы предоставить какой-нибудь более родной для GNU способ подключения.
01.08.08 15:47 SolarWind комментирует:
01.08.08 17:06 Джус комментирует:
01.08.08 17:59 uptimebox комментирует:
01.08.08 18:00 uptimebox комментирует: