accel-ppp на Ubuntu Server pptp & pppoe

Исходные данные примера:

  • Ubilling с настроенным FrerRADIUS находится относительно NAS-а на IP 192.168.56.94
  • NAS имеет интерфейсы:
    • eth0 - 172.16.0.254/24 (смотрит в сторону пользователей)
    • eth1 - 10.0.3.15/24 (смотрит в интернет)
    • eth2 - 192.168.56.14 (для коммуникации с биллингом)

1. Добиваемся работы FreeRADIUS
2. Добавляем для сети с «использует Radius» NAS типа Local с IP 192.168.56.14. Настоящий ключ secret для этого NAS (далее по тексту testing123) можно получить при помощи модуля «Сервера доступа (NAS)». Выглядит это следующим образом:

3. Ставим accel-ppp:

# apt-get -y install cmake libssl-dev pptp-linux build-essential gawk libpcre3-dev libnl-dev
# wget http://optimate.dl.sourceforge.net/project/accel-ppp/accel-ppp-1.7.4.tar.bz2
# tar jxvf accel-ppp-1.7.4.tar.bz2
# mkdir accel-ppp
# cd accel-ppp
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DRADIUS=TRUE -DSHAPER=TRUE ../accel-ppp-1.7.4
# make && make install

4. Врихтовываем конфиг /etc/accel-ppp.conf

accel-ppp.conf
    [modules]
    path=/usr/local/lib64/accel-ppp
    log_file
    pptp
    pppoe
    auth_mschap_v2
    radius
    sigchld
    pppd_compat
    shaper_tbf
    shaper
 
    [core]
    log-error=/var/log/accel-ppp/core.log
    thread-count=4
 
    [ppp]
    verbose=1
    min-mtu=1000
    mtu=1400
    mru=1400
 
    [lcp]
    echo-interval=30
    echo-failure=3
 
    [pptp]
    echo-interval=30
    verbose=1
 
    [pppoe]
    interface=eth0
    verbose=1
 
 
    [dns]
    dns1=8.8.8.8
 
    [radius]
    dictionary=/usr/local/share/accel-ppp/radius/dictionary
    nas-identifier=accel-ppp
    nas-ip-address=192.168.56.14
    gw-ip-address=10.0.0.1
    auth-server=192.168.56.94:1812,testing123
    acct-server=192.168.56.94:1813,testing123
    dae-server=192.168.56.94:3799,testing123
    verbose=1
 
    #network which can do auth via pptp. NOT users IP-s.
    [client-ip-range]
    10.0.0.0/24
 
 
    [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
    level=3
 
 
    [pppd-compat]
    radattr-prefix=/var/run/radattr
    verbose=1
 
 
    #[tbf] (obsolete - use shaper insted)
    #attr-down=PPPD-Downstream-Speed-Limit
    #attr-up=PPPD-Upstream-Speed-Limit
 
    [shaper]
    #may need: ethtool -K eth0 tso off ufo off gso off gro off lro off
    up-limiter=police
    down-limiter=tbf
    attr-down=PPPD-Downstream-Speed-Limit
    attr-up=PPPD-Upstream-Speed-Limit
    verbose=1
 
 
    [cli]
    telnet=127.0.0.1:2000

5. Выгружаем блеклистим модуль ip_gre который конфликтует с accel-ppp

# rmmod ip_gre
# echo "blacklist ip_gre" >> /etc/modprobe.d/blacklist.conf

6. Загружаем и добавляем в автозагрузку модули pptp и pppoe

# modprobe pppoe
# modprobe pptp
# echo  pppoe >> /etc/modules
# echo  pptp >> /etc/modules

7. Создаем скрипт автозапуска в /etc/init.d/accel-ppp

accel-ppp
#!/bin/sh
# /etc/init.d/accel-pppd: 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 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"
        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 a+x /etc/init.d/accel-ppp 
# update-rc.d accel-ppp defaults

8. В /etc/sysctl.conf добавляем

sysctl.conf
net.ipv4.ip_forward=1
net.ipv4.neigh.default.gc_thresh1 = 1024
net.ipv4.neigh.default.gc_thresh2 = 2048
net.ipv4.neigh.default.gc_thresh3 = 4096
 
net.ipv4.netfilter.ip_conntrack_max=9548576
net.netfilter.nf_conntrack_max=9548576

9. В словарь /usr/local/share/accel-ppp/radius/dictionary добавляем следующие аттрибуты:

# 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
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 

10. В /etc/rc.local добавляем подъем NAT-а на сети пользователей

rc.local
iptables -t nat --flush
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth1 -j SNAT --to-source 10.0.3.15

11. Со стороны Ubilling добавляем нужные нам аттрибуты в словарь FreeRADIUS-а который /usr/local/etc/raddb/dictionary

dictionary
# 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 

12. А что с настройками сетей самого Ubilling-a? А как-то так в минимальном варианте:

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

accelppp.txt · Последние изменения: 2015/03/10 02:12 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki