Подключаемся по PPTP

15 Май
2008

Настройка VPN подключения по протоколу PPTP (Point-to-Point Tunneling Protocol) во многом напоминает подключение по PPPoE. До недавнего времени в Linux из-за опасения лицензионных преследований по поводу протокола MPPE отсутствовала нормальная поддержка PPTP, что вызывало проблемы и требовало лишних телодвижений.

Полная поддержка этого протокола появилась, начиная с версии 2.6.13, официальная была начата с 2.6.14, а в 2.6.15 уже включен модуль шифрования PPP MPPE.
Все что нам нужно есть в репозитарии пакетов:

$ sudo apt-cache search pptp
pptp-linux — Point-to-Point Tunneling Protocol (PPTP) Client
knet — The Knet is a frontend to pppd.
kvpnc — vpn clients frontend for KDE
network-manager-pptp — network management framework (PPTP plugin)

Клиентскую часть обеспечивает проект PPTP Client (pptpclient.sourceforge.net). Поддерживается не только Linux, но и *BSD. Этот клиент совместим со всеми серверами, работающими по протоколу PPTP: Windows VPN, Linux PopTop, Cisco PIX и некоторыми другими. Клиент уже около 2 лет не обновлялся, поэтому можно устанавливать то, что есть в репозитарии.

$ sudo apt-get install pptp-linux

В качестве рекомендуемых пакетов в Ubuntu 7.10 предлагался «kernel-patch-mppe«, в моем случае все работало и без него, но при появлении проблем можно попробовать установить и его. Хотя я бы поставил самое последнее ядро, где этот протокол поддерживается изначально.
Кстати, следует отметить предусмотрительность ребят из Canonical. Все нужные пакеты для подключения по PPTP находятся на CD диске, который и попросят вставить в привод после ввода команды. Поэтому если PPTP — это единственная связь с внешним миром, добывать нужные пакеты окольными путями не придется.
Теперь приступаем к редактированию конфигурационного файла:

$ sudo mcedit /etc/ppp/options.pptp

lock noauth nobsdcomp nodeflate
# Отключаем ненужные проверки
refuse-pap
refuse-eap
#refuse-chap
refuse-mschap
persist
# Количество попыток подключения в случае обрыва соединения
maxfail 10
defaultroute
replacedefaultroute

В файл /etc/ppp/chap-secrets заносим логин и пароль в таком виде:

user pptp password *

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

domain\\user pptp password *

И создаем описание подключения, как это делали для PPPoE:

$ sudo mcedit /etc/ppp/peers/pptp
# Указываем адрес PPTP сервера
pty «pptp 10.10.10.1 —nolaunchpppd»
connect /bin/true
name user
# Идентификатор из второго поля в chap-secrets
remotename pptp
# Подключаем файл настроек
file /etc/ppp/options.pptp
#require-mppe-128 # с некоторыми провайдерами возникает проблема
require-mppe-40
ipparam pptp

Вот, собственно, и все настройки. Теперь подключаемся:

$ pon pptp

И смотрим вывод команды ifconfig. Если соединение установлено, и адрес получен, то считаем, что процесс настройки прошел успешно. Но обычно возни с PPTP несколько больше, чем с PPPoE. В случае неудачи выполняем:

$ pon pptp debug dump logfd 2 nodetach

В результате получим все параметры соединения и лог ошибок. Если есть необходимость в автоматическом подключении при загрузке системы, правим /etc/network/interfaces:

$ sudo mcedit /etc/network/interfaces
auto tunnel
iface tunnel inet ppp
provider pptp

Ошибки

Теперь об ошибках с которыми доводилось сталкиваться. Нормальная Нормальная поддержка MPPE появилась в 2.6.15 поэтому если ошибка не понятна можно MPPE попробовать отключить:

nomppe-40
nomppe-128
nomppe
nomppe-stateful

Далее такой вывод.

debug: [pppd] anon warn[open_inetsock:pptp_callmgr.c:326]: connect: No route to host
error: No route to host.

Это скорее всего показывает на проблему с роутингом. Следует проверить маршрут командой route и добавить в случае необходимости.Например так.

$ sudo route add default gw 192.168.1.1

Дальше.

sent [LCP ConfRej id=0x7 <auth chap MS-v2>]
rcvd [LCP ConfReq id=0x8 <mru 1500> <magic 0x77ff5e61> <auth chap MS-v2>]
No auth is possible

Попытка использовать ms-chap аутентификацию, которая не поддерживается. Лечится «refuse-mschap».

Теперь

pppd: The remote system is required to authenticate itself
pppd: but I couldn’t find any suitable secret (password) for it to use to do so.

Это значит что скрипт он не может найти нужную запись в chap-secrets. Проверяем соответствие второго поля и remotename. Если CHAP запись одна можно обойтись без remotename и указать * во втором поле.

user * passwd

Вроде все. Буду рад дополнениям.

4 Комментариев к Подключаемся по PPTP

Аватар

porese

Май 17th, 2008 | 18:22

А как быть с MPPC сжатием?

Аватар

porese

Июнь 16th, 2008 | 9:52

Ну что никто не сталкивался с данной проблемой, ладно если на сервере отключили компрессию, но обычно она включена. Остается только патчик? Но он нарушает патент от M$. Кто что выскажет по этому поводу?

Аватар

grinder

Июнь 16th, 2008 | 10:48

А что делать?

Аватар

melcomtec

Март 30th, 2009 | 15:03

Да, Линуксоид! Мало же ты знаешь о Линукс!

Комментировать

Наверх