Очень часто такой тип соединения используют провайдеры. Я
пользуюсь услугами провайдера corbina, поэтому пример показывает, в
первую очередь, настройку соединения именно с этим провайдером.
Естественно, ваш провайдер должен поддерживать соединение по
протоколу 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. Пример ее
выполнения приведен выше
протоколом, но он жутко глючил. То обрывалось соединение, то в логах
было куча записей о том, что буфер пакетов переполнен и т.д. Полазив по
форумам выяснилось, что это типичная проблемма такого соединения. Еще
был баг связанный с глючностью открытия страниц из локальной сети.
Выход правда был - принудильное уменьшение 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. Пример ее
выполнения приведен выше