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