Ключевые слова:vpn, ppp, tunnel, crypt, linux, chap, pptp, (найти похожие документы)
From: Sergey Sikorsky <fagot#kalinovka.net>
Date: Mon, 20 Dec 2004 18:21:07 +0000 (UTC)
Subject: PPTP туннель с MS-CHAPv2 (аутентификация), MPPE (шифрование) и MPPC (сжатие)
Оригинал: http://fine.kalinovka.net/modules.php?op=modload&name=News&file=article&sid=3
Шифрованный VPN туннель к провайдеру: MS-CHAPv2, MPPE, MPPC и все, все , все...
Мне кажется, этот вопрос сегодня стоит перед многими пользователями
сети Интернет и ОС Linux в частности... в отличии от ответа на него :)
А настройка такого подключения у новичков вызывает некоторые проблемы.
Да, из Microsoft Windows несколько проще подключится к VPN серверу по
протоколу PPTP от Microsoft, используя протокол аутентификации
Microsoft MS-CHAPv2, с использованием метода шифрования Microsoft
Point-to-Point Encryption и сжатия Microsoft Point-to-Point
Compression...
Но к счастью, из под ОС Linux это тоже вполне реализуемо, а на
сегодняшний день - еще и довольно просто, что и будет
продемонстрировано ниже.
MS-CHAPv2 - Это протокол аутентификации, широко используемый в продуктах от
Microsoft, в связи с чем стал, по-сути, стандартом. Он более защищен
по сравнению с PAP/CHAP и является усовершенствованной версией
MS-CHAP, использовавшегося ранее и славящегося своими дырами в плане
безопасности сейчас :)
Его поддержка есть в pppd последних версий, для более ранних
существуют патчи. К ядру MS-CHAP не имеет никакого отношения.
MPPE и MPPC
MPPE - это Microsoft Point-to-Point Encryption, метод шифрования
данных при передаче по VPN-каналу. Тоже довольно популярен, даже
используется в некоторых аппаратных шлюзах, роутерах и т.д. Разумеется
очень рекомендуется к применению, особенно при построении туннеля
через "дикий" Интернет.
Хотя можно и не использовать, тогда никаких патчей искать не нужно.
Для использования MPPE нужна поддержка в самом ядре Linux и в pppd. В
pppd поддержка появилась относительно недавно, в ядре... ну, пока что
ждем, надеемся и верим :)
А патчи уже есть.
Раньше я использовал патчи ppp-2.4.0-openssl-0.9.6-mppe.patch и
linux-2.4.16-openssl-0.9.6b-mppe.patch
(http://www.advancevpn.com/cgi-bin/content?lang=1&cid=LIBRARY&hid=15 ),
но сейчас это кажется уже не модно :)
С включением в pppd поддержки MPPE, в исходниках была директория
include/linux/mppe, в которой тоже лежал патч к ядру, но почему-то в
pppd-2.4.2 ее нет.
Также имеется kernelmod с уже готовым модулем, но он тоже считается
уже устаревшим и к тому же заточен только под ядра RedHat (поправьте
меня, если я ошибаюсь).
Самый распространенный набор патчей на сегодня "живет" на
http://public.planetmirror.com/pub/mppe (ранее -
http://mirror.binarix.com/ppp-mppe )
Впрочем, я буду использовать немножко другие, авторства Jan Dubiec -
http://www.polbox.com/h/hs001
Автор добавил немножко "отсебятины", поэтому для работы требуется
пропатчить не только ядро, но и pppd (да, да и новый тоже).
Достоинством этих патчей является поддержка MPPC - Microsoft
Point-to-Point Compression, если кому надо...
Система: Slackware 9.1, linux-2.4.22
Патчи ложатся на исходный код нормально, без напильника, и кажется
работают :) После применения патча к ядру, в `make menuconfig`
появляется новая опция - "Microsoft PPP compression/encryption
(MPPC/MPPE) (NEW)":
Linux Kernel v2.4.22 Configuration
[*] Network device support
ARCnet devices --->
< > Dummy net driver support
<M>Bonding driver support
<M>EQL (serial line load balancing) support
<M>Universal TUN/TAP device driver support
< > Ethertap network tap (OBSOLETE)
Ethernet (10 or 100Mbit) --->
Ethernet (1000 Mbit) --->
[ ] FDDI driver support
[ ] HIPPI driver support (EXPERIMENTAL)
<M>PPP (point-to-point protocol) support
[ ] PPP multilink support (EXPERIMENTAL)
[ ] PPP filtering
<M>PPP support for async serial ports
<M>PPP support for sync tty ports
<M>PPP Deflate compression
<M>PPP BSD-Compress compression
<M>Microsoft PPP compression/encryption (MPPC/MPPE) (NEW)
<M>PPP over Ethernet (EXPERIMENTAL)
< > SLIP (serial line) support
Wireless LAN (non-hamradio) --->
Token Ring devices --->
[ ] Fibre Channel driver support
<M>Red Creek Hardware VPN (EXPERIMENTAL)
<M>Traffic Shaper (EXPERIMENTAL)
Wan interfaces --->
PCMCIA network device support --->
Ее следует включить (CONFIG_PPP_MPPE=y, можно модулем ) и пересобрать
ядро. Это уж как кому хочется :)
Установка PPPD
http://samba.org/ppp
Берем последний pppd, собираем, ставим. Тут и далее вместо `make
install` будет применятся checkinstall (
http://asic-linux.com.mx/~izto/checkinstall ), кто не знает что
это, могут делать по старинке.
Качаем:
user@linux:~$ cd
user@linux:~$ wget ftp://ftp.samba.org/pub/ppp/ppp-2.4.2.tar.gz
user@linux:~$ md5sum ./ppp-2.4.2.tar.gz
362bcf218fba8afbb9afbee7471e5dac ./ppp-2.4.2.tar.gz
Патч к pppd для поддержки MPPE и MPPC:
user@linux:~$ wget http://www.polbox.com/h/hs001/ppp-2.4.2-mppe-mppc-1.0.patch.gz
user@linux:~$ md5sum ./ppp-2.4.2-mppe-mppc-1.0.patch.gz
844c9d343d7511902b5380b27eca417e ./ppp-2.4.2-mppe-mppc-1.0.patch.gz
Собираем и ставим:
user@linux:~$ cd /usr/src/
user@linux:/usr/src$ tar -zxvf ~/ppp-2.4.2.tar.gz
user@linux:/usr/src$ cd ./ppp-2.4.2/
user@linux:/usr/src/ppp-2.4.2$ ./configure
user@linux:/usr/src$ zcat ~/ppp-2.4.2-mppe-mppc-1.0.patch.gz |patch -p1
user@linux:/usr/src/ppp-2.4.2$ make
user@linux:/usr/src/ppp-2.4.2$ sudo checkinstall
Если вы (почему-то) хотите использовать бета-версии pppd. У меня бета
(ppp_2.4.2b1) никогда нормально не собиралась:
user@linux:~$ cd /usr/src
user@linux:/usr/src$ tar -zxvf ~/ppp_2.4.2b1.tgz
user@linux:/usr/src$ cd ppp
user@linux:/usr/src/ppp$ ./configure
user@linux:/usr/src/ppp$ make
...
creating config.h
make -C radiusclient
make[3]: Вход в каталог `/usr/src/ppp/pppd/plugins/radius/radiusclient'
cd . && autoheader
./aclocal.m4:49: error: m4_defn: undefined macro: _m4_divert_diversion
acoldnames.m4:86: AM_PROG_INSTALL is expanded from...
./aclocal.m4:49: the top level
autoconf: tracing failed
make[3]: *** [stamp-h.in] Ошибка 1
make[3]: Выход из каталог `/usr/src/ppp/pppd/plugins/radius/radiusclient'
make[2]: *** [radiusclient/lib/.libs/libradiusclient.a] Ошибка 2
make[2]: Выход из каталог `/usr/src/ppp/pppd/plugins/radius'
make[1]: *** [all] Ошибка 2
make[1]: Выход из каталог `/usr/src/ppp/pppd/plugins'
make: *** [all] Ошибка 2
Лечится даунгрейдом m4 на время установки, или так:
user@linux:/usr/src/ppp$ cd ./pppd/plugins/radius/radiusclient
user@linux:/usr/src/ppp/pppd/plugins/radius/radiusclient$ rm aclocal.m4
user@linux:/usr/src/ppp/pppd/plugins/radius/radiusclient$ update
user@linux:/usr/src/ppp/pppd/plugins/radius/radiusclient$ aclocal
user@linux:/usr/src/ppp/pppd/plugins/radius/radiusclient$ cd ../../../..
user@linux:/usr/src/ppp$ make
user@linux:/usr/src/ppp$ sudo checkinstall
Ядро
http://kernel.org
Качаем и устанавливаем патч к ядру для поддержки MPPE и MPPC. На сайте
разработчика (патча, не ядра :) есть куча патчей под разные версии
ядра, поищите, что вам больше подходит.
user@linux:~$ cd
user@linux:~$ wget http://www.polbox.com/h/hs001/linux-2.4.22-mppe-mppc-0.98.patch.gz
user@linux:~$ md5sum ~/linux-2.4.22-mppe-mppc-0.98.patch.gz
90d3dffa4bada645ce2fa9605684565e /home/fagot/linux-2.4.22-mppe-mppc-0.98.patch.gz
user@linux:~$ su -
root@linux:~# cd /usr/src/linux
root@linux:/usr/src/linux# zcat /home/fagot/linux-2.4.22-mppe-mppc-0.98.patch.gz |patch -p1
root@linux:/usr/src/linux# make menuconfig
Собираем то, что вышло:
root@linux:/usr/src/linux# make dep
root@linux:/usr/src/linux# make bzlilo
root@linux:/usr/src/linux# mv /vmlinuz /System.map /boot
root@linux:/usr/src/linux# lilo
root@linux:/usr/src/linux# make modules
root@linux:/usr/src/linux# make modules_install
Если все прошло нормально, можно попробовать загрузить модуль. Если
поддержка MPPE была включена как модуль, систему можно не перегружать.
root@linux:/usr/src/linux# modprobe ppp_mppe_mppc
root@linux:/usr/src/linux# lsmod|grep ppp_mppe_mppc
ppp_mppe_mppc 20568 0 (unused)
ppp_generic 16444 0 [ppp_mppe_mppc]
Все получилось. Закрепим результат:
# echo "alias ppp-compress-18 ppp_mppe_mppc" >>/etc/modules.conf
Установка PPTP-клиента
http://pptpclient.sourceforge.net
Если в системе уже есть (или планируется pptpd), pptp-клиент
(linux-pptp) не нужен. Иначе -- в путь-дорожку:
Качаем linux-pptp с http://pptpclient.sourceforge.net/#download
user@linux:~$ cd
user@linux:~$ md5sum ./pptp-linux-1.4.0.tar.gz
9e5c07de3e347c7125ed94824cebeaee ./pptp-linux-1.4.0.tar.gz
user@linux:~$ cd /usr/src/
user@linux:/usr/src$ tar -zxvf ~/pptp-linux-1.4.0.tar.gz
user@linux:/usr/src$ cd ./pptp-linux-1.4.0/
user@linux:/usr/src/poptop-1.1.4$ make
user@linux:/usr/src/pptp-linux-1.4.0$ sudo checkinstall
Настройка сводится к минимуму:
user@linux:/usr/src/pptp-linux-1.4.0$ sudo mkdir /etc/ppp/peers
Файл /etc/ppp/peers/ISP-NAME:
name LOGIN
remotename ISP-NAME
debug
lock
deflate 0
defaultroute
file /etc/ppp/options.pptp
pty "/usr/sbin/pptp SERVER --nolaunchpppd"
Файл /etc/ppp/options.pptp:
lock noauth nobsdcomp nodeflate
Файл /etc/ppp/pap-secrets ИЛИ /etc/ppp/chap-secrets:
# client server secret IP addresses
LOGIN ISP-NAME PASSWORD *
Тут LOGIN - логин на сервере, PASSWORD - соответствующий пароль,
ISP-NAME - что угодно, чтоб было понятно, куда звоним, SERVER -
IP-адрес или имя сервера провайдера.
Запуск:
user@linux:~$ sudo /usr/sbin/pppd call ISP-NAME
Если `ifconfig` покажет интерфейс ppp0, значит все гут, можно
пингануть Яндекс для уверенности. Если нет - смотреть
/var/log/messages (внимательно)
Бонус: для того, чтоб с клиента сделать сервер делаем следующее:
Установка PPTPD
http://www.poptop.org
Качаем pptpd-1.1.4-b4.tar.gz с понравившегося зеркала -
http://sourceforge.net/project/showfiles.php?group_id=44827
user@linux:~$ cd
user@linux:~$ md5sum ./pptpd-1.1.4-b4.tar.gz
58603224998f22542e8d7ecb357bc006 ./pptpd-1.1.4-b4.tar.gz
user@linux:~$ cd /usr/src/
user@linux:/usr/src$ tar -zxvf ~/pptpd-1.1.4-b4.tar.gz
user@linux:/usr/src$ cd ./poptop-1.1.4/
user@linux:/usr/src/poptop-1.1.4$ ./configure --prefix=/usr/local
--sysconfdir=/etc --localstatedir=/var
user@linux:/usr/src/poptop-1.1.4$ make
user@linux:/usr/src/ppp-2.4.2$ sudo checkinstall
Файл /etc/pptpd.conf:
debug
Файл /etc/ppp/options:
require-mschap-v2
mppe required
Остальные опции додумаете сами - man pppd (параметр mppe там тоже есть)
Файл /etc/ppp/chap-secrets:
# client server secret IP addresses
test * test 10.0.0.1
test1 * test1 10.0.0.2
test2 * test2 10.0.0.3
Запуск:
user@linux:/$ sudo /usr/local/sbin/pptpd
Проверяем запустился, или нет. Если что-то ему не понравится, pptpd об
этом прямо на консоль и скажет, кстати.
user@linux:/$ ps -A|grep pptpd
20425 ? 00:00:00 pptpd
Вот и все, приехали. Тут и сказочке конец, а кто слушал... тот
быстренько пошел на машину с Windows XP, создал новое VPN-соединение,
проверил в параметрах, стоит ли галка использовать шифрование,
используется ли MS-CHAPv2 и соединился с свеже-запущенным сервером.
Если все прошло хорошо - откройте окно состояния соединения, на
вкладке "Сведения" должно быть:
Проверка подлинности: MS CHAP V2
Шифрование: MPPE 128
Сжатие: MPPC
IP-адрес клиента: тот, что вы указали в chap-secrets
Если же ничего не вышло - смотрим /var/log/messages, /var/log/debug,
запоминаем с какой ошибкой вылетает клиент - и вперед на Google.com...
(c) Sergey Sikorsky AKA fagot 24.06.2004, час ночи
mail-to:fagot#kalinovka.net
PS. Сразу предупреждаю, на письма вида "А вот я все сделал как
написано, но ничего не работает..." отвечать НЕ БУДУ. Есть поисковики,
есть форум - http://www.linux.org.ru/profile/fagot/view-group.jsp?group=1340,
там и ищите и обрящите
если тебе не трудно немог бы ты рассказать как во FreeBSD настроить такое подключение. Т.е. у меня есть провайдер тоже CHAPv2 (аутентификация), но никак не получается, pptpclient установил, а что дальше делать никак не пойму
Попытался использовать эту статью как наглядное руководство (Slackware 10 2.4.26), но возикла проблема в логах пишет что не проходит авторизация CHAP нул провод на виндовую машину все работает.
А также после патчинга ядра в меню конфигурации нет опции
<M>Microsoft PPP compression/encryption (MPPC/MPPE), есть только MPPE
одуль ppp_mppe_mppc не собрался, а собрался модуль ppp_mppe и не более.
НАрод подскажите с какой стороны подступиться в данной ситуации.
Конфиг я проверял, к нему никаких притензий. Патчи были взяты с оригинальоного сайта для той версии и pptp и ядра. Так что я, честно говоря, не знаю как поступить, поэтому я решил все это поставить на FreeBSD. Теперь все заработало.