The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Поднятие VPN соединения посредством протокола L2TP (l2tp tunnel vpn linux)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: 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 и включение и выключения соединения с интернетом. Но в силу того, что этот скрипт жутко кривой и не доведен до ума я его приводить не стал. Но как только я его нормально структурирую, то обязательно выложу на всеобщее обозрение и критику.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Grom (?), 14:15, 31/08/2010 [ответить]  
  • +/
    Специально для хомячков: скачайте с сайта http://code.google.com/p/vpnpptp/downloads/list  (или установите из репозитория Edumandriva) пакет vpnpptp-kde-one - он подойдет для любого дистрибутива мандривы, но при условии вызова конфигуратора из Центра Управления (но лучше использовать этот пакет vpnpptp-kde-one в KDE, этот пакет проще установить, в нем мало зависимостей), для любых DE есть пакет vpnpptp-allde, в том числе для KDE.
    Зайдите в Центр Управления Мандривы ->Сеть и Интернет->Настройка VPN соединений->VPN PPTP/L2TP, введите любое имя соединения - появится конфигуратор, в нем есть кнопка <Справка> для хомячков.
    Отвечаете на вопросы графического мастера - и появится иконка на рабочем столе для выхода в интернет.
     
  • 2, ukcap (?), 21:17, 30/03/2011 [ответить]  
  • +/
    Доходчиво описано, спасибо. а как быть в случае ос Slackware? Бьюсь третий день, не могу поднять vpn.
     
  • 3, Стас (??), 02:59, 07/06/2012 [ответить]  
  • +/
    Maximum retries exceeded for tunnel 34004.  Closing.
    а как бороться с этим?
     
  • 4, Ritchie (?), 13:21, 31/08/2016 [ответить]  
  • +/
    Спасибо за статью, очень понятно написано!
    Проблема, указанная у комментатора #3 возникала при ненастроенной маршрутизации.
     
  • 5, Ritchie (?), 13:25, 31/08/2016 [ответить]  
  • +/
    Мои немного изменённые настройки в /etc/init.d/xl2tpd:
    # gateway
    GATEWAY='route | grep default | awk '{print $2}''
    # dns via default gateway
    for i in $(grep "^nameserver" /etc/resolv.conf | awk '{print $2}') ; do
         route add -host $i gw GATEWAY > /dev/null
    done
    # l2tp connect via default gateway
    route add -host  31.210.213.210 gw GATEWAY > /dev/null
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру