Abills NMS Addon

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Abills Addons

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

Програмное обеспечение

Что бы полностью отвязать свой код от оригинального использую nginx вместо apache php подключаю через fastcgi (нужно установить lighttpd, от него я использую spawn-fcgi)

#cat /etc/portage/package.use
dev-lang/php apache2 berkdb bzip2 cli crypt ctype ftp gd gdbm iconv imap mysql ncurses nls pcre readline reflection session sockets spl ssl unicode xml zip zlib -adabas -bcmath -birdstep -calendar -cdb cgi -cjk -concurrentmodphp -curl -curlwrappers -db2 -dbase -dbmaker -debug -discard-path -doc -empress -empress-bcs -esoob -exif -fastbuild -fdftk -filter -firebird -flatfile -force-cgi-redirect -frontbase -gd-external -gmp -hash -inifile -interbase -iodbc -ipv6 (-java-external) -json -kerberos -kolab -ldap -ldap-sasl -libedit -mcve -mhash -msql -mssql -mysqli -oci8 -oci8-instant-client -odbc -pcntl pdo pic -posix -postgres -qdbm -recode -sapdb -sharedext -sharedmem -simplexml -snmp -soap -solid -spell -sqlite -suhosin -sybase -sybase-ct -sysvipc threads -tidy -tokenizer -truetype -wddx -xmlreader -xmlrpc -xmlwriter -xpm -xsl -yaz -zip-external
www-servers/nginx imap pcre perl ssl zlib addition -debug fastcgi flv status sub webdav
www-servers/lighttpd bzip2 gdbm mysql pcre ssl -doc fam fastcgi -ipv6 -ldap -lua -memcache -minimal php rrdtool -test -webdav -xattr

Сервер достался уже готовым, почему apache и php собраны именнно так - не разбирался.

Изменение в БД

Использование нужного мне функционала подразумевате, что в биллинге содержиться информация о каждом активном порту, т.к. эта информация необходима для использования option 82.

Я не нашел этой информации в имеющейся инсталляции, потому часть таблиц пришлось добавить. Не уверен что это идеальный вариант.

Для того что бы отвязать свой код от базы Abills и свести к минимуму возможные изменения в случае изменения формата базы, использую представления.
Предсьавление для авторизованных клииентов. (для них допустима нормальная работа)

DROP VIEW IF EXISTS view_dhcp_config_authorized;
CREATE   VIEW
view_dhcp_config_authorized
AS
SELECT
    INET_NTOA(dhcphosts_hosts.ip) AS ip,
    INET_NTOA(dhcphosts_networks.network) AS subnet,
    1 as enabled,
    dhcphosts_hosts.mac AS mac,
    nas.name AS bs_id,
    nas.ip AS bs_ip,
    dhcphosts_hosts.ports AS port_number,
    300 AS lease_time,
    INET_NTOA(dhcphosts_networks.mask) AS netmask,
    INET_NTOA(dhcphosts_networks.network+1) AS router,
    INET_NTOA(dhcphosts_hosts.ip | (dhcphosts_networks.mask  ^ (power(2, 32) - 1))) AS broadcast
FROM
    dhcphosts_hosts,
    dhcphosts_networks,
    nas
WHERE
    (dhcphosts_hosts.ip & dhcphosts_networks.mask=dhcphosts_networks.network)
    AND
    nas.id=dhcphosts_hosts.nas;

Представление для неавторизованных клиентов.

DROP VIEW IF EXISTS view_dhcp_config_jail;
CREATE VIEW
view_dhcp_config_jail
AS
SELECT
dhcphosts_vlans.vlan_id AS vlan_id,
INET_NTOA(dhcphosts_networks_jails.network_unauth) AS subnet,
nas.id AS bs_id,
nas.ip AS bs_ip,
dhcphosts_nas_ports.port as port_number,
30 AS lease_time,
INET_NTOA(dhcphosts_networks.mask) AS netmask,
INET_NTOA(dhcphosts_networks_jails.network_unauth+1) AS router,
INET_NTOA(dhcphosts_networks_jails.network_unauth | (dhcphosts_networks.mask  ^ (power(2, 32) - 1))) AS broadcast,
INET_NTOA(dhcphosts_networks_jails.network_unauth+2) AS first_addr,
INET_NTOA(dhcphosts_networks_jails.network_unauth | (dhcphosts_networks.mask  ^ (power(2, 32) - 2))) AS last_addr,
dhcphosts_hosts.mac as mac
FROM
    ( dhcphosts_vlans
    INNER JOIN
    (
        nas INNER JOIN dhcphosts_nas_ports  on(dhcphosts_nas_ports.nas_id=nas.id)
    )
    ON(dhcphosts_nas_ports.vlan_id=dhcphosts_vlans.vlan_id)
    )
    INNER JOIN dhcphosts_networks_jails  ON (dhcphosts_networks_jails.id=dhcphosts_vlans.network_id)
    INNER JOIN dhcphosts_networks ON(dhcphosts_networks.id=dhcphosts_networks_jails.id)
    LEFT JOIN dhcphosts_hosts ON(dhcphosts_hosts.vid=dhcphosts_vlans.vlan_id);


Таблица с описанием всх портов всех NAS (в моем случае NAS - это коммутаторы, Dlink DES-3550)

DROP TABLE IF EXISTS dhcphosts_nas_ports;
CREATE TABLE  dhcphosts_nas_ports (
    id smallint(3) unsigned NOT NULL,
    vlan_id int(10) unsigned NOT NULL default '0',
    nas_id int(10) unsigned NOT NULL default '0',
    port int(10) unsigned NOT NULL default '0',
    comments varchar(250) NOT NULL default '',
    UNIQUE  KEY nas_port(nas_id,port)
);

Описание вланов (что бы можно было сопоставить сеть и влан)

DROP TABLE IF EXISTS dhcphosts_vlans;
CREATE TABLE dhcphosts_vlans (
    id smallint(3) unsigned NOT NULL,
    name varchar(40) NOT NULL default '',
    vlan_id int(10) unsigned NOT NULL default '0',
    nas_id int(10) unsigned NOT NULL default '0',
    network_id int(10) unsigned NOT NULL default '0',
    comments varchar(250) NOT NULL default ''
);


Описание для сетей которые используются для неавторизованных клиентов.

DROP TABLE IF EXISTS dhcphosts_networks_jails;
CREATE TABLE dhcphosts_networks_jails (
    id smallint(3) unsigned NOT NULL UNIQUE,
    name varchar(40) NOT NULL default '',
    network_unauth int(10) unsigned NOT NULL default '0',
    network_nopay int(10) unsigned NOT NULL default '0',
    dns_unauth varchar(100) NOT NULL default '',
    dns_nopay varchar(100) NOT NULL default '',
    routers_unauth int(11) unsigned NOT NULL default '0',
    routers_nopay int(11) unsigned NOT NULL default '0',
    disable tinyint(1) unsigned NOT NULL default '0',
    comments varchar(250) NOT NULL default ''
);

Редирект абонентов на другой порт=

iptables -t nat -A PREROUTING -i eth1.101 -s 10.0.0.0/16  -p tcp --dport 80    -j DNAT --to-destination 172.16.253.2:998