Exppp

FreeBSD Point to Point Protocol deamon with extended futures. Данная реализация является развитием версии стандартного ppp сервера.

Возможности

  • Разделение трафика на 3 группы:
    • 0 - внешний (весь интернет 0.0.0.0/0);
    • 1 - внутренний;
    • 2 - бесплатный (трафик не попадает в счётчики).
  • Установка лимита трафика на сессию.

Общие настройки

Переходим в каталог с программами

cd abills/soft
tar zxvf exppp_asm-0.2.4.tar.gz
cd exppp_asm-0.2.4
make
cp ppp /usr/sbin/
cp raddb/exppp /usr/local/radiusd/etc/raddb/

Дописываем дополнительный словарь для exppp

/usr/local/radiusd/etc/raddb/dictionary

$INCLUDE		/usr/local/radiusd/etc/raddb/exppp

Разделитель после $INCLUDE табуляция
перезагружаем радиус

Конфигурационный файл для подключения к радиусу
/etc/radius.conf

auth    127.0.0.1:1812      radsecret   4    4
acct    127.0.0.1:1813      radsecret   4    4

127.0.0.1 - адрес Radius сервера

Скрипты для поднятия шейпера.

/etc/ppp/ppp.linkup

MYADDR:
  !bg /usr/abills/libexec/linkupdown up INTERFACE USER HISADDR

/etc/ppp/ppp.linkdown

MYADDR:
  !bg /usr/abills/libexec/linkupdown down INTERFACE USER HISADDR

При использовании FreeBSD ipfw pipe номера правила задаются в конфигурационом файле libexec/config.pl по умолчанию:

@START_FW = (3000, 2000, 1000);

Обязательно включите следующие опции в ядро

options         IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         DUMMYNET

options         NETGRAPH
options         NETGRAPH_PPPOE

Правим файл настройки ppp
/etc/ppp/ppp.conf

default:
  set log Warning Phase

PPPoE

Правим файл настройки ppp
/etc/ppp/ppp.conf

pppoe-in:   # Метка (идентификатор правил) 
  set mtu 1492
  set mru 1492
  allow mode direct
  enable lqr
  set lqrperiod 5
  set timeout 6000
  disable acfcomp protocomp    
  deny acfcomp
  # если авторизация из UNIX базы паролей enable pap
  enable chap
  set speed sync
  accept dns
  #set dns xxx.xxx.xxx.xxx
  # Номер порта для контроля и пароль
  set server +3000 password     
  set radius /etc/radius.conf
  set rad_service_type 11
  # Таймаут для Alive пакетов
  set rad_alive 60

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

Запускаем PPPoE демон

/usr/libexec/pppoed -l pppoe-in -p \* fxp2

Для автоматического поднятия PPPoE демона после перезагрузки в OS FreeBSD правим файл
/etc/rc.conf

pppoed_enable="YES"
pppoed_flags="-l pppoe-in"
pppoed_interface="fxp2"   # Интерфейс на котором демон будет слушать

Для слежения за работой PPPoE сервера

# touch /var/log/pppoed.log

и добавте в /etc/syslog.conf

!pppoed
*.*                                             /var/log/pppoed.log
# killall -1 syslogd

PPTP

Правим файл настройки ppp /etc/ppp/ppp.conf

pptp:
  set mtu 1460
  set mru 1460
  allow mode direct
  enable lqr
  set timeout 6000
  disable acfcomp protocomp  
  deny acfcomp
  # если авторизация из UNIX базы паролей enable pap
  enable chap
  accept dns
  #set dns xxx.xxx.xxx.xxx
  # Номер порта для контроля и пароль
  set server +3000 password   
  set radius /etc/radius.conf
  set rad_service_type 11
  # Таймаут для Alive пакетов
  set rad_alive 300
  set accmap ffffffff

Настройка pptp демона
Для полечения Calling-Station-Id и Called-Station-Id нужно пропатчить pptpd

# cd /usr/ports/net/poptop/ && make extract

Открываем:

/usr/ports/net/poptop/work/pptpd-1.2.3/pptpctrl.c

Ищим:

inet_ntoa(inetaddrs[1]),
ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id_peer),
ntohs(((struct pptp_out_call_rply *) (rply_packet))->call_id));

после этих строк вставляем:

