Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Security —> mpd + freeradius + mysql

mpd + freeradius + mysql

Автор: Abigor.


Мне потребовался mpd для связи с удаленным филиалом университета в другом городе. Хотели они пользоваться софтом написанным нашими АСУ. Так же мое руководство предложило начать продавать интернет в общежитии. По этому было необходимо крутить какие-то биллинговые системы. Покупать что-либо готовое ни кто не хотел. По этой причине все легло на мои плечи. Повертев пару готовых бесплатных решения, я понял что это не для меня, по ряду причин. Так что было принято решение поставить связку mpd + freeradius + mysql и набросать на коленке пару perl скриптов для управления всем этим богатством.
Начнем, судя по статьям что есть на этом сайте, у вас уже должен стоять сервер mysql настроенный и готовый для работы. Так что начнем с установки mpd:
[root@webdes ~]# cd /usr/ports/net/mpd4/
[root@webdes ~]# make install clean

Так, поставилось, теперь поставим radius сервер:
[root@webdes mpd4]# cd ../freeradius

Отконфигурируем его перед сборкой:
[root@webdes mpd4]# make config

Из всего обилия, я выбрал только эти два параметра:
[X] MYSQL         With MySQL database support 
[X] EXPERIMENTAL  Build experimental modules   

 
Первый нам необходим для поддержки radius хранения данных в mysql, а второе я отметил на всякий случай. пусть будет.
дальше собираем его:
[root@webdes ~]# make install clean

Так все поставили, теперь будем конфигурить это богатство.
Первым начнем пожалуй с mpd. Я просто приведу свои конфигурационные файлы. Я думаю почитав первод на ru(она пока не полная), или оригинал на en и будет все понятно.
Перейдем в папку с конфиками mpd:
[root@webdes freeradius]# cd /usr/local/etc/mpd4/
[root@webdes mpd4]# ls
drwxr-xr-x   2 root  wheel    512 29 мар 14:10 ./
drwxr-xr-x  17 root  wheel   1024 29 мар 14:25 ../
-r--r--r--   1 root  wheel  11260 29 мар 14:10 mpd.conf.sample
-r--r--r--   1 root  wheel   3730 29 мар 14:10 mpd.links.sample
-r--r--r--   1 root  wheel  39085 29 мар 14:10 mpd.script.sample
-r--r--r--   1 root  wheel    834 29 мар 14:10 mpd.secret.sample

Копируем все файлы с *.sample и кроме mpd.secret.sample и mpd.script.sample они нам не нужены =) так что у вас должно получиться вот так:
[root@webdes mpd4]# ls
total 106
drwxr-xr-x   3 root  wheel    512 20 мар 15:48 .
drwxr-xr-x  21 root  wheel   2048 29 мар 13:35 ..
-r--r--r--   1 root  wheel   1668 20 мар 15:48 mpd.conf
-r--r--r--   1 root  wheel  11260 26 фев 10:10 mpd.conf.sample
-r--r--r--   1 root  wheel    478  9 фев 11:14 mpd.links
-r--r--r--   1 root  wheel   3730 26 фев 10:10 mpd.links.sample
-r--r--r--   1 root  wheel  39085 26 фев 10:10 mpd.script.sample
-r--r--r--   1 root  wheel    834 26 фев 10:10 mpd.secret.sample
[root@webdes mpd4]#

Ну а теперь само содержание mpd.conf и mpd.links:
[root@webdes mpd4]# cat mpd.conf
startup:
    set console port 777
    set console ip 127.0.0.1
    set console user admin admin
    set console open
    set web port 666
    set web ip 10.1.1.25
    set web user admin admin
    set web open

default:
    load pptp0
    load pptp1
    load pptp2
    load pptp3
    load pptp4
#--- skip ---#

pptp0:
    new -i ng0 pptp0 pptp0
    load pptp_all

pptp1:
    new -i ng1 pptp1 pptp1
    load pptp_all

pptp2:
    new -i ng2 pptp2 pptp2
    load pptp_all

pptp3:
    new -i ng3 pptp3 pptp3
    load pptp_all

pptp4:
    new -i ng4 pptp4 pptp4
    load pptp_all
#--- skip ---#

