За основу была взята статья с сайта logalhost и немного дополнена.
Для начала нам понадобится чистая Debian GNU/Linux 7.8 (wheezy) (на момент написания статьи это самая свежая версия). Единственное что может быть предустановлено, это ssh сервер.
Сразу договоримся что мы вошли в систему под ROOT правами.
В нашем примере у нас будет два основных сетевых интерфейса и один виртуальный:
1. eth0 с IP адресом 10.10.20.10 на котором мы будем получать интернет.
2. eth1 с IP адресом 10.10.1.1 который будет раздавать интернет нашим пользователям.
3. eth1:1 (виртуальный интерфейс) с IP адресом 172.32.0.1 (его мы будем использовать для перенаправления пользователей с неизвестным MAC).
Для настройки интерфейсов пишем в консоли следующее:
Код PHP:
Открывшийся файл необходимо привести к следующему виду:
nano /etc/network/interfaces
Код PHP:
Далее необходимо установить необходимые пакеты, для этого в консоли пишем следующее:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 allow-hotplug eth0 iface eth0 inet static address 10.10.20.10 netmask 255.255.255.0 gateway 10.10.20.1 # The secondary network interface auto eth1 allow-hotplug eth1 iface eth1 inet static address 10.10.1.1 netmask 255.255.255.0 # The secondary network interface alias for unknown user auto eth1:1 allow-hotplug eth1:1 iface eth1:1 inet static address 172.32.0.1 netmask 255.255.255.0
Код PHP:
При установке сервера баз данных MySQL нам будет задан вопрос по установке пароля для пользователя root, собственно вводим сложный пароль и подтверждаем его.
apt-get install mysql-server-core-5.5 mysql-client-5.5 libmysqlclient18 libmysqlclient-dev phpmyadmin apache2 mysql-server expat libexpat1-dev php5-cli libapache2-mod-php5 php5-mysql dhcp3-server build-essential bind9 bandwidthd softflowd libxmlrpc-c3-dev sudo
Дальше анализатор трафика bandwidthd спросит у нас на каком сетевом интерфейсе необходимо замерять трафик, указываем ему eth1.
Следующий вопрос от bandwidthd, это какие сети необходимо считать. Если в файле interfaces всё настроено правильно, то вам необходимо просто нажать Enter. Если же вы не настроили ваши сетевые интерфейсы тогда пропишите ваши сети.
Далее при установке пакетов могут выдаваться ошибки, на них не обращайте внимания, это потому что устанавливаемые пакеты ещё не настроены.
Далее необходимо настроить установленные нами пакеты.
Начнём с DHCP сервера. Необходимо указать на каком интерфейсе он будет работать. Для этого в консоли пишем:
Код PHP:
В открывшемся файле необходимо исправить параметр INTERFACES=”” и привести его к виду INTERFACES=”eth1”.
nano /etc/default/isc-dhcp-server
Далее необходимо настроить bandwidthd. Для этого нам необходимо скопировать дефолтный файл конфигурации и настроить его.
Что бы это сделать пишем в консоли:
Код PHP:
После копирования и открытия файла /etc/bandwidthd/bandwidthd.conf, в нём нужно раскоментировать и изменить следующие строчки:
cd /usr/share/doc/bandwidthd/ cp bandwidthd.conf /etc/bandwidthd/ nano /etc/bandwidthd/bandwidthd.conf
Код PHP:
Для того что бы получить доступ к bandwidthd через Web-интерфейс сделаем символическую ссылку:
subnet 10.10.1.0/24 dev "eth1" #Log data to cdf file htdocs/log.cdf output_cdf true #DEBCONF_OUTPUTCDF# #Set the cdf log output directory log_dir "/var/lib/bandwidthd" #Read back the cdf file on startup recover_cdf true htdocs_dir "/var/lib/bandwidthd/htdocs"
Код PHP:
После этого можно перезапустить bandwidthd
ln -fs /var/lib/bandwidthd/htdocs/ /var/www/band
Код PHP:
и проверить доступен ли он через Web. Открываем браузер и в адресной строке пишем http://10.10.1.1/band/
/etc/init.d/bandwidthd restart
Далее проверим включён ли у нас модуль php в apache, Для этого пишем в консоли:
Код PHP:
Если вы увидите надпись Module php5 already enabled, то модуль уже включён.
a2enmod php5
Следующим шагом, нам необходимо отредактировать файл /etc/sudoers и привести его к следующему виду:
Код PHP:
Дальше мы устанавливаем шейпер HTB. В командной строке пишем:
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" # Host alias specification # User alias specification User_Alias BILLING = www-data # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL BILLING ALL = NOPASSWD: ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
Код PHP:
Установленный шейпер будет хранить файлы в директории /etc/sysconfig/htb, нам необходимо создать саму директорию и файлы настроек. Пишем в командной строке:
cd /home/sergio wget downloads.sourceforge.net/project/htbinit/HTB.init/0.8.5/htb.init-v0.8.5?use_mirror=surfnet mv htb.init-v0.8.5?use_mirror=surfnet /usr/local/sbin/htb cd /usr/local/sbin/ chmod +x htb ln -fs /usr/local/sbin/htb /etc/init.d/
Код PHP:
Директория и файлы созданы, теперь наполним их содержимым (тут по очереди мы открываем каждый созданный нами файл и вносим в него по две строки):Код PHP:
Далее выполним компиляцию, запуск и вывод статистики шейпера HTB:Код PHP:
После выполнения этих трёх команд мы должны увидеть вывод следующего образа:
htb compile htb start htb stats
Код PHP:
Если вы увидели подобное, значит все нормально.
### eth0: queueing disciplines qdisc htb 1: root refcnt 2 r2q 100 default 0 direct_packets_stat 36 Sent 4768 bytes 36 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 ### eth0: traffic classes Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 2000 ctokens: 2000 ### eth1: queueing disciplines qdisc htb 1: root refcnt 2 r2q 100 default 0 direct_packets_stat 3 Sent 242 bytes 3 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 ### eth1: traffic classes Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 2000 ctokens: 2000
Следующим шагом, мы настроим агент для сбора статистики softflowd. Редактируем файл настроек softflowd, в консоли пишем:
Код PHP:
и дописываем в открывшийся файл следующие строки:
nano /etc/default/softflowd
Код PHP:
Теперь переходим к установке одного из главных компонентов нашего сервера, это и есть тот самый stargazer. В консоли выполняем следующие команды:
INTERFACE="eth1" OPTIONS="-n 10.10.1.1:42111"
Код PHP:
Stargazer установлен, теперь перейдём к его настройке. Для этого необходимо скопировать файлы конфигурации из conf-available.d/ в conf-enabled.d/. Пишем в консоли следующее:
cd /root/BILLING wget http://stargazer.dp.ua/download/server/2.408/stg-2.408.tar.gz tar zxvf stg-2.408.tar.gz cd stg-2.408/projects/stargazer/ ./build make install cd ../sgconf && ./build && make && make install cd ../sgconf_xml/ && ./build && make && make install cd /root/BILLING/stg-2.408/projects/stargazer/plugins/configuration/rpcconfig make && make install
Код PHP:
ПРОДОЛЖЕНИЕ НИЖЕ
cd /etc/stargazer/conf-available.d/ cp store_mysql.conf /etc/stargazer/conf-enabled.d/ cp mod_rpc.conf /etc/stargazer/conf-enabled.d/ cp mod_cap_nf.conf /etc/stargazer/conf-enabled.d/ cp mod_remote_script.conf /etc/stargazer/conf-enabled.d/