В работе:
Сервер: | 2*Intel(R) Xeon(R) CPU X5650 @ 2.67GHz / 8G / SSD Samsung 850 Pro 128 Gb |
---|---|
Сетевая: | 2*Intel(R) 10 Gigabit Network Connection 82599 |
ОС: | Ubuntu 16.04 |
Ubuntu 12.4/14.4
apt-get update cd /usr/src apt-get install make cmake libcrypto++-dev libssl-dev libpcre3 libpcre3-dev git lua5.1 liblua5.1-0-dev apt-get install linux-headers-`uname -r`
для 12.04
git clone git://git.code.sf.net/p/accel-ppp/code accel-ppp.git
для 14.04
wget http://netix.dl.sourceforge.net/project/accel-ppp/accel-ppp-1.10.0.tar.bz2 tar -xjf accel-ppp-1.10.0.tar.bz2
mkdir accel-ppp-build cd accel-ppp-build
для 12.04
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE ../accel-ppp.git
для 14.04
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DKDIR=/usr/src/linux-headers-`uname -r` -DRADIUS=TRUE -DSHAPER=TRUE -DLOG_PGSQL=FALSE -DLUA=TRUE -DBUILD_IPOE_DRIVER=TRUE ../accel-ppp-1.10.0
make make install
подключение модуля в системе
insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko
Скрипт автозапуска
nano /etc/init.d/accel-ppp
вставляем
#!/bin/sh # /etc/init.d/accel-ppp: set up the accel-ppp server ### BEGIN INIT INFO # Provides: accel-ppp # Required-Start: $networking # Required-Stop: $networking # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO set -e PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/sbin; ACCEL_PPTPD=`which accel-pppd` . /lib/lsb/init-functions if test -f /etc/default/accel-ppp; then . /etc/default/accel-ppp fi if [ -z $ACCEL_PPPTD_OPTS ]; then ACCEL_PPTPD_OPTS="-c /etc/accel-ppp.conf" fi case "$1" in start) log_daemon_msg "Starting accel-ppp server" "accel-pppd" if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko fi if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then log_end_msg 0 else log_end_msg 1 fi ;; restart) log_daemon_msg "Restarting accel-ppp server" "accel-pppd" if [ x`lsmod |awk /ipoe/'{print $1}'` = x ]; then insmod /usr/src/accel-ppp-build/drivers/ipoe/driver/ipoe.ko fi start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid if start-stop-daemon --start --quiet --oknodo --exec $ACCEL_PPTPD -- -d -p /var/run/accel-pppd.pid $ACCEL_PPTPD_OPTS; then log_end_msg 0 else log_end_msg 1 fi ;; stop) log_daemon_msg "Stopping accel-ppp server" "accel-pppd" start-stop-daemon --stop --quiet --oknodo --retry 180 --pidfile /var/run/accel-pppd.pid log_end_msg 0 ;; status) do_status ;; *) log_success_msg "Usage: /etc/init.d/accel-ppp {start|stop|status|restart}" exit 1 ;; esac exit 0
chmod +x /etc/init.d/accel-ppp update-rc.d accel-ppp defaults
Создаем файл lua
nano /etc/accel-ppp.lua
вставляем
function username(pkt) return pkt:hdr('chaddr') end
Ротация логов
nano /etc/logrotate.d/accel-ppp
вставляем
/var/log/accel-ppp/*.log { rotate 7 daily size=100M compress missingok sharedscripts postrotate test -r /var/run/accel-pppd.pid && kill -HUP `cat /var/run/accel-pppd.pid` endscript }
Dictionary
nano /usr/local/share/accel-ppp/radius/dictionary
Дописываем в конец
ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr ATTRIBUTE DHCP-Mask 242 integer ATTRIBUTE L4-Redirect 243 integer ATTRIBUTE L4-Redirect-ipset 244 string ATTRIBUTE DHCP-Option82 245 octets # Limit session traffic ATTRIBUTE Session-Octets-Limit 227 integer # What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out) ATTRIBUTE Octets-Direction 228 integer # Connection Speed Limit ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer ATTRIBUTE Acct-Interim-Interval 85 integer ATTRIBUTE Acct-Input-Gigawords 52 integer ATTRIBUTE Acct-Output-Gigawords 53 integer
nano /etc/accel-ppp.conf
вставляем
#ABillS [modules] log_file radius ipoe ippool shaper pptp pppoe auth_mschap_v2 auth_pap auth_chap_md5 auth_mschap_v1 chap-secrets sigchld #pppd_compat [core] log-error=/var/log/accel-ppp/core.log thread-count=1 #[common] #single-session=replace #sid-case=upper #sid-source=seq [radius] dictionary=/usr/local/share/accel-ppp/radius/dictionary #nas-identifier=accel-ipoe # IP адрес каким радиус будет видеть accel nas-ip-address=192.168.1.1 # IP адрес радиуса server=127.0.0.1,radsecret,auth-port=1812,acct-port=1813,req-limit=50,fail-timeout=0,max-fail=10,weight=1 # Тот же адрес что и у nas-ip-address dae-server=192.168.1.1:3799,radsecret verbose=100 attr-tunnel-type=NAS-Identifier gw-ip-address=192.168.1.1 [ipoe] verbose=100 username=lua:username lua-file=/etc/accel-ppp.lua lease-time=300 max-lease-time=300 attr-dhcp-client-ip=Framed-IP-Address gw-ip-address=10.0.0.1/24 proxy-arp=1 shared=1 ifcfg=1 mode=L2 start=dhcpv4 interface=eth0 #agent-remote-id=accel-ppp attr-dhcp-opt82=DHCP-Option82 #[ip-pool] #gw-ip-address=192.168.0.1/24 #attr=Framed-Pool #192.168.0.2-254,name=pool1 #[lcp] #echo-interval=30 #echo-failure=3 [pptp] bind=192.168.1.1 verbose=1 mppe=allow echo-interval=30 [ppp] verbose=1 min-mtu=1400 mtu=1492 mru=1492 #ccp=0 #sid-case=lower mppe=allow #ipv4=require #lcp-echo-interval=3 #lcp-echo-failure=9 [pppoe] interface=eth0 nas-identifier=accel-pppoe #ac-name=xxx #service-name=yyy #pado-delay=0 #pado-delay=0,100:100,200:200,-1:500 #ifname-in-sid=called-sid #tr101=1 verbose=1 [client-ip-range] #10.0.0.0/8 [dns] dns1=8.8.8.8 [log] log-file=/var/log/accel-ppp/accel-ppp.log log-emerg=/var/log/accel-ppp/emerg.log log-fail-file=/var/log/accel-ppp/auth-fail.log copy=1 color=1 #per-user-dir=per_user #per-session-dir=per_session #per-session=1 level=100 [shaper] attr=Filter-Id #down-burst-factor=0.1 #up-burst-factor=1.0 #latency=50 #mpu=0 #mtu=0 #r2q=10 #quantum=1500 #moderate-quantum=1 #hightspeed shaper ifb=ifb0 cburst=1534 up-limiter=htb down-limiter=htb #low speed shaper #up-limiter=police #down-limiter=tbf #leaf-qdisc=sfq perturb 10 #leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn] #rate-multiplier=1 #fwmark=1 attr-down=PPPD-Downstream-Speed-Limit attr-up=PPPD-Upstream-Speed-Limit verbose=10 [pppd-compat] #ip-up=/etc/ppp/ip-up #ip-down=/etc/ppp/ip-down #radattr-prefix=/var/run/radattr verbose=1 [cli] verbose=100 telnet=127.0.0.1:2000 tcp=127.0.0.1:2001 password=radsecret [snmp] master=0 agent-name=accel-ppp [connlimit] limit=10/min burst=3 timeout=60
Добавить пары в словарь radius
raddb/dictionary
ATTRIBUTE DHCP-Router-IP-Address 241 ipaddr ATTRIBUTE DHCP-Mask 242 integer ATTRIBUTE L4-Redirect 243 integer ATTRIBUTE L4-Redirect-ipset 244 string ATTRIBUTE DHCP-Option82 245 octets # Limit session traffic ATTRIBUTE Session-Octets-Limit 227 integer # What to assume as limit - 0 in+out, 1 in, 2 out, 3 max(in,out) ATTRIBUTE Octets-Direction 228 integer # Connection Speed Limit ATTRIBUTE PPPD-Upstream-Speed-Limit 230 integer ATTRIBUTE PPPD-Downstream-Speed-Limit 231 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-1 232 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-1 233 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-2 234 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-2 235 integer ATTRIBUTE PPPD-Upstream-Speed-Limit-3 236 integer ATTRIBUTE PPPD-Downstream-Speed-Limit-3 237 integer ATTRIBUTE Acct-Interim-Interval 85 integer ATTRIBUTE Acct-Input-Gigawords 52 integer ATTRIBUTE Acct-Output-Gigawords 53 integer
cd /usr/abills/misc/ ./autoconf PROGRAMS=accel_ppp
FREERADIUS выдает только ip адреса поэтому для каждого раздаваемого пула в разделе [ipoe] указывайте шлюз и маску.
gw-ip-address=10.0.0.1/24
/ Настройки / Сервера доступа
Alive: | Время между RADIUS Alive пакетами. Рекомендуется 300 |
---|---|
Nas-Identifier | Если совместно используете PPPoE и IPoE в это поле нужно ввести ipoe |
Type: | Linux accel-ipoe |
IP:PORT: | Ип адрес и порт сервера. Порт по умолчанию 3799 и 2001 для telnet. (127.0.0.1:3799:2001) |
Password: | пароль для Disconnect Message указывается в параметре конфигурационного файла /etc/accel-ppp.conf, также этот пароль используется как RADIUS secret |
Внимание
Если совместно используются на одном физическом сервере accel ipoe и pppoe или pptp тогда для каждого сервиса нужно завести отдельный NAS в биллинге, а в поле Nas-Identifier настроек сервера доступа указать тип сервиса (ipoe, pppoe или pptp) ив поле Тип выбрать для IPOE - accel_ipoe, а для pppoe и pptp - accel_ppp
Дополнительные опции
$conf{NAS_PORT_AUTH}=1; | Авторизоваться абонента с учётом его порта подключения (SWITCH,PORT). Мак адрес не учитывается. Система следит что бы на порту было не больше 1 автоматизированного абонента. |
---|---|
$conf{DHCPHOSTS_SWITCH_MAC_AUTH}='1,2,…'; | Список коммутаторов в которых принудительно авторизировать по мак адресу при включённой опции $conf{DHCPHOSTS_PORT_BASE} |
$conf{AUTH_EXPR_DEBUG}=1; | Режимы отладки 1 - Режим сессий (файл: /tmp/rad_dhcp) 2 - Режим ответов авторизации. (Файл: /tmp/rad_reply) 3 - Режим выражений для проверки параметров Option 82 (Файл /tmp/dhcphosts_expr) |
$conf{AUTH_EXPR}='-'; | Так как производители оборудования (коммутаторов) не всегда придерживаются стандартов при формирование запросов DHCP Option 82 в системе была создана возможность задать регулярное выражение для получения нужных параметров из DHCP запроса . Использовать дополнительные выражения для получения корректных данных с запросов от коммутаторов в которых параметры опции 82 отличаются от стандартных. формат выражения через точку с запятой: радиус_пара:условия:переменные:hex2ansii;условия переменные…. радиус_пара - радиус пара запроса условия - условия поиска Perl выражение переменные - переменные результата VLAN PORT MAC MAC_DEC (если мак не нужно преобразовывать в шестнадцатеричный из десятеричного) PORT_DEC (если не нужно преобразовывать порт из десятеричного в шестнадцатеричный формата) hex2ansii - если указан єтот параметр система перед вычислением нужных переменных преобразует строку с шестнадцатеричного формата в текстовый система м получении параметра проверяет нужно ли использовать внешние выражения если да начинает проходится по списку при попадании в параметры перебор прекращается и система подставляет выбранные VLAN PORT MAC MAC_DEC (если мак не нужно приобразовывать в десятичный форма из шестнадцатиричного) PORT_DEC (если не нужно приобразовывать порт из десятеричного шестнадцатиричного формата) в DHCP-Agent-Circuit-Id и DHCP-Agent-Remote-Id дальше уже идут стандартные процедуры работы с DHCP. При включении выражений система отключает шаблон по умолчанию для распознавания коммутаторов. Примеры выражений |
$conf{AUTH_PARAMS}=1; | Авторизация по совокупности заполненных параметров MAC,PORT,VLAN,NAS_ID При использовании данной опции отключите $conf{DHCPHOSTS_PORT_BASE} |
После внесения каких либо изменений по модулю в конфигурационный файл перезагружайте RADIUS
Если что то работает не так как планировалось смотрите логи в /var/log/accel-ppp/