Abills NMS Addon: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
(Новая: =Abills Addons= В связи с тем, что появилась необходимость доработать Abills до уровня AI, сюда заношу действия к...)
 
 
(не показано 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)

#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