pptp_all:
    set ipcp ranges 192.168.1.1/32 192.168.1.0/24
    set iface disable on-demand
    set bundle enable multilink
    set link yes acfcomp protocomp
    set link no pap chap
    set link enable chap
    set link keep-alive 60 180
    set ipcp yes vjcomp
    set ipcp dns 10.1.1.7
    set ccp yes mppc
    set ccp yes mpp-e40
    set ccp yes mpp-e56
    set ccp yes mpp-e128
    set bundle enable compression
    set ccp yes mpp-stateless
    set bundle yes crypt-reqd
    set pptp enable incoming
    set pptp disable originate
    set iface enable tcpmssfix
    set radius server 127.0.0.1 pass_to_radius 1812 1813
    set radius timeout 10
    set radius config /usr/local/etc/mpd4/radius.conf
    set radius retries 3
    set auth acct-update 300
    set auth enable radius-auth
    set auth enable radius-acct

[root@webdes mpd4]#

[root@webdes mpd4]# cat mpd.links
pptp0:
    set link type pptp
    set pptp disable delayed-ack
    set pptp disable windowing

pptp1:
    set link type pptp
    set pptp disable delayed-ack
    set pptp disable windowing

pptp2:
    set link type pptp
    set pptp disable delayed-ack
    set pptp disable windowing

pptp3:
    set link type pptp
    set pptp disable delayed-ack
    set pptp disable windowing

pptp4:
    set link type pptp
    set pptp disable delayed-ack
    set pptp disable windowing
#--- skip ---#
[root@webdes mpd4]#

Как всегда будте внимательны с лишними пробелами и табуляциями, mpd очень к ним чувствителен.
Mpd вроде настроили, теперь займемся самим freeradius. Конфигурационные файлы у него лежат в директорией ниже, перейдем в нее:
[root@webdes mpd4]# cd ../raddb

Тут нас интересуют пожалуй только radiusd.conf, clients, clients.conf, sql.conf, naslist. Вроде все, больше ни чего не забыл. Эти файлы изобилуют комментариями на en, переводить пока желания нету, может позже, хотя там и так все доходчиво написано. Чтож, начнем, там очень много параметров, большая часть нас не интересует, по этому я буду говорит что искать и на что исправить.
В radiusd.conf:
log_stripped_names=yes
# логируем атрибут User-Name если он найден в запросе
log_auth=yes
# логируем запросы аутентификации
log_auth_badpass=yes
# если пароль неверен - пишем его в лог
log_auth_goodpass=no
# верные пароли незачем писать в лог

Это была секция логирования работы radius
Дальше ищем:
$INCLUDE ${confdir}/sql.conf

Если закомментировано, надо снять комментарий.
Дальше ищем:
#  Read the 'users' file
  files

приводим к такому виду:
#  Read the 'users' file
#  files

Чуть ниже есть вот это:
#  See "Authorization Queries" in sql.conf
#  sql

приводим к такому виду:
#  See "Authorization Queries" in sql.conf
  sql

Так, это основные настройки чтоб только все завелось и работало, но нам этого же мало =)
Дальше ищем:
See rlm_sql_log(5) manpage. 

под ним секция модуля логирования, там же надо знать кто сколько и когда скачал. Так что с
#sql_log {
#    path = ${radacctdir}/sql-relay
#    acct_table = "radacct"
#    postauth_table = "radpostauth"

#    Start = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
#    NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
#    AcctSessionTime, AcctTerminateCause) VALUES                 \
#    ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
#    '%{Framed-IP-Address}', '%S', '0', '0', '');"
#    Stop = "INSERT INTO ${acct_table} (AcctSessionId, UserName,  \
#    NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
#    AcctSessionTime, AcctTerminateCause) VALUES                 \
#    ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
#    '%{Framed-IP-Address}', '0', '%S', '%{Acct-Session-Time}',  \
#    '%{Acct-Terminate-Cause}');"
#    Alive = "INSERT INTO ${acct_table} (AcctSessionId, UserName, \
#    NASIPAddress, FramedIPAddress, AcctStartTime, AcctStopTime, \
#    AcctSessionTime, AcctTerminateCause) VALUES                 \
#    ('%{Acct-Session-Id}', '%{User-Name}', '%{NAS-IP-Address}', \
#    '%{Framed-IP-Address}', '0', '0', '%{Acct-Session-Time}','');"

#    Post-Auth = "INSERT INTO ${postauth_table} (id, user, pass, reply, \
#    date) VALUES \
#    ('','%{User-Name}', '%{User-Password:-Chap-Password}', \
#    '%{reply:Packet-Type}', '%S');"
#}

снимаем все комментарии.
Дальше ищем:
$INCLUDE  ${confdir}/sqlippool.conf

и снимаем с него комментарий.
Ищем дальше:
#  Log traffic to an SQL database.
#
#  See "Accounting queries" in sql.conf
#  sql

#
#  Instead of sending the query to the SQL server,
#  write it into a log file.
#
#  sql_log

Снимаем комменты с sql и sql_log, думаю комментарии на en говорят сами за себя.
Чуть ниже расположена эта секция:
session {
   radutmp

#
#  See "Simultaneous Use Checking Querie" in sql.conf
#  sql
}

Так же снимает комментарии с sql.
Ищем дальше =)
#  See "Authentication Logging Queries" in sql.conf
#  sql
#  Instead of sending the query to the SQL server,
#  write it into a log file.
#
#  sql_log

Так же снимает комментарии с sql и с sql_log
С файлом radiusd.conf вроде закончили. Теперь перейдем к файлу clients.conf
Ищем в нем:
#  The secret can be any string, up to 31 characters in length.
#
  secret          = tester123

и в секцию secret вписываем наш пароль с которым mpd будет ломится, то есть из моего примера mpd.conf это будет выглядеть вот так:
#  The secret can be any string, up to 31 characters in length.
#
  secret          = pass_to_radius

А в коней файла дописывает:
client 127.0.0.1 {
    secret      = pass_to_radius
    shortname   = local
    nastype     = other
}

Откроем файл с именем clients и вписываем в него следующее:
localhost       pass_to_radius
127.0.0.1       pass_to_radius

Переходим к файлу naslist и добавляем в конец следующее:
127.0.0.1       local       portslave

Ну и наконец вроде последний файл, это sql.conf, в нем нас интересует настройка подключения к mysql.
# Connect info
  server = "localhost"
  login = "root"
  password = "rootpass"

# Database table configuration
  radius_db = "radius"

Задаем тут свои данные, у меня везде для теста стояло freeradius.
кажется, все, больше ни чего править в нем не надо.
создадим теперь файлик с настройками подключения к freeradius для mpd.
[root@webdes raddb]# cd ../mpd4/
[root@webdes mpd4]# touch radius.conf

В него внесем следующее:
acct 127.0.0.1 pass_to_radius
auth 127.0.0.1 pass_to_radius

