Ключевые слова:l2tp, tunnel, vpn, linux, (найти похожие документы)
From: w00die
Newsgroups:
Date: Mon, 3 Aug 2010 17:02:14 +0000 (UTC)
Subject: Поднятие VPN соединения посредством протокола L2TP
Оригинал: http://booroo.ru/2009/07/podnyatie-vpn-soedineniya-posredstvom-l2tp/
Сегодня я расскажу как быстро поднять vpn соединение используя l2pt
протокол. Очень часто такой тип соединения используют провайдеры. Я
пользуюсь услугами провайдера corbina, поэтому пример показывает, в
первую очередь, настройку соединения именно с этим провайдером.
Естественно, ваш провайдер должен поддерживать соединение по
протоколу l2tp.
Итак, для начала почему не pptp?! Первое время я пользовался этим
протоколом, но он жутко глючил. То обрывалось соединение, то в логах
было куча записей о том, что буфер пакетов переполнен и т.д. Полазив по
форумам выяснилось, что это типичная проблемма такого соединения. Еще
был баг связанный с глючностью открытия страниц из локальной сети.
Выход правда был - принудильное уменьшение MTU. Немного повозившись с
pptp я обнаружил, что корбина оказывается поддерживает l2tp протокол.
Этот факт не мог не радовать. Пора переходить на l2tp протокол.
Первыйм делом надо поставить демон xl2tpd. В убунте это делается проще
простого.
# apt-get install xl2tpd
Так же пакет можно поставить исходников. Установка не должна вызвать проблемм.
После установки в /etc/init.d добавляется сценарий запуска(остановки) -
xl2tpd демона, который автоматом добавляется еще и в автозагрузку.
Исходные данные
Разберемся что мы имеем. Изначально должна быть подключена локакльная
сеть, поверх которой и создается тунель. Как правило ip адрес выдается
с помощью dhcp сервера, но нам он и не нужен. А нужен нам адрес шлюза.
Его можно узнать либо из соединения в винде, либо следующей командой:
# ip r
85.21.192.3 via 10.21.50.1 dev eth1
213.234.192.8 via 10.21.50.1 dev eth1
85.21.0.42 via 10.21.50.1 dev eth1
85.21.0.251 via 10.21.50.1 dev eth1
Здесь 10.21.50.1 - шлюз. Если сеть не настроена, то настраивайте сеть
руками. Это тема уже и так обмусолена со всех сторон. Думаю справитесь
И не забудьте прописать маршрут по умолчанию. Выглядеть это будет так:
# route add default gw 10.21.50.1
Только ip шлюза свой подставьте.
Далее необходимо разобраться с dns-сервером. У корбины их два.
Посмотреть их можно в винде. Эти ip адреса необходимо записать в файл
/etc/resolv.conf. Вот пример:
nameserver 213.234.192.8
nameserver 85.21.192.3
Теперь тестируем. Если сеть работает и вы прописали все как нужно, то
должны пинговаться шлюз и l2tp сервер. У корбины l2tp сервер -
tp.corbina.net. Узнать ip адрес можно с помощью команды host.
# host tp.corbina.net
tp.corbina.com is an alias for view100.viewdns.corbina.net.
view100.viewdns.corbina.net has address 85.21.0.241
85.21.0.241 - l2pt сервер.
Если адреса пингуются идем дальше, либо все перепроверяем.
Вроде все хорошо. Но если касаться теории, то нужно сказать, что обычно
маршруты к dns серверам и l2tp серверу прописывают вручну. Зачем это
надо?! Дело в том, что пока мы сидим в локалке у нас имеется дефолтный
шлюз, через который у нас все соединяется. Как только мы поднимем
тунель наш дефолтный шлюз должен смениться на шлюз выданного ip(как
правило интерфейса ppp0). Причем эта замена - принудительная. Так вот в
момент переключения шлюза пакеты не знаю где искать сервера(ни dns, ни
l2tp). Именно по этой причине адреса необходимо прописать вручную. Вот
пример:
# route add -host 213.234.192.8 gw 10.21.50.1
# route add -host 85.21.192.3 gw 10.21.50.1
# route add -host 85.21.0.241 gw 10.21.50.1
Эти маршруты необходимо прописывать всегда перед созданием vpn тунеля.
Но кроме добавления маршрутов для серверов, нам необходимо менять
маршрут по умолчанию. При создании тонеля мы должны устанавливать в
качестве шлюза ip адрес, который будет выдан серверном и который будет
использоваться интерфейсом ppp0. А после разрыва соединения должны
будем вернуть шлюз который был. В моем случае это 10.21.50.1. Вот
пример удаления локального шлюза и установка шлюза через ip адрес
интерфейса ppp0.
# route del default
# route add default dev ppp0
Вроде все понятно. Для наглядности приведу блок схему алгоритма.
dns1 - 213.234.192.8
dns2 - 85.21.192.3
l2tp - 85.21.0.241
шлюз - 10.21.50.1
Поднятие vpn соединения
Заполняем конфиги
Необходимо заполнить конфиги для установки соединения. Опишу конфиги и
запонение стандартное и наиболее часто встречающееся в интернете, чтобы
вам было с чем сравнить и подкоректировать в случае необходимости.
Для начала заполним конфиг демона xl2tpd. Путь - /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes
[lac corbina]
name = login
require pap = no
lns = tp.corbina.net
redial = yes
redial timeout = 5
require authentication =no
ppp debug = no
pppoptfile = /etc/ppp/options.xl2tpd
autodial = yes
Вместо login подставляйте свой логин. Файл опций также можно выбрать
любой.
Конфиг файла /etc/ppp/options.xl2tpd:
unit 0
name login
remotename corbina
ipparam corbina
connect /bin/true
mru 1460
mtu 1460
nodeflate
nobsdcomp
noauth
persist
maxfail 0
nopcomp
noaccomp
defaultroute
replacedefaultroute
Снова подставляйте логин свой. И необходимо проследить, чтобы параметры
этого конфига не перекрывались параметрами из файла /etc/ppp/options.
Если таковы имеются, коментируйте их безжалостно.
В файл /etc/ppp/chap-secrets вписываем логин и пароль в виде:
login * password
Лично у меня работает без кавычек, но где-то встречал пример с
кавычками. Если не захочет соединяться, попробуйте поиграть с кавычками.
Автоматизация маршрутов
Ну вроде все сделали. Теперь хорошо было бы автоматизировать работу с
маршрутами. Самый простой способ это добавить в сценарий
/etc/init.d/xl2tpd принудительное управление маршрутизацией. Для этого
в секцию кода отвечающию за старт xl2tpd демона добавляем строки:
route add -host 213.234.192.8 gw 10.21.50.1 > /dev/null
route add -host 85.21.192.3 gw 10.21.50.1 > /dev/null
route add -host 85.21.0.241 gw 10.21.50.1 > /dev/null
А удаление и добавление шлюзов по умолчанию, можно дописать в файл
/etc/ppp/ip-up. Этот файл очень удобно работает. Он запускается на
выполнение, сразу после установки соединения. Вот это нам как раз
подходит. Поэтому смело его открывайте и пишите там:
route del default
route add default dev ppp0
Теперь при установке соединения будет меняться дефолтный маршрут.
Но еще необходимо проделывать обратную операцию при разрыве соединения.
и тут нам поможет файл /etc/ppp/ip-down, которы выполняет диаметрально
противоположную задачу. А именно, он запускается при разрыве
соединения. Пропишем в него следующие строчки:
route del default
route add default gw 10.21.50.1
Вот собственно и все.
Кстати, посмотреть таблицу маршрутизации можно командой ip r. Пример ее
выполнения приведен выше.
P.S. Лично я не прописывал маршрутизацию в файл /etc/init.d/xl2tpd. У
меня имеется отдельный скрипт, в котором устанавлиются настройки
роутинга внутрь локальной сети, установка правил iptables и включение и
выключения соединения с интернетом. Но в силу того, что этот скрипт
жутко кривой и не доведен до ума я его приводить не стал. Но как
только я его нормально структурирую, то обязательно выложу на всеобщее
обозрение и критику.
Специально для хомячков: скачайте с сайта http://code.google.com/p/vpnpptp/downloads/list (или установите из репозитория Edumandriva) пакет vpnpptp-kde-one - он подойдет для любого дистрибутива мандривы, но при условии вызова конфигуратора из Центра Управления (но лучше использовать этот пакет vpnpptp-kde-one в KDE, этот пакет проще установить, в нем мало зависимостей), для любых DE есть пакет vpnpptp-allde, в том числе для KDE.
Зайдите в Центр Управления Мандривы ->Сеть и Интернет->Настройка VPN соединений->VPN PPTP/L2TP, введите любое имя соединения - появится конфигуратор, в нем есть кнопка <Справка> для хомячков.
Отвечаете на вопросы графического мастера - и появится иконка на рабочем столе для выхода в интернет.