Блог ИТ склеротика. Поднятие VPN соединения посредством протокола L2TP

Страницы

Расширенный поиск в статьях блога

3 мая 2012 г.

Поднятие VPN соединения посредством протокола L2TP

Очень часто такой тип соединения используют провайдеры. Я
   пользуюсь услугами провайдера 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. Пример ее
   выполнения приведен выше

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free