Так, теперь создадим юзверя и базу в mysql.
Я лично делал так, так что кто хочет может по другому =)
[root@webdes freeradius]# cd /usr/local/etc/raddb
[root@webdes raddb]# cd /usr/ports/net/freeradius
[root@webdes freeradius]# make patch
===>  Vulnerability check disabled, database not found
===>  Found saved configuration for freeradius-1.1.5
===>  Extracting for freeradius-1.1.5
=> MD5 Checksum OK for freeradius-1.1.5.tar.bz2.
=> SHA256 Checksum OK for freeradius-1.1.5.tar.bz2.
===>   freeradius-1.1.5 depends on file: /usr/local/bin/perl5.8.8 - found
===>  Patching for freeradius-1.1.5
===>   freeradius-1.1.5 depends on file: /usr/local/bin/perl5.8.8 - found
===>  Applying FreeBSD patches for freeradius-1.1.5
[root@webdes freeradius]# cd work/freeradius-1.1.5/doc/examples/
[root@webdes examples]#
[root@webdes examples]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34279 to server version: 4.1.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE IF NOT EXISTS freeradius;
Query OK, 1 row affected (0.03 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, 
  -> CREATE, DROP, INDEX, ALTER on `freeradius`.* to 
  -> freeradius@localhost IDENTIFIED BY 'freeradius';
Query OK, 0 rows affected (0.00 sec)

mysql> use freeradius;
Database changed
mysql> \. mysql.sql
Query OK, 0 rows affected (0.02 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye
[root@webdes examples]#

Ну вроде все, можно пробывать запускать.
[root@webdes examples]# echo 'mpd_enable="YES"' >> /etc/rc.conf
[root@webdes examples]# echo 'mpd_flags="-b"' >> /etc/rc.conf
[root@webdes examples]# echo 'radiusd_enable="YES"' >> /etc/rc.conf

А, черт, тестового пользователя забыли добавить. Сделаем это сейчас.
[root@webdes examples]# mysql -u freeradius -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34652 to server version: 4.1.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use freeradius;
Database changed
mysql> INSERT INTO `radcheck` VALUES (1,'abigor','Password','==','testpass');
Query OK, 1 row affected (0.02 sec)

mysql> INSERT INTO `radreply` VALUES (1,'abigor','Framed-IP-Address',
  -> ':=','192.168.1.13');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `radreply` VALUES (2,'abigor','Framed-IP-Netmask',
  -> ':=','255.255.255.255');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `radreply` VALUES (3,'abigor','Framed-Protocol',':=','PPP');
Query OK, 1 row affected (0.00 sec)

mysql> quit
Bye
[root@webdes examples]#

Теперь запускаем сервер radius пробуем его протестировать:
[root@webdes examples]# /usr/local/etc/rc.d/radiusd start
Starting radiusd.
Thu Mar 29 17:28:56 2007 : Info: Starting - reading configuration files ...
[root@webdes examples]# radtest abigor testpass 127.0.0.1 0 pass_to_radius
Sending Access-Request of id 165 to 127.0.0.1 port 1812
        User-Name = "abigor"
        User-Password = "testpass"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=165, length=75
        Framed-IP-Address = 192.168.1.13
        Framed-IP-Netmask = 255.255.255.255
        Framed-Protocol = PPP
[root@webdes examples]#

Если получите такой же ответ, то значит radius сервер готов к использованию, и можем начинать радоваться как дети. Перед запуском mpd настроим его логи, на до же видеть его работу.
В файл /etc/syslog.conf добавим следующее:

!mpd
*.*                                             /var/log/mpd.log

Создадим файл, и поставим на него права:
[root@webdes examples]# touch /var/log/mpd.log
[root@webdes examples]# chmod 600 /var/log/mpd.log
[root@webdes examples]# /etc/rc.d/syslogd restart
Stopping syslogd.
Waiting for PIDS: 37745.
Starting syslogd.
[root@webdes examples]# /usr/local/etc/rc.d/mpd4 start
Starting mpd4.
[root@webdes examples]#

Смотрим что в логах:
[root@webdes examples]# cat /var/mpd.log
Mar 29 17:43:02 webdes mpd: process 38975 started, version 4.1 (root@webdes.isea.ru 10:10 26-Feb-2007)
Mar 29 17:43:02 webdes mpd: web: listening on 10.1.1.25 666
Mar 29 17:43:02 webdes mpd: [pptp0] using interface ng0
Mar 29 17:43:02 webdes mpd: [pptp1] using interface ng1
Mar 29 17:43:02 webdes mpd: [pptp2] using interface ng2
Mar 29 17:43:02 webdes mpd: [pptp3] using interface ng3
Mar 29 17:43:02 webdes mpd: [pptp4] using interface ng4
#--- skip ---#

Смотрим интерфейсы:
ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng1: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng4: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500

Так, все замечательно, пробуем подключиться из винды. Сразу скажу, у меня подключение настроено с требованием шифрования. Не хочу чтоб кто-то смотрел мой трафик =)
Ну смотрим лог, должно быть что-то на подобии этого.
Mar 29 17:46:44 webdes mpd: PPTP connection from 10.1.10.13 4213
Mar 29 17:46:44 webdes mpd: pptp0: attached to connection with 10.1.10.13 4213
Mar 29 17:46:44 webdes mpd: [pptp0] Accepting PPTP connection
Mar 29 17:46:44 webdes mpd: [pptp0] opening link "pptp0"...
Mar 29 17:46:44 webdes mpd: [pptp0] link: OPEN event
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: Open event
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: state change Initial --> Starting
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: LayerStart
Mar 29 17:46:44 webdes mpd: [pptp0] attaching to peer's outgoing call
Mar 29 17:46:44 webdes mpd: [pptp0] link: UP event
Mar 29 17:46:44 webdes mpd: [pptp0] link: origination is remote
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: Up event
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: state change Starting --> Req-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: SendConfigReq #1
Mar 29 17:46:44 webdes mpd: ACFCOMP
Mar 29 17:46:44 webdes mpd: PROTOCOMP
Mar 29 17:46:44 webdes mpd: MRU 1500
Mar 29 17:46:44 webdes mpd: MAGICNUM de93d5fa
Mar 29 17:46:44 webdes mpd: AUTHPROTO CHAP MSOFTv2
Mar 29 17:46:44 webdes mpd: MP MRRU 1600
Mar 29 17:46:44 webdes mpd: MP SHORTSEQ
Mar 29 17:46:44 webdes mpd: ENDPOINTDISC [802.1] 00 04 76 20 20 ec
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: rec'd Configure Request #54 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: MRU 1500
Mar 29 17:46:44 webdes mpd: MAGICNUM 34f4db79
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: SendConfigAck #54
Mar 29 17:46:44 webdes mpd: MRU 1500
Mar 29 17:46:44 webdes mpd: MAGICNUM 34f4db79
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: state change Req-Sent --> Ack-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: rec'd Configure Reject #1 link 0 (Ack-Sent)
Mar 29 17:46:44 webdes mpd: ACFCOMP
Mar 29 17:46:44 webdes mpd: PROTOCOMP
Mar 29 17:46:44 webdes mpd: MP MRRU 1600
Mar 29 17:46:44 webdes mpd: MP SHORTSEQ
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: SendConfigReq #2
Mar 29 17:46:44 webdes mpd: MRU 1500
Mar 29 17:46:44 webdes mpd: MAGICNUM de93d5fa
Mar 29 17:46:44 webdes mpd: AUTHPROTO CHAP MSOFTv2
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: rec'd Configure Ack #2 link 0 (Ack-Sent)
Mar 29 17:46:44 webdes mpd: MRU 1500
Mar 29 17:46:44 webdes mpd: MAGICNUM de93d5fa
Mar 29 17:46:44 webdes mpd: AUTHPROTO CHAP MSOFTv2
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: state change Ack-Sent --> Opened
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: auth: peer wants nothing, I want CHAP
Mar 29 17:46:44 webdes mpd: [pptp0] CHAP: sending CHALLENGE len:17
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: LayerUp
Mar 29 17:46:44 webdes mpd: [pptp0] CHAP: rec'd RESPONSE #1
Mar 29 17:46:44 webdes mpd: Name: "abigor"
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: Auth-Thread started
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: Trying RADIUS
Mar 29 17:46:44 webdes mpd: [pptp0] RADIUS: RadiusAuthenticate for: abigor
Mar 29 17:46:44 webdes mpd: [pptp0] RADIUS: rec'd RAD_ACCESS_ACCEPT for user abigor
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: RADIUS returned authenticated
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: Auth-Thread finished normally
Mar 29 17:46:44 webdes mpd: [pptp0] CHAP: ChapInputFinish: status authenticated
Mar 29 17:46:44 webdes mpd: [pptp0] CHAP: sending SUCCESS len:42
Mar 29 17:46:44 webdes mpd: [pptp0] LCP: authorization successful
Mar 29 17:46:44 webdes mpd: [pptp0] Bundle up: 1 link, total bandwidth 64000 bps
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: Open event
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: state change Initial --> Starting
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: LayerStart
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: Open event
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: state change Initial --> Starting
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: LayerStart
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: Up event
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: state change Starting --> Req-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: SendConfigReq #1
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.1
Mar 29 17:46:44 webdes mpd: COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: Up event
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: state change Starting --> Req-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: SendConfigReq #1
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x010000e0:MPPE(40, 56, 128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: Accounting-Thread started
Mar 29 17:46:44 webdes mpd: [pptp0] RADIUS: RadiusAccount for: abigor (Type: 1)
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: rec'd Configure Request #45 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: [pptp0] RADIUS: rec'd RAD_ACCOUNTING_RESPONSE for user abigor
Mar 29 17:46:44 webdes mpd: IPADDR 0.0.0.0
Mar 29 17:46:44 webdes mpd: NAKing with 192.168.1.13
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: SendConfigNak #45
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.13
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: rec'd Configure Request #44 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000060:MPPE(40, 128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: SendConfigNak #44
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: rec'd Configure Reject #1 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: COMPPROTO VJCOMP, 16 comp. channels, no comp-cid
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: SendConfigReq #2
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.1
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: rec'd Configure Nak #1 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: SendConfigReq #2
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: Accounting-Thread finished normally
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: rec'd Configure Request #46 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.13
Mar 29 17:46:44 webdes mpd: 192.168.1.12 is OK
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: SendConfigAck #46
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.13
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: state change Req-Sent --> Ack-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: rec'd Configure Request #45 link 0 (Req-Sent)
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: SendConfigAck #45
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: state change Req-Sent --> Ack-Sent
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: rec'd Configure Ack #2 link 0 (Ack-Sent)
Mar 29 17:46:44 webdes mpd: IPADDR 192.168.1.1
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: state change Ack-Sent --> Opened
Mar 29 17:46:44 webdes mpd: [pptp0] IPCP: LayerUp
Mar 29 17:46:44 webdes mpd: 192.168.1.1 -> 192.168.1.13
Mar 29 17:46:44 webdes mpd: [pptp0] IFACE: Up event
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: rec'd Configure Ack #2 link 0 (Ack-Sent)
Mar 29 17:46:44 webdes mpd: MPPC
Mar 29 17:46:44 webdes mpd: 0x01000040:MPPE(128 bits), stateless
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: state change Ack-Sent --> Opened
Mar 29 17:46:44 webdes mpd: [pptp0] CCP: LayerUp
Mar 29 17:46:44 webdes mpd: Compress using: mppc (MPPE(128 bits), stateless)
Mar 29 17:46:44 webdes mpd: Decompress using: mppc (MPPE(128 bits), stateless)

Смотрим интерфейсы:
ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng1: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1396
        inet 192.168.1.1 --> 192.168.1.13 netmask 0xffffffff
ng2: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng3: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
ng4: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> mtu 1500
#--- skip ---#

В этом всем, пожалуй самое важное это вот эта строчка
Mar 29 17:46:44 webdes mpd: [pptp0] AUTH: RADIUS returned authenticated

она говорит что мы использовали для авторизации сервер radius.
Ну и вот эти:

Mar 29 17:46:44 webdes mpd: Compress using: mppc (MPPE(128 bits), stateless)
Mar 29 17:46:44 webdes mpd: Decompress using: mppc (MPPE(128 bits), stateless)

Говорят что компрессия и шифрование работает, я их понимаю так :)
После подключения в базу должно валиться информация по трафику подключившегося пользователя.

Ну вот и все пока.

P.S. Писал большую часть по памяти смотря на готовые конфиги, опробовать было негде, так что пишите в форум если что не так, буду поправлять.

2P.S. В дальнейшем опишу как с помощью radius рассовывать пользователей по пулам в ipfw и может быть покажу скрипты для биллинга нацарапанные мной на коленке =)

