Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> isc-dhcpd + mysql

isc-dhcpd + mysql (over php)

Автор: loko9988.


   Написать эту статью меня заставило то что в течении 2 дней поиска по гуглу фразы isc-dhcpd mysql ничего не дало. А то что попадалось это советы написать самому. В итоге пришлось, ибо начальству не возражать перед з/п опасно :))

Из обеспечения что нам надо это сам ISC-Dhcp Mysql и PHP

Опишу тока установку самого dhcp благо по остальному статей многа :)

Для начала ставим сам DHCP сервер. И создаём основной конфиг


cd /usr/ports/net/isc-dhcp3-server
make install clean
cp ./dhcpd.conf.sample ./dhcpd.conf

Проставился. Отлично.
В принципе конфиг не обязательно копировать... достаточно создать в папке /usr/local/etc/
файл dhcpd.conf и дать ему права 666

chmod 666 dhcpd.conf

Теперь самое вкусное...
Создаём базу данных adminka и таблицу dhcpd


CREATE DATABASE `adminka` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
USE `adminka`;
--
-- Структура таблицы `dhcpd`
--

CREATE TABLE IF NOT EXISTS `dhcpd` (
  `name` varchar(30) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `ip2` varchar(15) NOT NULL,
  `odns` varchar(30) NOT NULL,
  `range1` varchar(15) NOT NULL,
  `range2` varchar(15) NOT NULL,
  `opbroad` varchar(15) NOT NULL,
  `ntps` varchar(30) NOT NULL,
  `subn` varchar(15) NOT NULL,
  `netmask` varchar(15) NOT NULL,
  `oprou` varchar(15) NOT NULL,
  `onns` varchar(15) NOT NULL,
  `ondds` varchar(15) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `dhcpd`
--

INSERT INTO `dhcpd` (`name`, `ip`, `ip2`, `odns`, `range1`, `range2`, `opbroad`, `ntps`, `subn`, `netmask`, `oprou`, `onns`, `ondds`) VALUES
('1', 'le0', '192.168.138.1', '192.168.168.1', '192.168.138.10', '192.168.138.230', '192.168.138.255', '192.168.138.1', '192.168.138.0', '255.255.255.0', '192.168.138.1', '192.168.138.1', '192.168.138.1');

Я использую phpmyadmin для удобства.
Создали идём дальше.
Создаём файл dhcp.php

#!/usr/local/bin/php
<?php
//
//
//
//ISC-DHCP
// Скрипт для хранения настроек в мускуле
//Аффтар нуб в пхп :) loko9988
//
//
//
//Конектимся к базе
@ $db=mysql_pconnect("localhost", "логин", "пасс");
  if (!$db)
  {
     echo "Ты намутил что-то не то... либо упала база.... либо хз";
     exit;
  }
  mysql_select_db("adminka");

//Производим выборку
  $query = "SELECT * FROM dhcpd WHERE name=1";
  $result = mysql_query($query);

//Обрабатываем результат
  $row = mysql_fetch_array($result);

//Раскидываем по переменным для удобства
$subn=$row["subn"];
$netmask=$row["netmask"];
$range1=$row["range1"];
$range2=$row["range2"];
$oprou=$row["oprou"];
$onns=$row["onns"];
$odns=$row["odns"];
$ondds=$row["ondds"];
$opbroad=$row["opbroad"];
$ntps=$row["ntps"];

//Подготавливаем переменную для создания конфига
$filed = "default-lease-time 720000;
max-lease-time 720000;

min-lease-time 720000;
authoritative;
ddns-update-style ad-hoc;

key DHCP_UPDATER {
        algorithm hmac-md5;

}

log-facility local7;

subnet $subn netmask $netmask {
      range  $range1 $range2;
      option routers $oprou;
    option subnet-mask $netmask;
    option netbios-name-servers $onns; 
    option domain-name-servers $odns;
    option netbios-dd-server $ondds; 
    option netbios-node-type 8;
    option broadcast-address $opbroad;
    option ntp-servers $ntps;
}
";
//Открытие файла, очистка файла и запись конфига в файл.
$fp = fopen("/usr/local/etc/dhcpd.conf", "w");
  if (!$fp)
  {
     echo "Ты намутил что-то не то... ведь всё работало";
     exit;
  }
fwrite($fp, $filed);
fclose($fp);
?>

Создали.. всё отлично даём ему права на исполнение.. так на всякий случай

chmod dhcp.php +x

Редактируем файл /usr/local/etc/rc.d/isc-dhcpd
Кидаем в шапку после коментов где указана обработка скрипта

phppath='/usr/local/bin/php'
phppathconf='/usr/home/admin/www/data/dhcp.php'
phpflags='-h'
runphp=`$phppath $phppathconf $phpflags`

терь настраиваем rc.conf
после #!/bin/sh кидаем

fullpathmysql='/usr/local/bin/mysql'
ipsil=`$fullpathmysql --user=логин --password=пасс -D adminka -e "SELECT ip FROM dhcpd WHERE name=1;"`
dhcpt1=`echo $ipsil|awk '{print $2}'`

Ну и где нить всередине или в конце кидаем сам запуск демона, советую просмотреть его сначала... мож там уже стоит запуск... так что то что создалось по автомату делим и пихаем

dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="$dhcpt1"

Тестим.. соответственно isc-dhcpd restart
Ура... всё работает.... но почему-то нихрена не работает при рестарте.. фсё потому что терь надо мутить зависимости при старте и рехашить фсю сеть...
Кидаем в папку файл



размещено: 2009-10-22,
последнее обновление: 2011-08-25,
автор: loko9988


malike, 2012-02-28 в 17:44:21

Молодец)) я тоже занялся данным делом)) если что нарою поправлю тебя)

acp1dmn, 2021-02-11 в 12:13:51

Эх, продолжение бы :) В частности, интересует, как из базы делать выборку статических адресов по макам и туда же в dhcpf.conf размещать ниже начальных данных.
PS чутка переделал скрипт по php7, хочу у себя попробовать применить на дебиане)



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0516 секунд
Из них PHP: 28%; SQL: 72%; Число SQL-запросов: 77 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 22795