Настройка VPN (протокол L2TP) на примере провайдера Корбина Телеком

Для установки соединения с провайдером нам понадобится демон xl2tpd. Устанавливаем:

Конфиги

Подробности обо всех параметрах в конфигах, вы можете найти в man xl2tpd.conf и /etc/ppp/options

/etc/ppp/ip-up.d/corbinavpn

Причина создания этого файла, на прямую связана с общей недоработкой ppp-клиента в линуксе.

Так выглятит моя таблица маршрутизации до поднятия VPN (маршруты локальных ресурсов, получаемые по DHCP, я удалил, чтобы не мешали вникать в суть дела):

Первая строчка означает, что со всеми компьютерами в пределах моей подсети (10.227.168.0/21), мой компьютер общается на прямую, через устройство eth0.

Вторая строчка - это маршрут по умолчанию. Со всеми компьютерами за пределами подсети 10.227.168.0/21, компьютер общается через шлюз 10.227.168.1. Заметим, что DNS(213.234.192.8, 85.21.192.3) и VPN (85.21.0.0/24 для Москвы) сервера не из нашей подсети. И пока существует маршрут по умолчанию, мы можем с ними общаться. Но что произойдет когда мы поднимем VPN?

Система больше ничего не знает о существовании шлюза 10.227.168.1. Существование и смысл маршрута 85.21.0.254 (на VPN-сервер), мне к примеру вообще непонятны. Эта строчка в таблице маршрутизации гласит о том, что система общается с VPN-сервером через устройство ppp0. Какой смысл, если она не знает о том, что это надо делать через шлюз? Да и вообще, зачем ей общаться с VPN-сервером, через VPN-тунель? По умолчанию мы общаемся через устройство ppp0, так что подключение у нас просто упадет и работать ничего не будет

Итак, в файле /etc/ppp/ip-up.d/corbinavpn мы обьясним системе, что с VPN и DNS серверами она должна общаться через наш локальный шлюз.

Маршруты на DNS:

Удаляем маршрут-паразит. Переменные $1 и $5 задаются самим ppp-клиентом:

Маршрут на VPN-сервер:

В принципе в большинстве случаев этого достаточно, но у Корбины много серверов. И после установки соединения с 81.21.0.249, система может решить, что адрес сервера 81.21.0.255 хотя подключена к 249. И здесь опять будут проблемы. Поэтому лучше всего прописать маршрут на всю подсеть с VPN-серверами:

Окончательный вид файла corbinavpn (в моём случае):

Файлу надо дать исполняемый бит

После поднятия VPN, таблица маршрутизации должна выглядить примерно так:

Первые две строчки адреса на DNS, чтобы наш компьютер не пытался общаться с ними через VPN туннель. Третья: общаемся с VPN сервером через наш районный шлюз. 4-5 - IPTV, с мультикастом (233.32.240.0) общаемся через интерфейс eth0, 10.227.169.6 - это мой ip. 6 - моя подсеть. 7 - юзеры за пределом моей подсети. 8 - локальное кольцо. 9 - маршрут по умолчанию (все что не описано выше, идет через этот маршрут).

Диагностика проблем

В первую очередь нужно обратить внимание на таблицу маршрутизации. Проверить доступность VPN-сервера (ping tp.corbina.net). Попробовать запустить xl2tpd с ключём -D.

Иногда к примеру демон ругается на отсутствие каталога /var/run/xl2tpd или файла /var/run/xl2tpd/l2tp-control. В таком случае в файле /etc/init.d/xl2tpd нужно прописать:

Только не в секцию start (как это указано в некоторых руководствах), а где-то между DESC=xl2tpd и case "$1" in.

Так-же не забываем о syslog:

/etc/network/interfaces

Все описанное выше предполагает, что для инициализации интерфейса eth0, вы не используете что-то типа Network-Manager. Без него /etc/network/interfaces выглядит так:

В Debian настроить VPN PPTP/L2TP можно также с помощью графической утилиты vpnpptp: http://code.google.com/p/vpnpptp/


Раздача интернета на домашнюю сеть (вторую сетевую карту) CategoryNetwork