Abills NMS Addon: различия между версиями
(Новая: =Abills Addons= В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия к...) |
Sirmax (обсуждение | вклад) |
||
| (не показано 11 промежуточных версий 3 участников) | |||
| Строка 1: | Строка 1: | ||
| + | [[Категория:Abills]] |
||
| + | [[Категория:Linux]] |
||
| + | [[Категория:GeneralSQL]] |
||
=Abills Addons= |
=Abills Addons= |
||
В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия которые были проделаны. |
В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия которые были проделаны. |
||
| + | Все что написано ниже устарело. новая статья в разработке. |
||
==Програмное обеспечение== |
==Програмное обеспечение== |
||
Что бы полностью отвязать свой код от оригинального использую nginx вместо apache |
Что бы полностью отвязать свой код от оригинального использую nginx вместо apache |
||
| − | php подключаю через fastcgi (нужно установить lighttpd) |
+ | php подключаю через fastcgi (нужно установить lighttpd, от него я использую spawn-fcgi) |
| + | {{Root|<nowiki> |
||
| + | #cat /etc/portage/package.use</nowiki>}} |
||
| + | <PRE> |
||
| + | 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 |
||
| + | </PRE> |
||
| + | Сервер достался уже готовым, почему apache и php собраны именнно так - не разбирался. |
||
| + | |||
| + | ==Изменение в БД== |
||
| + | <P>Использование нужного мне функционала подразумевате, что в биллинге содержиться информация о каждом активном порту, т.к. эта информация необходима для использования option 82. |
||
| + | <P>Я не нашел этой информации в имеющейся инсталляции, потому часть таблиц пришлось добавить. Не уверен что это идеальный вариант. |
||
| + | |||
| + | <P> |
||
| + | Для того что бы отвязать свой код от базы Abills и свести к минимуму возможные изменения в случае изменения формата базы, использую представления. |
||
| + | <BR> |
||
| + | Предсьавление для авторизованных клииентов. (для них допустима нормальная работа) |
||
| + | <PRE> |
||
| + | 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; |
||
| + | </PRE> |
||
| + | |||
| + | Представление для неавторизованных клиентов. |
||
| + | <PRE> |
||
| + | 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); |
||
| + | </PRE> |
||
| + | |||
| + | |||
| + | Таблица с описанием всх портов всех NAS (в моем случае NAS - это коммутаторы, Dlink DES-3550) |
||
| + | <PRE> |
||
| + | 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) |
||
| + | ); |
||
| + | </PRE> |
||
| + | |||
| + | Описание вланов (что бы можно было сопоставить сеть и влан) |
||
| + | <PRE> |
||
| + | 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 '' |
||
| + | ); |
||
| + | </PRE> |
||
| + | |||
| + | |||
| + | Описание для сетей которые используются для неавторизованных клиентов. |
||
| + | <PRE> |
||
| + | 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 '' |
||
| + | ); |
||
| + | </PRE> |
||
| + | |||
| + | ==Редирект абонентов на другой порт=== |
||
| + | <PRE> |
||
| + | 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 |
||
| + | </PRE> |
||
Текущая версия на 15:54, 28 сентября 2012
Abills Addons
В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия которые были проделаны. Все что написано ниже устарело. новая статья в разработке.
Програмное обеспечение
Что бы полностью отвязать свой код от оригинального использую nginx вместо apache php подключаю через fastcgi (нужно установить lighttpd, от него я использую spawn-fcgi)
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