Персональный
сайт
Игоря
Сысоева


 
english
обо мне
 
sysoev.ru
 
nginx
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
 

Что делать, если Вам не повезло, и у Вашего провайдера стоит Windows NT RAS

 

16.06.1999

Если Вы звоните на Windows NT Remote Access Server, то после строки "CONNECT" Вы не увидите никакого приглашения. Поэтому из нашего скрипта нужно убрать ожидание строки "login:" и завершать работу скрипта сразу после получения строки "CONNECT":

        ABORT           "ERROR"                 \
        ABORT           "NO DIALTONE"           \
        TIMEOUT         5                       \
        ""              "AT"                    \
        "OK"            "ATZ"                   \
        "OK"            "ATS7=120"              \
        ABORT           "BUSY"                  \
        ABORT           "NO ANSWER"             \
        ABORT           "NO CARRIER"            \
        "OK"            "ATDP$1"                \
        TIMEOUT         125                     \
        "CONNECT"       "\\с"

    if [ "$?" = "0" ]; then
        exit 0
    fi

Теперь можно приступить к аутентификации. Из того, что понимает pppd, Windows NT RAS поддерживает PAP и так называемый MS CHAP 80. Аутентификация через PAP пройдёт в том случае, если в Windows NT RAS установлен параметр "Allow any authentication including clear text". Если же тамошние администраторы страдают паранойей и установили параметры "Require encrypted authentication" или даже "Require Microsoft encrypted authentication", то единственный способ аутентификации — это MS CHAP 80.

Что же такое MS CHAP 80 ? В CHAP могут использоваться различные методы шифрования и передачи пароля. Описанному выше методу с использованием алгоритма MD5 присвоен номер 0x05. Microsoft разработал свой метод с использованием алгоритмов MD4 и DES для Windows NT 3.5, 3.51, 4.0 и Windows 95, назвал его MS CHAP и ему был присвоен номер 0x80. Это метод описан в RFC 2433. Но, видимо, что-то там оказалось не так и после SP3 был выпущены хотфиксы pptp3-fix (включённый в SP4) и rras30-fix с новым методом за номером 0x81, названный MS CHAP V2. Если Вам безумно интересно, то Вы можете посмотреть RFC 2759. Предыдущий MS CHAP теперь называется MS CHAP V1.

Если на Windows NT 4.0 установлен SP3, то после некоторого шаманства в реестре можно использовать и CHAP 5.

Начиная с FreeBSD 4.0, pppd может аутентифицироваться по методу MS CHAP 80. В более ранних версиях его нужно собрать с поддержкой этого метода:

  • Прежде всего, нам нужны исходники самого pppd.

  • Затем необходимо установить библиотеку, выполняющую шифрование методом DES.

    Дело в том, что, как правило, в ранних версиях FreeBSD не устанавливается всё, что связано с DES, а для шифрования паролей используется метод MD5. Тем не менее, в дистрибутив DES входит. Во FreeBSD 4.x DES устанавливается по умолчанию.

    Нам нужно взять из дистрибутива два файла des/des.aa и des/des.ab и вытащить из них всего два файла — /usr/include/des.h и /usr/lib/libdes.so.X.X:

    cat des.?? | ( cd / ;                                   \
        tar zxfv - usr/include/des.h 'usr/lib/libdes.so.*' )
    

  • Для FreeBSD 2.2.7 и 2.2.8 необходимо подпатчить chap_ms.c. Для FreeBSD 3.1 и выше этого делать не надо. Берём патч и накладываем его:

    patch < patch-chap_ms.txt
    

  • Добавляем в Makefile такие строки:

    #LDADD+=-lpcap
    #DPADD+=${LIBPCAP}
        
    # MS-CHAP support.  Requires the DES library.
    CFLAGS+=-DCHAPMS
    SRCS+=      chap_ms.c
    LDADD+=     -ldes
    DPADD+=     ${LIBDES}
        
    .include <bsd.prog.mk>
    
    В FreeBSD 3.0 и 3.1 эти строки уже есть, но они закомментированы. А в 3.2 и выше они раскомментированы, но будут учитываться, только если у Вас уже был установлен DES, поэтому Вам нужно закомментировать находящиеся там .if и .endif.

  • Теперь всё это можно собрать и установить:

    make
    make install BINDIR=/usr/sbin
    

После этого нужно записать наше имя "igor" и пароль "1234567" в файл /etc/ppp/chap-secrets:

igor            lame        1234567

Кроме того, мы указали имя удалённой стороны "lame". В отличие от CHAP 5, в CHAP 80 удалённая сторона не передаёт нам своё имя, поэтому оно может быть любым и его необходимо указать в параметре remotename:

pppd cuaa0 57600 lock connect '/etc/ppp/dial'           \
        user igor remotename lame                       \
        defaultroute noipdefault debug

Если Windows NT, на которой установлен RAS, для проведения аутентификации необходимо сделать запрос к контроллеру домена, то в этом случае Вам нужно добавить к Вашему имени имя домена. Для домена "dummies" Ваше имя в /etc/ppp/chap-secrets будет выглядеть так:

dummies\\igor   lame        1234567

Соответственно необходимо изменить и параметры pppd:

pppd cuaa0 57600 lock connect '/etc/ppp/dial'           \
        user dummies\\igor remotename lame              \
        defaultroute noipdefault debug
Необходимо заметить, что поддержка MS CHAP 80 в pppd ограничена аутентификацией себя и pppd не сможет аутентифицировать других по этому методу, поэтому Вам нужно отключить этот тип аутентификации на звонящих к Вам Windows NT 4.0.

Более подробно о настройках PPP-аутентификации в Windows NT RAS Вы можете прочитать в статье MS KnowledgeBase Q136634.

(C) Игорь Сысоев
http://sysoev.ru