Перейти до

Веб скрипт управления Dhcp + Web


Рекомендованные сообщения

Кто подскажет есть ли Веб скрипт для управления DHCP севером (ОС FreeBSD)

Нужнот просто добавление и удаление пользователей в конфиге, а то замучался все руками делать..

Відредаговано Foster
Ссылка на сообщение
Поделиться на других сайтах

Вебмин провбовал но там вручную нужно вибивать мак клиента, а хотелосьбы чтоб вбить только ип нажать кнопочку получить мак и записать в конфиг.

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

Сделаю простенький интерфейс который будет по айпи определять мак и заносить в DHCP.. несколько кнопочек управления аля удалить, добавить и т.д.

Подробности - в личку.

Ссылка на сообщение
Поделиться на других сайтах

дома стоит управлялка DHCP + ./etc/ethers на пхп

есть еще обращения к днс и определение производителя по маку

но с участием судоерс и прав апача на комманды

впринципе оно модульное, надо включил, не надо - выключил

в парочке сетей довольно успешно работает

но еще писать и писать

если кому надо такое - можно выложить

Ссылка на сообщение
Поделиться на других сайтах

выкладываю As Is, потроху пишется когда скучно

баги и пожелания - в ПМ

 

опишу как работает:

Помещаем в апачевский веб