3P.S. забыл добавить, что в ядро вкомпилино только вот это:
[root@webdes examples]# grep NETGRAPH /usr/src/sys/i386/conf/PROXY |grep -v '#'
options         NETGRAPH
options         NETGRAPH_BPF
options         NETGRAPH_IFACE
options         NETGRAPH_KSOCKET
options         NETGRAPH_MPPC_ENCRYPTION
options         NETGRAPH_PPP
options         NETGRAPH_PPTPGRE
options         NETGRAPH_SOCKET
options         NETGRAPH_TCPMSS
options         NETGRAPH_VJC
[root@webdes examples]#

Больше ни чего. модулями ни чего не подгружается, не сильно их люблю.

Используемая литература:
http://www.opennet.ru/base/net/mpd_freerdius_nibs.txt.html
http://www.opennet.ru/base/net/freenibs_mpd_bill.txt.html
http://www.opennet.ru/base/net/vpn_setup.txt.html
http://www.yandex.ru/
http://www.google.ru/



размещено: 2007-03-29,
последнее обновление: 2007-03-29,
автор: Abigor


Happy_demon, 2007-03-29 в 15:41:16

обязательно попробую. на днях буду сервак переставлять, так там на mpd толпа скриптов up down, каждого пользователя надо руками в эти скрипты забивать, смотреть, чтоб правила файрвола не пересекались- ужас. скрипты для биллинга-зер гуд. веб морду бы еще (ну я наглый).

