FreeBSD 5.2.1
MPD 3.18
#cat mpd.conf
default:
load pptp0
pptp0:
# создаем интерфейс, бандл, линк загружаем стандарт
new pptp0 pptp0
load standart
standart:
# Настраиваем Bundle layer
# Выключаем мульти линк
set bundle disable multilink
# Enable authentication via RADIUS.
set bundle enable radius-auth
# Enable accounting via RADIUS
set bundle enable radius-acct
# Настраиваем Interface layer
# This option causes the interface to operate in dial-on-demand mode
set iface dis on-demand
# Запрашивать rss( requested segment size ) не больше MTU
set iface enable tcpmssfix
# Настраиваем IPCP layer
# запрашивать адреса у RADIUS сервера
set ipcp enable radius-ip
# Отдаем клиентам DNS по запросу
set ipcp dns 172.16.24.1 172.16.25.1
# Вешаем предворительные адреса на концы линка
set ipcp ranges 10.0.36.1/32 10.0.36.2/32
# Настройки Link layer
# Определяем тип линка как VPN (pptp)
set link type pptp
# Определяем метод шифрования пароля
set link enable chap-md5
# Если нет активносить через каждые 30 с. послать keep-alive и ждать ответа 10 с. иначе разывать
set link keep-alive 30 10
# Дополнительные параметры для VPN
# Разрешаем входящие соединения
set pptp enable incoming
# Always include ACK even if already sent
set pptp enable always-ack
#
set pptp dis windowing
# Определяем RADIUS сервер
set radius server 172.16.4.13 password 1812 1813
# Количество попыток соединения с RADIUS
set rad ret 3
# Сколько ждать ответа от радиуса
set rad time 30
Проблемма заключатеся в том, что судя по логам клиент отправляет два Chap Response'а. Второй респонс приходит к MPD, когда уже отправлен Акаунтинг к радиусу. Этот самый второй респонс от клиента обрабатывается как велит rfc по chap, и как следствие от mpd посылается еще один запрос на аутентификацию/авторизацию к радиусу, который естественно заканчивается неудачно, т.к. выдаваемый радиусом ip-адрес уже выдан при "первом" обращении. Как результат соединение с mpd не выполняется.
Вот логи соединения:
[pptp0] LCP: state change Ack-Sent --> Opened
[pptp0] LCP: phase shift ESTABLISH --> AUTHENTICATE
[pptp0] LCP: auth: peer wants nothing, I want CHAP
Пошел челендж.
[pptp0] CHAP: sending CHALLENGE
[pptp0] LCP: LayerUp
pptp0-0: ignoring SetLinkInfo
[pptp0] LCP: rec'd Ident #2 link 0 (Opened)
MESG: MSRASV5.10
[pptp0] LCP: rec'd Ident #3 link 0 (Opened)
MESG: MSRAS-0-ASU-HEAD2
Получен первый респонс
[pptp0] CHAP: rec'd RESPONSE #1
Name: "200"
Аутентификация/авторизация, выделение адреса RADIUS'ом.
[pptp0] RADIUS: RadiusAddServer Adding 172.16.4.13
[pptp0] RADIUS: RadiusPutAuth: RADIUS_CHAP (MD5) peer name: 200
[pptp0] RADIUS: RadiusSendRequest: RAD_ACCESS_ACCEPT for user 200
[pptp0] RADIUS: RadiusGetParams: RAD_FRAMED_IP_ADDRESS: 10.0.36.71
[pptp0] RADIUS: RadiusGetParams: RAD_FRAMED_IP_NETMASK: 255.255.255.255
[pptp0] RADIUS: RadiusSetAuth: Trying to use IP-address from radius-server
[pptp0] RADIUS: RadiusSetAuth: using this IP: 10.0.36.71
Response is valid
[pptp0] CHAP: sending SUCCESS
[pptp0] LCP: authorization successful
[pptp0] LCP: phase shift AUTHENTICATE --> NETWORK
[pptp0] setting interface ng0 MTU to 1400 bytes
[pptp0] up: 1 link, total bandwidth 64000 bps
[pptp0] IPCP: Up event
[pptp0] IPCP: state change Starting --> Req-Sent
[pptp0] IPCP: SendConfigReq #1
IPADDR 10.0.36.1
COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Выполнение акаунтинга
[pptp0] RADIUS: RadiusAccount for: 200
[pptp0] RADIUS: RadiusAddServer Adding 172.16.4.13
[pptp0] RADIUS: RadiusAccount: Sending accounting data (Type: 1)
[pptp0] RADIUS: RadiusSendRequest: RAD_ACCOUNTING_RESPONSE for user 200
[pptp0] IPCP: SendConfigReq #2
IPADDR 10.0.36.1
COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Получен второй респонс, который все портит
[pptp0] CHAP: rec'd RESPONSE #1
Not expected, but that's OK
Name: "200"
Повторная Аутентификация/авторизация через RADIUS.
[pptp0] RADIUS: RadiusAddServer Adding 172.16.4.13
[pptp0] RADIUS: RadiusPutAuth: RADIUS_CHAP (MD5) peer name: 200
[pptp0] RADIUS: RadiusSendRequest: RAD_ACCESS_REJECT for user 200
Как следствие отлуп.
[pptp0] CHAP: sending FAILURE
[pptp0] LCP: authorization failed
Отлуп клиенту.
[pptp0] device: CLOSE event in state UP
pptp0-0: clearing call
pptp0-0: killing channel
[pptp0] PPTP call terminated
[pptp0] IFACE: Close event
[pptp0] IPCP: Close event
[pptp0] IPCP: state change Req-Sent --> Closing
[pptp0] IPCP: SendTerminateReq #3
[pptp0] error writing len 8 frame to bypass: Network is down
[pptp0] IFACE: Close event
pptp0: closing connection with 192.168.36.71:1961
[pptp0] IFACE: Close event
[pptp0] device is now in state CLOSING
[pptp0] rec'd unexpected protocol CCP on link 0, rejecting
[pptp0] error writing len 20 frame to bypass: Network is down
[pptp0] device: DOWN event in state CLOSING
[pptp0] device is now in state DOWN
Может у кого есть мысли на эту тему? Поделитесь пожалуйста.