Кнопки



Яндекс цитирования


Главная » Документы » Установка PPPoE сервера для провайдинга

Установка PPPoE сервера для провайдинга


Привет ! Давно ничего не писал, но был сильно занят изготовлением и наполнением веб-сайтов. Новый год опять же :)

Недавно ко мне обратился человек с инетерсным предложением. У него был (у единственного) в здании интернет, причем интернет был почти бесплатный и быстрый. И хотел данный человек его продавать другим конторам и людям в оргранизации. Интернет к нему попадал по 100 Мбитной витой паре. В дополнение ко всему у него установлен сервер на Gentoo, ессно моей установки :)

Я подумал-подумал и решил, что человеку нужно провайдить интернет, те раздавать его другим людям и ессно считать трафик и взимать деньги. В дополнение ко всему интернет должен быть безопасным (ессно для моего заказчика, проблемы подключенных пользователей меня не сильно заботят :) В качестве протокола передачи я выбрал PPPoE.

 Вы спросите почему ? Почему не простой vpn ? Отвечу - PPPoE отличается от VPN тем, что позволяет в 1 изернет сегменте устанавливать PPP соединение без выдачи IP адресов поддержки. Те соединение полностью зависит от введенного логина и пароля юзера.

Теперь другая проблема: Найти простое и фреварное решение для управления провайдингом. Тут наверное особенно думать не стоит - radius (сервер занимающийся AAA для PPP подобных клиентов). В качестве системы управления использовал freeNIBS. Эта система базируется на freeradius и почитать о ней можно http://nibs.net.ua/

Вообчем-то данный документ пересказывает установку freenibs и PPPoE сервера. Буду рассказывать ессно про Gentoo, но думаю не вызовет труда перекрутить и под другие версии Linux. Все файлы и данные помещенные в статье можно использовать для текущей версии FreeNIBS. В процессе кроме указанных в документе пакетов понадобиться apache2 с установленным mod_php и mysql в качестве базы данных. В качестве дополнительных утилит необходимо наличие sudo.

Итак.. начали...

1. Качаем исходники пакета FreeRadius файл freeradius-1.0.1.tar.gz и "FreeNIBS" файл freenibs-0.0.3-bf3_freeradius-1.0.1.tar.bz2 .

2. Распаковываем FreeRadius в какую-нибуть папку и сверху с замещением файлов кладем FreeNibs.

3. Заходим в папку с исходниками, компилим и инсталируем FreeRadius:

# cd freeradius-1.0.1
# ./configure --prefix=/opt/freeradius
# make
# make install

4. Правим пароли для NAS сервера, тут надо объяснить, что такое NAS сервер. Допустим для DialUp. Есть клиенты, которые конектсятся по какому-нить протоколу (в нашем случаем PPP), телефонные линии на стороне провайдеры втыкнуты в NAS сервера (у крутых провайдеров это DialUp сервера, навроде Cisco, у провов поменьше - модемы втыкнутые в компы). И вот все эти NAS сервера при появлении клиенты его логин и пароль берут у Radius сервера (у одного), а уж он свои данные хранит в MySQL (или круче) базе данных. Для радиуса, любой NAS сервер является клиентом и следовательно можно давать разные полномочия для разных NAS серверов или групп серверов. Все эти клиенты и пароли их доступа прописываются в файле _/opt/freeradius/etc/raddb/client.conf_ . По умолчанию там есть только запись для localhost, т.к. мы будем ставить PPPoE сервер на локальную машину, то именно он то нам и понадобиться.

