<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=Pppoe_%28mpd5_%2B_freeradius_3%29</id>
	<title>Pppoe (mpd5 + freeradius 3) - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=Pppoe_%28mpd5_%2B_freeradius_3%29"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:23:13Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Sql конфиг */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2023-05-30T21:18:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Sql конфиг&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;h2&amp;gt;PPPoE сервер на FreeBSD&amp;lt;/h2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будут задействованы:&lt;br /&gt;
* mpd5 в качестве pppoe-сервера &lt;br /&gt;
* freeradius версии '''3''' - в качестве radius-сервера&lt;br /&gt;
&lt;br /&gt;
== Описание принципа работы ==&lt;br /&gt;
&lt;br /&gt;
Mpd позволяет клиентам подключаться к серверу по pppoe или pptp протоколу.&lt;br /&gt;
&lt;br /&gt;
* Mpd принимает от абонента запрос на соединение и обращается к radius для проверки соответствия логин/пароль. Radius запускает mysql-процедуру radcheck.&lt;br /&gt;
* Если в БД логин существует и соответствует паролю, то клиенту разрешается соединение. Обратите внимание, абоненту в состоянии «заблокирован» не блокируется соединение - это нужно чтобы он имел доступ в личный кабинет даже если доступ в интернет у него запрещен. В личном кабинете он получит инфомацию о задолженности и не будет гадать почему не соединяется.&lt;br /&gt;
* После авторизации, radius передает mdp параметры соединения: ip, маску, а также другие данные, если необходимы (mysql-процедура radreply).&lt;br /&gt;
* После radius запускает post-auth query (mysql-процедуру radupdate) для установки признака авторизации (таблица auth_now).&lt;br /&gt;
* Mpd настраивается таким образом, что с определенным периодом будет посылать radius-у accounting пакеты для каждого соединения. Эти пакеты будут интерпретироваться как keep-alive пакеты, сообщающие NoDeny, что соединение не зависло. Accounting query ссылается на ту же процедуру radupdate, которая будет обновлять таблицу авторизаций.&lt;br /&gt;
* Ядро NoDeny удаляет из таблицы auth_now записи, которые давно не обновлялись (зависшие сессии).&lt;br /&gt;
* Если учетке пользователя будет выдан новый ip, а старый освобожден - будет послана команда mpd на сброс соединения, после чего абонент переподключится и получит новый ip.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Возможна работа как со статическими (когда ip прописан явно в учетке абонента и никогда не меняется), так и с динамическими ip. Во втором случае в админке NoDeny необходимо создать пул ip адресов в количестве раз в 5-10 большим чем предполагаемое количество абонентов. Тип ip - «динамический».&lt;br /&gt;
&lt;br /&gt;
==Установка Radius==&lt;br /&gt;
&lt;br /&gt;
Поскольку понадобится radius с модулем mysql, установим его не из бинарных пакетов (''pkg install freeradius''), а из портов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /usr/ports/net/freeradius3 &amp;amp;&amp;amp; make install clean&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Обязательно поставим галку напротив опции MYSQL'''&lt;br /&gt;
&lt;br /&gt;
Автозапуск:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysrc radiusd_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурирование===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /usr/local/nodeny/etc/raddb/* /usr/local/etc/raddb/&lt;br /&gt;
rm /usr/local/etc/raddb/sites-enabled/default &lt;br /&gt;
ee /usr/local/etc/raddb/sites-enabled/nodeny&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляем следующий текст:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server default {&lt;br /&gt;
    listen {&lt;br /&gt;
        type = auth&lt;br /&gt;
        ipaddr = *&lt;br /&gt;
        port = 1812&lt;br /&gt;
    }&lt;br /&gt;
    listen {&lt;br /&gt;
        type = acct&lt;br /&gt;
        ipaddr = *&lt;br /&gt;
        port = 0&lt;br /&gt;
    }&lt;br /&gt;
    authorize {&lt;br /&gt;
        sql&lt;br /&gt;
        pap&lt;br /&gt;
        chap&lt;br /&gt;
        mschap&lt;br /&gt;
    }&lt;br /&gt;
    authenticate {&lt;br /&gt;
        Auth-Type PAP {&lt;br /&gt;
            pap&lt;br /&gt;
        }&lt;br /&gt;
        Auth-Type CHAP {&lt;br /&gt;
            chap&lt;br /&gt;
        }&lt;br /&gt;
        Auth-Type MSCHAP {&lt;br /&gt;
            mschap&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    preacct {&lt;br /&gt;
        acct_unique&lt;br /&gt;
        preprocess&lt;br /&gt;
    }&lt;br /&gt;
    accounting {&lt;br /&gt;
        sql&lt;br /&gt;
        exec&lt;br /&gt;
        if(&amp;quot;%{sql:SELECT IF((SELECT 1 FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name='%{User-Name}' AND i.ip='%{Framed-IP-Address}'),1,0)}&amp;quot; &amp;lt; 1){&lt;br /&gt;
            update reply {&lt;br /&gt;
                mpd-drop-user = 1&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    session {&lt;br /&gt;
        radutmp&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
    post-auth {&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
    Post-Auth-Type REJECT {&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sql конфиг===&lt;br /&gt;
В консоли:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ee /usr/local/etc/raddb/mods-enabled/sql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляем следующий текст:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sql {&lt;br /&gt;
    driver = &amp;quot;rlm_sql_mysql&amp;quot;&lt;br /&gt;
    mysql {&lt;br /&gt;
        warnings = auto&lt;br /&gt;
    }&lt;br /&gt;
    server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port = 3306&lt;br /&gt;
    login = &amp;quot;nodeny&amp;quot;&lt;br /&gt;
    password = &amp;quot;hardpass&amp;quot;&lt;br /&gt;
    radius_db = &amp;quot;nodeny&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    read_groups = no&lt;br /&gt;
    authorize_check_query = &amp;quot;call radcheck('%{User-Name}', 0)&amp;quot;&lt;br /&gt;
    authorize_reply_query = &amp;quot;call radreply('%{User-Name}', '%{User-Password}')&amp;quot;&lt;br /&gt;
    accounting {&lt;br /&gt;
        reference = &amp;quot;%{tolower:type.%{Acct-Status-Type}.query}&amp;quot;&lt;br /&gt;
        type {&lt;br /&gt;
            start {&lt;br /&gt;
                query = &amp;quot;call radupdate('%{User-Name}','%{Framed-IP-Address}',\&lt;br /&gt;
                        'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
            interim-update {&lt;br /&gt;
                query = &amp;quot;${..start.query}&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
            stop {&lt;br /&gt;
                query = &amp;quot;call radstop('%{User-Name}', '%{Framed-IP-Address}')&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    post-auth {&lt;br /&gt;
        query = &amp;quot;call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\&lt;br /&gt;
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address};ses=%{Acct-Session-Id}')&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===В словарь атрибутов добавим специфичные для mpd5===&lt;br /&gt;
&lt;br /&gt;
Благодаря этим атрибутам, мы сможем заставить mpd5 переконнектить юзера, если изменился его ip. В консоли:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ee /usr/local/share/freeradius/dictionary&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавляем в конце файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
VENDOR          mpd             12341                                                              &lt;br /&gt;
                                                                                                   &lt;br /&gt;
BEGIN-VENDOR	mpd&lt;br /&gt;
&lt;br /&gt;
ATTRIBUTE	mpd-rule	1	string&lt;br /&gt;
ATTRIBUTE	mpd-pipe	2	string&lt;br /&gt;
ATTRIBUTE	mpd-queue	3	string&lt;br /&gt;
ATTRIBUTE	mpd-table	4	string&lt;br /&gt;
ATTRIBUTE	mpd-table-static	5	string&lt;br /&gt;
ATTRIBUTE	mpd-filter	6	string&lt;br /&gt;
ATTRIBUTE	mpd-limit	7	string&lt;br /&gt;
ATTRIBUTE	mpd-input-octets	8	string&lt;br /&gt;
ATTRIBUTE	mpd-input-packets	9	string&lt;br /&gt;
ATTRIBUTE	mpd-output-octets	10	string&lt;br /&gt;
ATTRIBUTE	mpd-output-packets	11	string&lt;br /&gt;
ATTRIBUTE	mpd-link	12	string&lt;br /&gt;
ATTRIBUTE	mpd-bundle	13	string&lt;br /&gt;
ATTRIBUTE	mpd-iface	14	string&lt;br /&gt;
ATTRIBUTE	mpd-iface-index	15	integer&lt;br /&gt;
ATTRIBUTE	mpd-input-acct	16	string&lt;br /&gt;
ATTRIBUTE	mpd-output-acct	17	string&lt;br /&gt;
ATTRIBUTE	mpd-action	18	string&lt;br /&gt;
ATTRIBUTE	mpd-peer-ident	19	string&lt;br /&gt;
ATTRIBUTE	mpd-iface-name	20	string&lt;br /&gt;
ATTRIBUTE	mpd-iface-descr	21	string&lt;br /&gt;
ATTRIBUTE	mpd-iface-group	22	string&lt;br /&gt;
ATTRIBUTE	mpd-drop-user	154	integer&lt;br /&gt;
&lt;br /&gt;
END-VENDOR	mpd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mysql процедуры===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radcheck`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64), IN only_one_session INT)&lt;br /&gt;
BEGIN&lt;br /&gt;
    SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd, 'hardpass') AS Value, ':='&lt;br /&gt;
        FROM users u WHERE name=login COLLATE utf8_bin AND&lt;br /&gt;
            IF(only_one_session &amp;lt; 1, true,&lt;br /&gt;
                NOT EXISTS (SELECT 1 FROM v_ips WHERE uid=u.id AND auth=1 AND last&amp;gt;(UNIX_TIMESTAMP() - 300) LIMIT 1)&lt;br /&gt;
            );&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radreply`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radreply`(IN login VARCHAR(64), IN password VARCHAR(64))&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE usr_id INT;&lt;br /&gt;
    DECLARE usr_ip VARCHAR(15) DEFAULT NULL;&lt;br /&gt;
    SELECT id INTO usr_id FROM users WHERE name=login AND password=AES_DECRYPT(passwd, 'hardpass') LIMIT 1;&lt;br /&gt;
    IF( usr_id IS NOT NULL ) THEN&lt;br /&gt;
        SELECT get_ip(usr_id) INTO usr_ip;&lt;br /&gt;
        SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';&lt;br /&gt;
        SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';&lt;br /&gt;
        SELECT NULL,login,'Framed-Protocol','PPP','=';&lt;br /&gt;
    END IF;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radupdate`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN usr_ip VARCHAR(16), IN properties VARCHAR(255))&lt;br /&gt;
BEGIN&lt;br /&gt;
    IF( SELECT 1 FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip ) THEN&lt;br /&gt;
        CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));&lt;br /&gt;
    END IF;&lt;br /&gt;
    UPDATE users SET name=login WHERE name=login LIMIT 1;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radstop`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radstop`(IN login VARCHAR(64), IN usr_ip VARCHAR(16))&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE usr_id INT;&lt;br /&gt;
    DECLARE auth_prop VARCHAR(255);&lt;br /&gt;
    DECLARE start_auth INT UNSIGNED;&lt;br /&gt;
    SELECT u.id, i.properties, i.start INTO usr_id, auth_prop, start_auth&lt;br /&gt;
        FROM v_ips i JOIN users u ON i.uid=u.id WHERE u.name=login AND i.ip=usr_ip AND i.auth=1;&lt;br /&gt;
    IF( usr_id IS NOT NULL ) THEN&lt;br /&gt;
        INSERT INTO auth_log (uid, ip, start, end, properties) VALUES&lt;br /&gt;
            (usr_id, INET_ATON(usr_ip), start_auth, UNIX_TIMESTAMP(), auth_prop);&lt;br /&gt;
        DELETE FROM auth_now WHERE ip=usr_ip LIMIT 1;&lt;br /&gt;
    END IF;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CALL radreply((SELECT name FROM users ORDER BY id LIMIT 1), (SELECT AES_DECRYPT(passwd, 'hardpass') FROM users ORDER BY id LIMIT 1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если получаем ошибку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
выполняем:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
и пересоздаем процедуры.&lt;br /&gt;
&lt;br /&gt;
В случае успеха, мы должны получить параметры соединения первого в списке абонентов NoDeny. Ему должен быть выдан статический ip либо же должен быть свободным какой-либо динамический ip в пуле. Примерно это будет выглядеть так:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------+-------+-------------------+----------+---+&lt;br /&gt;
| NULL | login | Framed-IP-Address | usr_ip   | = |&lt;br /&gt;
+------+-------+-------------------+----------+---+&lt;br /&gt;
| NULL | iva   | Framed-IP-Address | 10.0.0.10| = |&lt;br /&gt;
+------+-------+-------------------+----------+---+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Запускам Radius===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/radiusd start&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проверяем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
radtest login pass 127.0.0.1 0 hardpass5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где login и test соответственно логин и пароль реально существующей клиентской записи в NoDeny. Если получаем ошибку&lt;br /&gt;
&amp;lt;pre&amp;gt;radclient:: Failed to find IP address for имя_нашего_сервера&amp;lt;/pre&amp;gt;&lt;br /&gt;
Тогда в /etc/hosts в конце строки 127.0.0.1 допишим имя нашего сервера.&lt;br /&gt;
&lt;br /&gt;
Должны получить примерно такой ответ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=138, length=38&lt;br /&gt;
	Framed-IP-Address = 10.0.0.10&lt;br /&gt;
	Framed-IP-Netmask = 255.255.255.255&lt;br /&gt;
	Framed-Protocol = PPP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ином случае тушим radius и запускаем в режиме детального вывода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang='bash'&amp;gt;&lt;br /&gt;
/usr/local/etc/rc.d/radiusd stop&lt;br /&gt;
radiusd -X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Настройка mpd==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkg install mpd5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ведение логов&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo '!mpd' &amp;gt;&amp;gt; /etc/syslog.conf&lt;br /&gt;
echo '*.* /var/log/mpd.log' &amp;gt;&amp;gt; /etc/syslog.conf&lt;br /&gt;
touch /var/log/mpd.log&lt;br /&gt;
killall -HUP syslogd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ротация логов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo '/var/log/mpd.log 600 5 100 * JC' &amp;gt;&amp;gt; /etc/newsyslog.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
описание параметров ротации:&lt;br /&gt;
* 600 - права на файлы&lt;br /&gt;
* 5 - количество файлов в ротации&lt;br /&gt;
* 100 - ротация будет произведена при достижении лога 100 кб&lt;br /&gt;
* * - ротация по времени отключена&lt;br /&gt;
* JC  - упаковка файлов утилитой bzip2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Автозапуск:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sysrc mpd_enable=&amp;quot;yes&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурирование===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ee /usr/local/etc/mpd5/mpd.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
вставляем текст:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
startup:&lt;br /&gt;
        set user admin deletempd&lt;br /&gt;
        set console self 127.0.0.1 5005&lt;br /&gt;
        set console open&lt;br /&gt;
        set web self 0.0.0.0 5006&lt;br /&gt;
        set web open&lt;br /&gt;
&lt;br /&gt;
default:&lt;br /&gt;
        load pppoe_server&lt;br /&gt;
&lt;br /&gt;
pppoe_server:&lt;br /&gt;
&lt;br /&gt;
        create bundle template B&lt;br /&gt;
        set ipcp ranges 1.1.1.1/32 127.0.0.2/32&lt;br /&gt;
        set ipcp dns 1.1.1.1&lt;br /&gt;
        set ccp yes mppc&lt;br /&gt;
        set mppc yes e40&lt;br /&gt;
        set mppc yes e56&lt;br /&gt;
        set mppc yes e128&lt;br /&gt;
        set mppc yes stateless&lt;br /&gt;
        set ecp disable dese-bis dese-old&lt;br /&gt;
&lt;br /&gt;
        create link template common pppoe&lt;br /&gt;
        set link enable multilink&lt;br /&gt;
        set link action bundle B&lt;br /&gt;
        set link disable chap pap eap&lt;br /&gt;
        set link enable pap&lt;br /&gt;
        load radius&lt;br /&gt;
        set pppoe service &amp;quot;*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        create link template fxp1 common&lt;br /&gt;
        set link max-children 1000&lt;br /&gt;
        set pppoe iface fxp1&lt;br /&gt;
        set link enable incoming&lt;br /&gt;
radius:&lt;br /&gt;
        set radius server localhost hardpass5 1812 1813&lt;br /&gt;
        set radius retries 3&lt;br /&gt;
        set radius timeout 3&lt;br /&gt;
        set radius me 127.0.0.1&lt;br /&gt;
        set auth acct-update 45&lt;br /&gt;
        set auth enable radius-auth&lt;br /&gt;
        set auth enable radius-acct&lt;br /&gt;
        set radius enable message-authentic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Комментарии к mpd.conf:&lt;br /&gt;
&lt;br /&gt;
* Все строки, кроме комментариев и ссылок (строки которые заканчиваются на двоеточие), должны начинаться с отступа (пробела или табуляции).&lt;br /&gt;
* admin и deletempd - логин и пароль для доступа к управлению mpd5 через консоль или web-интерфейс (http://xx.xx.xx.xx:5006/). Не забудьте в фаерволе открыть tcp порт 5006.&lt;br /&gt;
* 1.1.1.1 - один из ip вашего сервера. Этот ip будет использован в туннеле: ip сервера &amp;lt;-&amp;gt; клиентский ip. Автор обычно прописывает этот ip на локальной заглушке.&lt;br /&gt;
* dns 1.1.1.1 - dns-сервер. Через пробел можно указать несколько.&lt;br /&gt;
* fxp1 - Интерфейс, на который будут приниматься pppoe соединения. Обратите внимание: указывается в двух местах конфига.&lt;br /&gt;
* acct-update 45 - период посылки accounting пакетов (используем для поддержания авторизаций) 45 секунд. Без надобности не меняйте этот параметр.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 /usr/local/etc/mpd5/mpd.conf&lt;br /&gt;
/usr/local/etc/rc.d/mpd5 forcestart&lt;br /&gt;
tail -f /var/log/mpd.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Блокирование одновременного подключения нескольких абонентов с одним логином===&lt;br /&gt;
&lt;br /&gt;
Принцип основан на том, что mysql процедура radcheck не будет возвращать пароль если в таблице авторизаций для заданного логина уже существует запись.&lt;br /&gt;
&lt;br /&gt;
Вам необходимо в /usr/local/etc/raddb/mods-enabled/sql в конце строки authorize_check_query заменить ноль на единицу.&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>