вторник, 9 сентября 2008 г.

VPN и Microsoft

После краха жесткого диска на домашнем маршрутизаторе, сделанном из старого ведра под Gentoo, пришлось настраивать все по новой. Дома у меня итнернет работает через vpn от местного кабельного провайдера. С настройками вопросов не возникло. Включил в ядре поддержку ppp и gre, поставил ppp и pptpclient и все радостно зашуршало.

Радость была не долгой, т.к. следующим шагом была необходимость настройки подключения по vpn на работу. В качестве шлюза, там используется Microsoft сервер, который не умеет работать с международными стандартами. Из возможностей авторизации на нем есть два варианта:
  • ms-chap
  • ms-chap v2
Кроме выражения - "каазлы!!!", на ум больше ни чего не приходит. Но раз мне эта кара досталась, будем выкручиваться. Не буду вдаваться в подробности, но остановлюсь на ключевых моментах.

1. Среди ключей для сборки пакета ppp есть ключ mppe-mppc. Этот ключ необходим если у вас старое ядро (до 2.6.14). С современными ядрами эту опцию в ppp необходимо отключить.

2. Создаем файл для туннеля /etc/ppp/peers/TUN

#/etc/ppp/peers/TUN
pty "pptp ip-vpn-server --nolaunchpppd"
name DOMAIN\\login
# Если не сделать refuse-chap то клиент будет ломиться по chap и получать отлуп сразу.
refuse-chap
# В моем случае надо блокировать eap, т.к. он не используется
refuse-eap
remotename TUN
file /etc/ppp/options.TUN
ipparam TUN


3. Создаем файл с опциями для pppd

#/etc/ppp/options.TUN
lock
noauth
nobsdcomp
nodeflate
# Это самая главная опция. Если не поднимается mppe то ни чего не работает.
require-mppe
# Т.к. мы работаем в интернет тоже по vpn, то для нашего туннеля
# необходимо блокировать смену маршрута по умолчанию
nodefaultroute


4. Пароль записываем в файл /etc/ppp/chap-secrets в следующем формате:

DOMAIN\\login TUN password *

5. Ну и на пред =) последок тестируем работу туннеля

pon TUN debug dump logfd 2 nodetach

6. Маленький тюнинг - установка руками номера ppp интерфейса. Так как у меня несколько туннелей, то каждому следующему присваивается следующий свободный порядковый номер, т.е. если поднят туннель ppp0 то следующими будет ppp1 и так далее. Данное поведение не всегда удобно, по этому я прибиваю номер гвоздями. Для этого в файле /etc/ppp/options.TUN устанавливается опция unit N, где N - номер туннеля, а точнее номер ppp интерфейса.