Документация → Настройка PPPoE сервера mpd5Первая часть состоит из описания принципа работы, можете ее пропустить и перейти к настройке.
Mpd позволяет клиентам подключаться к серверу по pppoe/pptp протоколам.
Mysql-процедура radreply для получения ip клиента запускает функцию get_ip, которая смотрит есть ли у данного клиента статический ip в таблице ip_pool. Если нет, то пытается выделить динамический (поле type='dynamic'). При этом поле release устанавливается в значение времени, когда этот ip следует освободить. Процедура set_auth периодически обновляет это поле (аналогично полю last таблицы auth_now). Таким образом, пока клиент авторизован, поле release всегда указывает в будущее.
После того, как клиент перестает быть авторизованным и release становится равным текущему времени - динамический ip «отвязывается» от клиента (освобождается). Set_auth всегда устанавливает release на несколько минут в будущее, чтобы ip не освободился до того момента как будет получена статистика трафика. В противном случае, ip мог бы быть выдан другому абоненту, после чего ему был бы начислен трафик предыдущего.
При выдаче динамического ip, функция get_ip также проверяет есть ли у клиента услуга с тегом realip. Если да, то выбирается ip, у которого поле realip = 1.
cd /usr/ports/net/freeradius2 && make install clean
Ставим галку напротив MYSQL, если не стоит.
cp /usr/local/nodeny/etc/raddb/* /usr/local/etc/raddb/ echo radiusd_enable=YES >> /etc/rc.conf ee /usr/local/etc/raddb/radiusd.conf
$INCLUDE sql.conf
ee /usr/local/etc/raddb/sites-enabled/default
Файл default состоит из нескольких секций:
название секции {
данные
}
Вы должны последовательно в секциях:
раскомментировать строку sql.
mysql -u nodeny --password=`perl -e'require "/usr/local/nodeny/sat.cfg"; print $cfg::Db_pw;'` nodeny
Проверяем выдачу ip клиенту c id=1 (измените на существующий id).
SELECT get_ip(1);
Внимание! hardpass заменить на ключ из файла sat.cfg
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
SELECT id,name,'Password' AS Attribute,AES_DECRYPT(passwd,'hardpass') AS Value,'=='
FROM users WHERE name=login;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS `radreply`; DELIMITER $$ CREATE PROCEDURE `radreply`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; SELECT get_ip(usr_id) INTO usr_ip; SELECT NULL,login,'Framed-IP-Address',usr_ip,'='; SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','='; SELECT NULL,login,'Framed-Protocol','PPP','='; END$$ DELIMITER ;
DROP PROCEDURE IF EXISTS `radupdate`;
DELIMITER $$
CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255))
BEGIN
DECLARE usr_id INT;
DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
SELECT get_ip(usr_id) INTO usr_ip;
CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS `radstop`; DELIMITER $$ CREATE PROCEDURE `radstop`(IN login VARCHAR(64)) BEGIN DECLARE usr_id INT; SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1; DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1; END$$ DELIMITER ;
/usr/local/etc/rc.d/radiusd start radtest login pass 127.0.0.1 0 hardpass5
где login и test соответственно логин и пароль реально существующей клиентской записи в NoDeny.
cd /usr/ports/net/mpd5 && make install clean
Будет выведена табличка с вопросом какие дополнительные модули установить. Они нам не понадобятся.
echo '!mpd' >> /etc/syslog.conf echo '*.* /var/log/mpd.log' >> /etc/syslog.conf touch /var/log/mpd.log killall -HUP syslogd
echo '/var/log/mpd.log 600 5 100 * JC' >> /etc/newsyslog.conf
600 - права на файлы 5 - количество файлов в ротации 100 - ротация будет произведена при достижении лога 100 кб * - ротация по времени отключена JC - упаковка файлов утилитой bzip2
echo mpd_enable=YES >> /etc/rc.conf
ee /usr/local/etc/mpd5/mpd.conf
startup:
set user admin deletempd
set console self 127.0.0.1 5005
set console open
set web self 0.0.0.0 5006
set web open
default:
load pppoe_server
pppoe_server:
create bundle template B
set ipcp ranges 1.1.1.1/32 127.0.0.2/32
set ipcp dns 1.1.1.1
set ccp yes mppc
set mppc yes e40
set mppc yes e56
set mppc yes e128
set mppc yes stateless
set ecp disable dese-bis dese-old
create link template common pppoe
set link enable multilink
set link action bundle B
set link disable chap pap eap
set link enable pap
load radius
set pppoe service "*"
create link template fxp1 common
set link max-children 1000
set pppoe iface fxp1
set link enable incoming
radius:
set radius server localhost hardpass5 1812 1813
set radius retries 3
set radius timeout 3
set radius me 127.0.0.1
set auth acct-update 45
set auth enable radius-auth
set auth enable radius-acct
set radius enable message-authentic
admin и deletempd - логин и пароль для доступа к управлению mpd5 через консоль или web-интерфейс (http://xx.xx.xx.xx:5006/). Не забудьте в фаерволе открыть tcp порт 5006.
1.1.1.1 - один из ip вашего сервера. Этот ip будет использован в туннеле: ip сервера <-> клиентский ip. Автор обычно прописывает этот ip на локальной заглушке.
dns 1.1.1.1 - dns-сервер. Через пробел можно указать несколько.
fxp1 - Интерфейс, на который будут приниматься pppoe соединения. Обратите внимание: указывается в двух местах конфига.
acct-update 45 - период посылки accounting пакетов (используем для поддержания авторизаций) 45 секунд.
chmod 600 /usr/local/etc/mpd5/mpd.conf /usr/local/etc/rc.d/mpd5 forcestart tail -f /var/log/mpd.log