апач должен стартовать с под пользователя, которому доступны комманды, прописанные в файликах panel/conf/* (конечно кроме class.php)

в /etc/sudoers например:

apache ALL=NOPASSWD: /bin/chmod,/sbin/iptables,/sbin/arp

и в httpd.conf

User apache
Group apache

 

что в этих файликах:

$ cat config

ipmac=1 // включать ли привязку IP+MAC
ipblock=1 // включить ли модуль блокировки в iptables
dhcp=1 // включить ли модуль управления DHCP
iface=1 // включить ли модуль складывания статистики интерфейса в мускуль
sudo=/usr/bin/sudo // путь к комманде sudo
chmod=/bin/chmod // путь к комманде chmod
arp=/sbin/arp // путь к команде arp
dig=/usr/bin/dig // путь к комманде dig с пакета bind-utils

 

смотрим что где лежит

whereis arp
whereis iptables

:)

 

$ cat config_dhcp

dhcp_file=/etc/dhcpd.conf // где лежит dhcpd.conf
dhcp_dir=/etc/dhcp // директория с хранимыми зонами, которые включаются в dhcpd.conf
restart=/etc/init.d/dhcpd restart // это помоему еще не работает, так что прийдется ручками рестартовать dhcp
zones=10,11 // зоны, через запятую, тут будет 10.0.10.0/24 и 10.0.11.0/24, т.е. по сути - третья цифра в айпишнике 

 

$ cat config_iface

sql_host=localhost // хост мускуля
sql_login=root // логин доступа к мускулю
sql_pass=123456 // пароль для доступа к мускулю
sql_db=panel // имя базы
sql_tb_main=iface // таблица, в которую каждые 5 минут скидывается общая статистика интерфейса
sql_tb_arch=iface_arch // таблица архива, куда пересчитывается и складывается общая статистика
ifaces=eth1,eth2,vlan7 // интерфейсы, с которых снимать статистику. через запятую

 

$ cat config_ipblock

ports=tcp:web:80; // бесполезное
iptables=/sbin/iptables // путь к iptables
iface=eth0 // внутренний интерфейс, на котором блокируем пользователя

 

$ cat config_ipmac

ether_file=/etc/ethers // файлик с синтаксисом IP MAC, который вызывается при старте arp -f

 

да, кстати, используются стили Smarty http://www.smarty.net/

качаем и ставим http://www.smarty.net/download.php

банально распаковать в либы PHP, наподобие в /usr/local/lib/php

впрочем на сайте смарти - все расписано

 

структура SQL (если используется iface=1):

CREATE TABLE IF NOT EXISTS `iface` (
 `id` bigint(20) NOT NULL,
 `time` int(11) NOT NULL,
 `iface` varchar(7) NOT NULL,
 `rx` varchar(20) NOT NULL,
 `tx` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `iface_arch` (
 `year` smallint(6) NOT NULL,
 `month` varchar(2) NOT NULL,
 `day` tinyint(4) NOT NULL,
 `rx` varchar(20) NOT NULL,
 `tx` varchar(20) NOT NULL,
 `iface` varchar(17) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

скрипты для крона если понадобятся пишите, сейчас переделывать не буду

 

пример конфига dhcp:

$ cat /etc/dhcpd.conf

authoritative;
log-facility local7;
ddns-update-style none;
default-lease-time 600;
DHCPD_INTERFACE="eth0";
max-lease-time 600;
local-address 10.0.10.1;

option net-static-routes code 249 = string;

subnet 10.0.10.0 netmask 255.255.252.0 {
       default-lease-time 3600;
       max-lease-time 3600;
       option subnet-mask 255.255.252.0;
       option broadcast-address 10.0.11.255;
       option domain-name "domain.com";
       option domain-name-servers 10.0.10.1;
       option time-offset -18000;
       option ntp-servers 10.0.10.1;
       option routers 10.0.10.1;
       option netbios-name-servers 192.168.78.1;
       range 10.0.10.200 10.0.10.254;
   }

include "/etc/dhcp/zone.10";
include "/etc/dhcp/zone.11";

это как пример, просто включаем include

синтаксис /etc/dhcp/zone.10 файлов такой:

host user1 {hardware ethernet 00:02:44:89:18:BF;fixed-address 10.0.10.5;}
host user2 {hardware ethernet 00:0D:87:9A:15:26;fixed-address 10.0.10.6;}
host user3 {hardware ethernet 00:18:F3:A2:D7:DB;fixed-address 10.0.10.7;}

честно говоря не помню как он там проверяет, рыться сейчас не буду, но должен и построчно понимать и с другим синтаксисом

 

при старте запускаем arp -f /etc/ethers, ну или где они там у нас лежат

 

вроде бы ничего не забыл. Если что звыняйте - два часа ночи все таки.

лежит тут

Ссылка на сообщение
Поделиться на других сайтах

Буду сегодне вечером пробовать поставь под фряхой, о результатах отпишу :)

 

2 Foster

Огрмное спасибо!!! :( Давай координаты куда пиво отправлять :=

Ссылка на сообщение
Поделиться на других сайтах
Давай координаты куда пиво отправлять :=

Сорта пива его не интересуют, по причинам неупотребления оного :)

Ссылка на сообщение
Поделиться на других сайтах

есть скрипт на пхп для управления дшцп, данные берутся из базы абиллса (скрипт не тот что идет в комплекте с биллингом). кому надо - в личку

Ссылка на сообщение
Поделиться на других сайтах
есть скрипт на пхп для управления дшцп, данные берутся из базы абиллса (скрипт не тот что идет в комплекте с биллингом). кому надо - в личку

давайте мне скриптулю с базой:) правда у мну не абились, но к своему прикручу. тоже надоело руками писать

Ссылка на сообщение
Поделиться на других сайтах

Вопрос ко всем:

 

как сделать, чтобы DHCP на один MAC-адрес выдавал сразу 2 IP-адреса?

 

мне нужно некоторым пользователям выдавать одновременно внутренний (10.X.X.X чтобы пользователь видел локальную сеть) и внешний белый IP-адрес (чтобы пользователь работал в инете) !!!

Ссылка на сообщение
Поделиться на других сайтах
Вопрос ко всем:

 

как сделать, чтобы DHCP на один MAC-адрес выдавал сразу 2 IP-адреса?

 

мне нужно некоторым пользователям выдавать одновременно внутренний (10.X.X.X чтобы пользователь видел локальную сеть) и внешний белый IP-адрес (чтобы пользователь работал в инете) !!!

имхо анриал

выдавай реальный ип и маршрутизируй его в сетку

кстати, какой биллинг и какая система авторизации?

Ссылка на сообщение
Поделиться на других сайтах
  • 2 weeks later...

core@iface $  cat iface_traff
#!/bin/bash

mysql_host="localhost"
mysql_login="root"
mysql_pass="db_password"
mysql_db="db_name"
mysql_tb="iface"

iface=$1

num=`snmpwalk -Oqn -c public -v2c localhost IfDescr | grep ${iface} | awk 'BEGIN {FS = "."} END {print $12}' | awk 'BEGIN {FS = " "} END {print $1}'`

if [ ${num} -gt "-1" ]
then

   eth1_rx=`snmpwalk -Oqv -c public -v2c localhost .1.3.6.1.2.1.2.2.1.10.${num}`
   eth1_tx=`snmpwalk -Oqv -c public -v2c localhost .1.3.6.1.2.1.2.2.1.16.${num}`


   id=`mysql -h ${mysql_host} -u ${mysql_login} --password="${mysql_pass}" -D "${mysql_db}" -N -B -e "SELECT id FROM ${mysql_tb} order by id desc limit 0,1"`
   next_id=`expr $id + 1`

   eth1_rx_old=`cat /home/foster/iface/base/${iface}_rx`
   eth1_tx_old=`cat /home/foster/iface/base/${iface}_tx`

   if [ $((eth1_rx)) -lt $((eth1_rx_old)) ]
   then
       eth1_rx_new=$eth1_rx
   else
       eth1_rx_new=`expr $((eth1_rx)) - $((eth1_rx_old))`
   fi

   if [ $((eth1_tx)) -lt $((eth1_tx_old)) ]
   then
       eth1_tx_new=$eth1_tx
   else
       eth1_tx_new=`expr $((eth1_tx)) - $((eth1_tx_old))`
   fi

   mysql -h $mysql_host -u $mysql_login --password="${mysql_pass}" -D "${mysql_db}" -N -B -e "INSERT INTO ${mysql_tb} VALUES ('$next_id',UNIX_TIMESTAMP(),'${iface}','$eth1_rx_new','$eth1_tx_new')"


   if [ $((eth1_rx)) -gt 0 ]
   then echo "${eth1_rx}" > "/home/foster/iface/base/${iface}_rx"
   fi
   if [ $((eth1_tx)) -gt 0 ]
   then echo "${eth1_tx}" > "/home/foster/iface/base/${iface}_tx"
   fi
fi

 

и паковалка в архив на PHP

iface $  cat iface_traff2arch.php
<?php
set_time_limit(0);

$tb="db_table";
$tb_arch="db_table_arch";

$link=mysql_connect('db_host', 'db_login', 'db_password') or die("Unable to connect");
mysql_select_db('db_name') or die("Unable to select DB");
mysql_query('SET NAMES cp1251');

$q=mysql_query("SELECT * FROM $tb order by id");

while($r=mysql_fetch_array($q))
{
   $day=date('d', $r['time']);
   $month=date('m', $r['time']);
   $year=date('Y', $r['time']);

   $q1='';$r1='';
   $q1=mysql_query("SELECT * FROM $tb_arch WHERE `iface`='$r[iface]' && `year`='$year' && `month`='$month' && `day`='$day'");
   $r1=mysql_fetch_array($q1);

   if ((empty($r1['tx']) && $r['tx']!='0') or (empty($r1['rx']) && $r['rx']!='0'))
       mysql_query("INSERT INTO iface_arch VALUES ('$year','$month','$day','$r[rx]','$r[tx]','$r[iface]')");
   else
   {
       $rx_new=0; $tx_new=0;
       $rx_new=$r['rx'] + $r1['rx'];
       $tx_new=$r['tx'] + $r1['tx'];
       mysql_query("UPDATE iface_arch SET rx='$rx_new',tx='$tx_new' WHERE `iface`='$r[iface]' && `year`='$year' && `month`='$month' && `day`='$day'");
   }
}
mysql_query("TRUNCATE $tb");

mysql_close($link);

?>

 

в кроне соответственно:

*/5 * * * * /home/foster/iface/iface_traff eth1 1 > /dev/null 2 > /dev/null
*/5 * * * * /home/foster/iface/iface_traff eth2 1 > /dev/null 2 > /dev/null
*/5 * * * * /home/foster/iface/iface_traff vlan17 1 > /dev/null 2 > /dev/null
25 3 * * * /usr/local/bin/php -f /home/foster/iface/iface_traff2arch.php 1 > /dev/null 2 > /dev/null

статистика по интерфейсам eth1 eth2 vlan17 складывается каждые 5 минут в базу и в 3:25 ночи перекидывается в архив. Там просто лежит за день, т.е. суммируется.

Ссылка на сообщение
Поделиться на других сайтах

кстати http://sauron.jyu.fi/

 

Sauron

a free DNS & DHCP management system

Some of the Sauron's features include:

generates complete BIND (DNS) configuration file set for each server

generates complete dhcpd (ISC's DHCP) configuration file set for each server

automatically generates "reverse" zones

supports smaller than class-C "reverse" zone delegations

dynamic host aliases (both CNAME and A-record)

support for dynamic DHCP address pools with access control (requires DHCP v3)

DHCP failover support (requires ISC DHCP v3 or newer)

MX and WKS record templates for hosts

hosts may be assigned to a group that defines common attributes for it

support for most most of the standard DNS RRs (resource records)

...

 

http://webdhcp.sourceforge.net/

http://sourceforge.net/projects/dixie/

http://webdhcpdns.labs.libre-entreprise.org/index-en.html

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...