Almos, 2007-03-30 в 1:55:31

Посмотрите в сторону Abills (http://abills.asmodeus.com.ua). Зачем изобретать велосипед, когда он уже изобретен?
Биллинг как раз заточен под нашу всеми любимою Фрю, есть все самое нужное. Так что пробуйте товарищи, не пожалеете :) .

universite, 2007-04-08 в 17:55:25

А где сами скрипты? :)

wel, 2007-04-08 в 21:25:41

Есть еще freenibs :)
Да еще и с веб-мордой

Antti, 2007-04-23 в 0:24:37

Все сделал по написанному выше - в итоге:

mysql> CREATE DATABASE IF NOT EXISTS freeradius;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT SELECT, INSERT, UPDATE, DELETE,
   -> CREATE, DROP, INDEX, ALTER on `freeradius`.* to
   -> freeradius@localhost IDENTIFIED BY 'freeradius';
Query OK, 0 rows affected (0.00 sec)

mysql> use freeradius;
Database changed
mysql> \. mysql.sql
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

mysql>

Что за Warning такой ? Вроде в статье все ровно....
далее, не запускается радиус...

/usr/local/etc/rc.d/radiusd start
Starting radiusd.
Mon Apr 23 00:13:13 2007 : Info: Starting - reading configuration files ...
Mon Apr 23 00:13:13 2007 : Error: /usr/local/etc/raddb/clients.conf[108]: Line too long
Mon Apr 23 00:13:13 2007 : Error: Errors reading radiusd.conf
/usr/ports/net/freeradius/work/freeradius-1.1.6/doc/examples/>