setenv("clid",inet_ntoa(inetaddrs[1]),1);
setenv("cid",inet_ntoa(inetaddrs[0]),1);
# cd /usr/ports/net/poptop/
# make
# make install

правим конфигурационный файл /usr/local/etc/pptpd.conf

options /etc/ppp/options.pptpd
noipparam
# /usr/local/etc/rc.d/pptpd start

Для автоматического запуска после перезагрузки

# echo pptpd_enable=\"YES\" >> /etc/rc.conf

Дополниетльна информация:

Фильтры

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

Правим /etc/ppp/ppp.conf или /etc/ppp/ppp.linkup (Если хотите передавать параметр через radius)

#
# Разрешить доступ внутри локальной сети
#
   set filter in 6 permit 0/0 192.168.101.0/24
   set filter out 6 permit 192.168.101.0/24 0/0

#  
# Разрешить telnet-подключения к Интернет
#
   set filter in 1 permit tcp src eq 23 estab
   set filter out 1 permit tcp dst eq 23
#
# Разрешить доступ в Интернет по ftp
#
   set filter in 2 permit tcp src eq 21 estab
   set filter out 2 permit tcp dst eq 21
   set filter in 3 permit tcp src eq 20 dst gt 1023
   set filter out 3 permit tcp dst eq 20

#
# Если пакет не удовлетворяет ни одному указанному выше условию, то он будет
# блокирован.
#-------

В каждом классе правил фильтрации пакетов можно применить до 20 явных фильтров. Правила в каждом классе представляют собой последовательные номера от 0 до 20, но ни одно из правил для конкретного класса фильтров не будет активизировано до тех пор, пока будет определено правило с номером '0'! !

Если Вы решили не использовать правила фильтрации пакетов в конфигурации PPP, то в этом случае, на время соединения с Вашим Интернет-провайдером, через Вашу систему будет разрешен ВЕСЬ входящий и исходящий трафик.

Если Вы решите, что Вам необходимо использовать правила фильтрации пакетов, добавьте строки, описанные выше в Ваш файл /etc/ppp/ppp.conf в одну из секций «стандартную:», «demand:» или «интерактивную:» (или же во все, по Вашему усмотрению).

Пример фильтра:
Гостевой акаунт - разрешить доступ только к станицы проверки баланса.

  • 10.10.10.10 - Сервер биллинга
  • 9433 - Порт веб интерфейса
  • 10.10.20.20 - DNS сервер

/etc/ppp/ppp.linkup

GUEST_MODE:
    #Доступ к веб серверу
    set filter in 0 permit 0/0 10.10.10.10 tcp dst eq 80
    set filter out 0 permit 10.10.10.10 0/0 tcp src eq 80
    #DNS сервер
    set filter in 4 permit 0/0 10.10.20.20 udp dst eq 53
    set filter out 4 permit 10.10.20.20 0/0 udp src eq 53
    #Доступ к странице биллинга
    set filter in 7 permit 0/0 10.10.10.10 tcp dst eq 9443
    set filter out 7 permit 10.10.10.10 0/0 tcp src eq 9443

Пример 2
Блокировать доступа только к определённым ресурсам

MYADDR:
  !bg /usr/abills/libexec/linkupdown up INTERFACE USER HISADDR
  set filter in 0 deny 0/0 192.168.0.0/24
  set filter out 0 deny 192.168.0.0/24 0/0
  set filter in 1 deny 0/0 10.0.0.0/8
  set filter out 1 deny 10.0.0.0/8 0/0
  set filter in 2 permit 0/0 0/0
  set filter out 2 permit 0/0 0/0

ABillS

/ System configuration/ NAS/

Type exppp
:Manage:
IP:PORT: IP-адрес и порт,, на котором ppp слушает команды
Password: пароль для управления (задан в /etc/ppp/ppp.conf set server +3000 password)

Если Вам нужно разделение траффика, обязательно отмечайте поле EXPPP_NETFILES (По умолчанию не отмечено) в секции заведения цены трафика. После создания проверти наличие файлов сетей в каталоге /usr/abills/cgi-bin/admin/nets.

Иногда ppp сессию подвисают, чтобы избежать дублирование IP-адресов в ABillS предусмотрен механизм контроля подвисших сессий.
/etc/crontab
*/2 * * * * root /usr/abills/libexec/billd checkppp

Дополнительно