pfSense - программный межсетевой экран/маршрутизатор, основанный на FreeBSD, неплохо работает "из коробки". Но с некоторым функционалом все же приходится повозиться и так сказать "доработать напильником".
Одним из таких мест стал pptp-клиент, который основывается на MPD (Multi-link PPP daemon). Клиент совершенно не хотел подключаться к корпоративному Microsoft Windows PPTP-серверу. Из логов было понятно, что клиент и сервер никак не могут договориться об используемом протоколе аутентификации.
При этом клиенты на Windows-машинах без проблем подключались. В состоянии подключения видна следующая картина:
Лог (Status->System logs->PPP):
- http://www.thin.kiev.ua автор раскрывает причину происходящего, оказывается по умолчанию в pfsense отключена поддержка шифрования от Microsoft. В надежде, что все вроде логично и должно сразу заработать, в файл interfaces.inc были внесены описанные изменения. Но к сожалению, в моем случае это не помогло.
- http://habrahabr.ru здесь в комментариях, в дополнение первого решения, предлагается отключить лишние методы шифрования непосредственно в настройках PPTP-сервера. Идея наверняка принесла бы свои плоды, жаль только, что проверить мне её не удалось. К настройкам сервера доступ я не имел.
- http://am-productions.biz когда я уже отчаялся, было найдено данное решение. Здесь описывается настройка mpd в качестве PPTP-клиента во FreeBSD. Автор приводит конфигурацию, в которой указаны нужные параметры, остается только разобраться что к чему и исправить конфигурацию в pfSense.
Для того чтобы разобраться, какие именно параметры шифрования необходимо указать, пришлось проанализировать все три решения, обратившись к документации MPD.
Первое, что хочется отметить, так это разницу в командах enable/disable, accept/deny, yes/no.
Первая пара enable/disable указывает, пожелания с нашей стороны.
Пара accept/deny указывает будем ли мы принимать пожелания противоположной стороны.
Команда "yes" - это одновременно enable и accept. А "no" - соответственно disable и deny.
Далее вернемся к состоянию подключения на Windows-клиентах:
Проверка подлинности MS CHAP V2
Шифрование MPPE 128
Сжатие MPPC
Для начала разберемся со сжатием и шифрованием.
set bundle enable compression // включаем протокол управления сжатием
set ccp yes mppc // разрешаем субпротокол сжатия/шифрования MPPC (Microsoft Point-to-Point Compression)
set mppc yes e40 e56 e128 // разрешаем 40,56,128-битное шифрование. В моем случае можно оставить только последнее.
set mppc yes stateless // разрешаем stateless-режим. Не совсем понятно, что же он делает, но в документации написано, что позволяет быстро восстановить соединение при потере пакетов.
Далее необходимо выбрать метод проверки подлинности. Почти все методы, используемые Microsoft, включены по-умолчанию и отлично работают без дополнительных команд. Остается только подтолкнуть mpd к принятию правильного решения. Нужно отметить, что chap - это псевдоним, который включает в себя chap-md5 chap-msv1 chap-msv2. Указывать их отдельно не нужно.
set link no pap eap // отключаем лишние методы, как указано во втором решении, только на стороне клиента, а не сервера.
Далее необходимо выбрать метод проверки подлинности. Почти все методы, используемые Microsoft, включены по-умолчанию и отлично работают без дополнительных команд. Остается только подтолкнуть mpd к принятию правильного решения. Нужно отметить, что chap - это псевдоним, который включает в себя chap-md5 chap-msv1 chap-msv2. Указывать их отдельно не нужно.
set link no pap eap // отключаем лишние методы, как указано во втором решении, только на стороне клиента, а не сервера.
Следующим шагом надо внести изменения в файл /etc/inc/interfaces.inc. Сделать это можно несколькими способами. Редактировать прямо из web-интерфейса: Diagnostics -> Edit File. здесь нажимаем "Browse", выбираем нужный файл, ищем в нем участок кода (удобно пользоваться поиском), вносим изменения и сохраняем. Также можно отредактировать из консоли, в меню выбираем пункт "8) Shell", откроется командная строка FreeBSD. Вводим команду "ee /etc/inc/interfaces.inc" без кавычек. Откроется редактор ee (Easy Editor) и уже в нем производится правка. Главное внимательно проверить, тот ли кусок кода править, нужный участок начинается примерно на 1440 строке. В итоге получаем:
if (!isset($ppp['verbose_log']))
$mpdconf .= <<<EOD
set bundle enable compression
set ccp yes mppc
set mppc yes e40 e56 e128 stateless
#log -bund -ccp -chat -iface -ipcp -lcp -link
EOD;
foreach($ports as $pid => $port){
$port = get_real_interface($port);
$mpdconf .= <<<EOD
create link static {$interface}_link{$pid} {$type}
set link action bundle {$interface}
set link {$multilink} multilink
set link keep-alive 10 60
set link max-redial 0
EOD;
if (isset($ppp['shortseq']))
$mpdconf .= <<<EOD
set link no shortseq
EOD;
if (isset($ppp['acfcomp']))
$mpdconf .= <<<EOD
set link no acfcomp
EOD;
if (isset($ppp['protocomp']))
$mpdconf .= <<<EOD
set link no protocomp
EOD;
$mpdconf .= <<<EOD
set link no pap eap
set link action bundle {$interface}
set link {$multilink} multilink
set link keep-alive 10 60
set link max-redial 0
EOD;
if (isset($ppp['shortseq']))
$mpdconf .= <<<EOD
set link no shortseq
EOD;
if (isset($ppp['acfcomp']))
$mpdconf .= <<<EOD
set link no acfcomp
EOD;
if (isset($ppp['protocomp']))
$mpdconf .= <<<EOD
set link no protocomp
EOD;
$mpdconf .= <<<EOD
set link no pap eap
# set link disable chap pap
# set link accept chap pap eap
set link disable incoming
Теперь можно создавать PPTP-сессии. Если сессия уже создана, то нужно отключить и снова включить привязанный к ней сетевой интерфейс. После внесения изменений все заработало. Из логов видно какой метод аутентификации и шифрования были выбраны.
Лог (Status->System logs->PPP):
Распространенной ошибкой в ходе настройки PPTP/PPPOE-клиента является некорректно указанный IP-адрес клиента. Если адрес выдается автоматически, нужно внести в поле "Local IP address" 0.0.0.0 и указать корректную маску сети, например /24.
Все вышеописанное выполнялось и проверялось на pfSense 2.0.1. и успешно работает на 2.1. После обновления pfSense изменения нужно вносить заново.
# set link accept chap pap eap
set link disable incoming
Теперь можно создавать PPTP-сессии. Если сессия уже создана, то нужно отключить и снова включить привязанный к ней сетевой интерфейс. После внесения изменений все заработало. Из логов видно какой метод аутентификации и шифрования были выбраны.
Лог (Status->System logs->PPP):
Все вышеописанное выполнялось и проверялось на pfSense 2.0.1. и успешно работает на 2.1. После обновления pfSense изменения нужно вносить заново.
Спасибо!
ОтветитьУдалитьИнтересное исследование, сейчас тоже обратил внимание на этот дистрибутив для роутера
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьThe Poker Room at Mohegan Sun - Mapyro
ОтветитьУдалитьThe 광명 출장안마 Poker Room at Mohegan Sun is a room 영주 출장샵 and lounge that features a variety 김해 출장샵 of different poker tables, 경기도 출장안마 ranging from Texas Hold'em to 순천 출장샵 Texas