Ну и это тоже соответственно....

/usr/ports/net/freeradius/work/freeradius-1.1.6/doc/examples/>radtest abigor testpass 127.0.0.1 0 pass_to_radius
Sending Access-Request of id 75 to 127.0.0.1 port 1812
       User-Name = "abigor"
       User-Password = "testpass"
       NAS-IP-Address = 255.255.255.255
       NAS-Port = 0
Re-sending Access-Request of id 75 to 127.0.0.1 port 1812
       User-Name = "abigor"
       User-Password = "testpass"
       NAS-IP-Address = 255.255.255.255
       NAS-Port = 0
^C
/usr/ports/net/freeradius/work/freeradius-1.1.6/doc/examples/>

В логах MPD вот так вот....

/usr/ports/net/freeradius/work/freeradius-1.1.6/doc/examples/>cat /var/log/mpd.log
Apr 22 22:24:54 neo999 mpd: process 995 started, version 4.1 (root@neo999.test.local 15:25 20-Apr-2007)
Apr 22 22:24:54 neo999 mpd: CONSOLE: listening on 127.0.0.1 777
Apr 22 22:24:54 neo999 mpd: caught fatal signal segv
Apr 22 22:24:54 neo999 mpd: fatal error, exiting
Apr 22 22:24:54 neo999 mpd: process 995 terminated

Подскажите - это я накосячил или в статье неточности ?

abigor, 2007-04-23 в 11:41:33

2Antti ты читаешь что написано по поводу того, для чего эти комментарии? если да, то дуй в форум и создавай ветку там, у меня лично идеи есть, но говорит о них я буду только в форуме.

adyyewq, 2007-05-23 в 15:15:20

В вышеприведенном виде mpd НЕ работает на freebsd 6.2

HOSTER, 2007-07-14 в 8:45:09