client 127.0.0.1 {
        secret          = SUPER_PAROL
    далее файл с настройками

В дополнение при наличии нескольких NAS серверов можно поправить и файл _/opt/freeradius/etc/raddb/huntgroups_ - в котором описываются права групп NAS серверов.

5. Правим и настраиваем файл _/opt/freeradius/etc/raddb/nibs.conf_ на предмет доступа к MySQL серверу:

nibs {    # Database type
    # Current supported are: rlm_nibs_mysql, rlm_nibs_postgresql,
    driver = "rlm_nibs_mysql"
    # SQL Server configuration
    server = "localhost"
    port = "3306"
    login = "freenibs"
    password = "пароль2"
    # Database configuration
    nibs_db = "freenibs"


Дополнительно поправим строку на снятие PPP клиента (например при превышении лимита),искать в самом низу файла:

    #kill_program = "${sbindir}/userkill %{User-Name} %{NAS-IP-Address} %{Client-IP-Address} %{NAS-Port} %{Framed-IP-Address}"
    kill_program = "${sbindir}/pppkill ppp%{NAS-Port}"

6. Настроим доступ системы к библиотекам, в генту это делается простой модификацией файла /etc/env.d/00basic. Добавим в определение переменной LDPATH путь к библиотекам радиуса:

LDPATH="/usr/local/lib:/opt/freeradius/lib"

 и выполним env-update

7. Настраиваем базу данных, те заносим в нее необходимые таблицы. Для этого обратимся опять к исходникам. Поправим файл nibs_mysql.sql, на предемет пароля доступа к базе freeradius сервером. И занесем информацию в MySQL.

cd freeradius-1.0.1/src/modules/rlm_nibs/drivers/rlm_nibs_mysql
mysql -uroot -p < nibs_mysql.sql

Команда создаст отдельную базу в MySQL и пользователя с заданным паролем (в нашем случаем "пароль2")

8. Настроим Apache для интерфейсов управления и администрирования. В качестве Админа, я не стал использовать стандартный (идущий в поставле FreeNIBS), а использовал WebNIBS. Которых хоть и похож на FreeNibs, но более безглючный. Так как все равно мы установили радис в /opt то и остальные продукты тоже поставим туда же. Создадим директории для PHP скриптов

   mkdir /opt/prov
   mkdir /opt/prov/admin
   mkdir /opt/prov/admin/wwwroot
   mkdir /opt/prov/admin/wwwlog
   mkdir /opt/prov/stat
   mkdir /opt/prov/stat/wwwroot
   mkdir /opt/prov/stat/wwwlog
   chown apache:apache /opt/prov -R
   echo AddDefaultCharset Windows-1251 > /opt/prov/admin/wwwroot/.htaccess

В директорию /opt/prov/admin/wwwroot выложим скрипты из поставки WebNIBS, котрый можно скачать у меня: файл nibs.tgz .
В директорию /opt/prov/stat/wwwroot выложим скрипты статистики от FreeNibs, которые лежат в freenibs-0.0.3-bf3_freeradius-1.0.1/src/modules/rlm_nibs/utils/web/stat

Добавим в настройки апача 2 виртуальных хоста для администрирования и для доступа к статистике соот-но:

<VirtualHost 192.168.50.1>
  php_admin_flag engine On
  php_admin_flag safe_mode Off
  php_admin_flag register_globals On
  ServerName adm.myhost.ru
  ErrorLog /opt/prov/admin/wwwlog/error.log
  CustomLog /opt/prov/admin/wwwlog/access.log combined
  DocumentRoot /opt/prov/admin/wwwroot
  <Directory "/opt/prov/admin/wwwroot">
        AllowOverride all
        Options FollowSymlinks Includes
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
<VirtualHost 192.168.50.1>
  php_admin_flag engine On
  php_admin_flag safe_mode Off
  php_admin_flag register_globals On
  ServerName stat.myhost.ru
  ErrorLog /opt/prov/stat/wwwlog/error.log
  CustomLog /opt/prov/stat/wwwlog/access.log combined
  DocumentRoot /opt/prov/stat/wwwroot
  <Directory "/opt/prov/stat/wwwroot">
        AllowOverride all
        Options FollowSymlinks Includes
        Order allow,deny
        Allow from all
   <Directory>
</VirtualHost>

Ессно хосты admin.myhost.ru и stat.myhost.ru должны быть прописаны в ДНС и ссылаться на наш хост.
Теперь меняем владельца наших хостов на апача:

chown apache:apache /opt/prov -R

9. Настроим теперь наши скрипты на доступ к mysql и вообче на работу :)
Изменим пароль на пароль веб-админа (новый пароль) в файле /opt/http/adm/wwwroot/include/auth.php<br>
отредактируем доступ к MySQL базе данных в файле: /opt/http/adm/wwwroot/include/config.php, там нужно поменять только пароль.
Поправим строку на перезапуск radius сервера в файле /opt/http/adm/wwwroot/include/defines.php

define("SUDO_RADRELOAD",true);
#samples for RAD_RELOADCMD
#define("RAD_RELOADCMD","/usr/bin/sudo -u root /usr/bin/killall -HUP radiusd & /usr/local/bin/sudo -u root /usr/local/etc/raddb/restart.sh");

Полностью заменим файл /opt/prov/stat/wwwroot/.htaccess на приведенный ниже:

AddDefaultCharset koi8-r
php_value include_path ".:/opt/prov/stat/wwwroot/include:/opt/prov/stat/wwwroot/menu:/opt/prov/stat/wwwroot/lists:/opt/prov/stat/wwwroot/templates"
php_flag engine On
php_flag safe_mode Off
php_flag register_globals On
php_flag magic_quotes_gpc Off
ErrorDocument 404 /missing.php


Исправим настроки доступа к базе данных для клиента в файле /opt/http/stat/wwwroot/include/mysql.php - опять же только пароль :)
Выключим использование карточек в файле: /opt/http/stat/wwwroot/include/defines.php:

define("USE_CARDS","0");

Добавим в sudo разрешение апачу не релоад радиуса (правим /etc/sudoers ):

apache ALL=(ALL)        NOPASSWD: /opt/freeradius/sbin/rc.radiusd

Выполним легкое исправление MySQL таблицы для адаптации к WebNIBS:

ALTER TABLE `packets` ADD `crypt_method` TINYINT(1) NOT NULL;

10. Зайдем на наш админский веб-сервера: http://admin.myhost.ru и убедимся что нас пускает и можно перемещаться по разделам и создавать пакеты и пользователей.

11. Теперь расскажу основы использования FreeNibs. У нас есть клиенты, например фирма, где есть несколько людей которые могут конектиться к интернету, у каждого свой пароль. Деньги можно класть как на фирму(пакет), так и каждому ее клиенту(пользователь). Следовательно в нашем случае для PPPoE нужно создать контору и в ней уже создать 1 пользователя.

12. Установим пакет PPP, с поддержкой radius сервера:

USE="radius" emerge net-dialup/ppp

13. Установим PPPoE сервер:

emerge net-dialup/rp-pppoe

14. Настроим PPPoE сервер с помощью создания файла /etc/ppp/pppoe-server-options :

# PPP options for the PPPoE server
# LIC: GPL
mtu 1472
mru 1472
require-pap
refuse-chap
default-asyncmap
proxyarp
ktune
lcp-echo-interval 20
lcp-echo-failure 2
ms-dns 192.168.50.1
plugin radius.so
nobsdcomp
noccp
noendpoint
noipdefault
noipx
novj
receive-all
192.168.50.1:192.168.50.2

В данном файле адрес 192.168.50.1 будет выделен серверу, а адреса начиная с 192.168.50.2 буду выделяться клиентам.
Добавим запись с указанием нашего Radius сервера и пароля к нему в файле /etc/radiusclient/servers:

#Server Name or Client/Server pair              Key
#----------------                               ---------------
#portmaster.elemental.net                       hardlyasecret
#portmaster2.elemental.net                      donttellanyone
127.0.0.1               SUPER_PAROL

14. Запустим радиус и PPPoE сервер:

 pppoe-server -I eth0 -L 192.168.50.1 -R 192.168.50.2
 /opt/freeradius/sbin/rc.radiusd start

Если все получилось верно и нет ошибок (я эти действия выполнял почти как робот) - то у нас появился PPPoE сервер на eth0 интерфейсе сетевой карты.

15. Настраиваем Windows клиентов. Качаем "драйвер PPPoE" - файл raspppoe_098.zip . Устанавливаем в свойствах сетевой карты как дополнительный протокол. Запускам входящий в ZIP исполнимый файл, который и находит наш PPPoE сервер :) Давим создать соединение на рабочем стол, закрываем программу. Видим что на рабочем столе появилось соединение, соединяемся с помощью него и радуемся жисти :) Снимаем деньги отчисляем процент автору прекрасной вещи называемой http://nibs.net.ua/ .