Abills NMS Addon: различия между версиями
Sirmax (обсуждение | вклад) |
|||
(не показано 8 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:Abills]] |
||
+ | [[Категория:Linux]] |
||
+ | [[Категория:GeneralSQL]] |
||
=Abills Addons= |
=Abills Addons= |
||
В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия которые были проделаны. |
В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия которые были проделаны. |
||
+ | Все что написано ниже устарело. новая статья в разработке. |
||
==Програмное обеспечение== |
==Програмное обеспечение== |
||
Строка 13: | Строка 17: | ||
</PRE> |
</PRE> |
||
Сервер достался уже готовым, почему apache и php собраны именнно так - не разбирался. |
Сервер достался уже готовым, почему 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