In file included from rlm_sqlippool.c:37:
/usr/ports/net/freeradius/work/freeradius-1.1.2/src/include/modpriv.h:7:18: ltdl.h: No such file or directory
In file included from rlm_sqlippool.c:37:
/usr/ports/net/freeradius/work/freeradius-1.1.2/src/include/modpriv.h:16: error: syntax error before "lt_dlhandle"
In file included from rlm_sqlippool.c:39:
../rlm_sql/rlm_sql.h:15:18: ltdl.h: No such file or directory
In file included from rlm_sqlippool.c:39:
../rlm_sql/rlm_sql.h:68: error: syntax error before "lt_dlhandle"
gmake[6]: *** [rlm_sqlippool.lo] Error 1
gmake[6]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2/src/modules/rlm_sqlippool'
gmake[5]: *** [common] Error 2
gmake[5]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2/src/modules'
gmake[4]: *** [all] Error 2
gmake[4]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2/src/modules'
gmake[3]: *** [common] Error 2
gmake[3]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2/src'
gmake[2]: *** [all] Error 2
gmake[2]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2/src'
gmake[1]: *** [common] Error 2
gmake[1]: Leaving directory `/usr/ports/net/freeradius/work/freeradius-1.1.2'
gmake: *** [all] Error 2
*** Error code 2

Stop in /usr/ports/net/freeradius.


Что ето за хрень ????????

front, 2007-09-08 в 16:14:37

была заморочка с freerafius, статья помогла, спс.

больше заинтересовала веб-морда ака биллинг к этому чуду =)

imp, 2007-09-10 в 23:12:36

Тоже надо было раздавать инет в общаге.
На мой взгляд лучше использовать протокол PPPoE нежели PPTP. Была реализована связка: штатный PPPoE демон (что работает чз netgraph), freeradius, PostgreSQL. Просто  иногда надоедает отвечать одно и тоже на вопрос почему инет не коннектиться (локаьный IP меняют). А юзеров больше 100.
Если интересно пишите на мыло.

kostas, 2007-09-24 в 11:39:03

А может кто нибудь подсказать, можно ли иметь один радиус сервер, но в зависимости от nas'а использовать различные механизмы аутентификации?

HOSTER, 2007-11-28 в 15:25:54

Ok !))Все прелесно пашет на фряхе 6.2 просто порти нужно обновить вот и все !)) Спс за статью!))

Al, 2007-12-19 в 20:22:50

Ставьте MySQL ПЕРЕД радиусом. он собирается в соответствии с установленным мускулем или ставит клиента сам. Перейти потом на другую версию мускуля достаточно сложно без пересборки радиуса

Barracuda, 2008-05-30 в 3:04:46

Для полного счастья нехватает добавления в /etc/newsyslog.conf строчки с кастрированием лога mpd и добавления mpd-dictionary к freeradius (ну удобно для некоторых скриптов). А статья на твёрдые 4+.
Предварив некоторые вопросы: на mpd5 данный конфиг не работает, читаем маны...

KampuH, 2009-03-25 в 10:50:25

на mpd5 данный конфиг не работает, читаем маны...

а можно для блондинок пояснить какие маны читать по freeradius-у или mpd5?

KampuH, 2009-03-25 в 16:38:28

А всё же очень таки интересен вопрос про веб-морду. Ни кто не может подсказать что лучше использовать?

KampuH, 2009-03-25 в 16:39:13

А всё же очень таки интересен вопрос про веб-морду. Ни кто не может подсказать что лучше использовать?

Al, 2009-03-25 в 16:45:40

ДЛя администрирования mpd с freeradius отлично подходит ezRADIUS. Это веб-морда к мускулю,позволяющая добавлять-изменять-удалять пользователей-аттрибуты, смотреть статистику по пользователям-трафику,причины отключения пользователей, активных пользователей (типа 5006 порта,но на mpd5 эта штука порой валит сам процесс)и т.п. На офф сайте есть описалово со скринами.

Vesper, 2009-04-08 в 0:15:38

Процесс валиться только если по телнету на 5005 порт при для выхода вбить quit ане exit тогда логически mpd себя завершает, а через вебморду по 5006 ниодного случая у меня небыло.

Al, 2009-04-08 в 9:09:40

Насчет валится - это глюк ТОЛЬКО mpd5 в том случает,если одновременно запрос на подключение пришел от более,чем 50 пользователей и в это время обновилась страница на 5006 порт. При том надо поймать момент. Такое было и не раз. Поэтому и написал.

abigor, 2009-04-24 в 17:48:59

вот настройка этого же дела для mpd5 + freeradius2 + mysql

WHAT-CAN-BE-BETTE-THEN-SEX, 2009-05-19 в 18:21:29

Всё зделал, всё работает а вот нет это впн не раздаёт что делал (У меня нет через adls модем бридж) на самом серваке нет есть а через впн не идёт((?

abigor, 2009-05-20 в 4:07:08

ну, видимо надо nat настроить :)

WHAT-CAN-BE-BETTE-THEN-SEX, 2009-06-19 в 14:56:21

А это обезательно создавать 1000... таких строк:
pptp0:
   new -i ng0 pptp0 pptp0
   load pptp_all

pptp1:
   new -i ng1 pptp1 pptp1
   load pptp_all
................
???????

abigor, 2009-06-20 в 16:58:58

для mpd4 да, а все прогрессивные люди используют уже mpd5, там все намного симпатичнее

CTOPMbI4, 2009-07-14 в 6:56:17

Хотелось бы уточнить. Есть ли возможность совместить mpd.
1. Есть шлюз с фряхой.
2. mpd в качестве клиента до сервера провайдера.( получает инет).
3. mpd в качестве сервера для клиентов. (раздает инет)
Если возможность это совместить и как реализовать?

abigor, 2009-07-14 в 8:03:43

можно :)
первым куском конфигуриш подключение к провайдеру, вторым куском конфигуриш сервер для клиентов. MPD сначало подключится к прову и потом будет раздавать инет. Пример есть в mpd.conf.sample что-то конкретно сюда писать смысла не вижу

Dorlas, 2009-10-02 в 12:08:52

А как в mpd версии 5 добиться того, чтобы в журнал писался IP-адрес удаленного VPN-клиента ? А то все отлично работает, все протоколируется...кто IP клиента, с которого была VPN-сессия...

Al, 2009-10-02 в 12:23:50

Это поля для ввода комментариев к статье, а не для вопросов.!!!!!!!!!!!!!!!!!!!!!
set radius enable [message-autentic][peer-as-calling][report-mac]

Dorlas, 2009-10-02 в 13:17:34

А 5-й версии MPD нет таких опций.

Dorlas, 2009-10-02 в 13:28:15

Заработало после вот такой опции:
set link enable peer-as-calling

medj, 2010-01-11 в 11:53:48

Не подскажете, можно ли клиенту коннектящемуся (и как) выдавать dns-суффикс подключения?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0699 секунд
Из них PHP: 47%; SQL: 53%; Число SQL-запросов: 77 шт.
Исходный размер: 95865; Сжатая: 17445