 |
ot Ivo Gelov(26-01-2008)
reiting (23)
[ dobre ]
[ zle ]
Variant za otpechatvane
Survurut, koito administriram predostavia DNS i DHCP uslugi
na potrebitelite. Razbira se, tova stava s pomoshtta na
BIND (NAMED) i DHCPD - kakto pri pochti vsichki Linux
distributsii, te se klasika. BIND igrae roliata na keshirasht
DNS
survur, za da namalia natovarvaneto kum dostavchika si - a
sushto i obrabotva lokalnite zaiavki ot NetBIOS (WINS).
DHCPD ot edna strana predostavia udobstvo na potrebitelite,
koito sa s laptop i chesto se mestiat ot mrezha v mrezha,
a ot druga osiguriava postoianno suotvetstvie mezhdu
razdavanite IP adresi i poznatite mu MAC-adresi (kato
pozvoliava
rabotata i na potrebiteli s nepoznat MAC-adres). Taka za
nuzhdite na razlichni statistiki se osiguriava postoianstvo na
IP-adresite na potrebitelite.
Taka opisanata konfiguratsiia raboti bezproblemno, no poradi
tekuchestvo i drugi prichini se nalaga vse po-chesto da
pravia promeni po nastroikite kakto na DHCPD, taka i na BIND
- a puk taka i ne uspiah da podkaram DDNS (Dynamis DNS,
pri koito DHCPD informira BIND po RNDC protokol za
novopoiavili se potrebiteli, taka che da budat dobaveni v
DNS
listata). Porazrovih se iz GOOGLE i popadnah na 2 interesni
neshta:
1. MyDNS (http://mydns.bboy.net/) - maluk
DNS survur, napisan ot nulata, koito vmesto ot tekstov fail
vzima DNS
zapisite si ot SQL baza danni (MySQL ili PostgreSQL). Ne e
rekursiven - tova oznachava, che ako turseniiat zapis go
niama v bazata danni, niama da bude napraveno zapitvane do
DNS survura na dostavchika, ili puk kum ROOT survurite,
a shte se vurne suobshtenie, che niama takuv adres. Taka che iavno
prilozhenieto mu e samo za golemi organizatsii s goliam
broi lokalni adresi, koito chesto se promeniat. Vsushtnost,
mozhe da se izpolzva v kombinatsiia s DNScache
(http://cr.yp.to/djbdns/dnscache.html)
- tova e rekursiven keshirasht DNS klient, chast ot paketa
"djbdns" (po-izvesten
kato TinyDNS) na profesor D. J. Bernstein (avtor na Qmail)
- na adres http://cr.yp.to/djbdns.html
Struva si da bude razgledan, i veroiatno dori instaliran.
Lichno na men tochno v tozi moment mi lipsva dostatuchno
vreme,
no opredeleno bih posuvetval vsichki, koito imat seriozni
interesi v mrezhovoto administrirane da poglednat tozi
proekt.
2. DNSmasq (http://www.thekelleys.org.uk/dnsmasq/do...)
- mnogo apetitna kombinatsiia ot tipa 2-v-1 (DNS + DHCP).
Izpolzva se v niakoi firmueri (firmware) za spetsializirani
(dedicated ili embedded) ruteri - naprimer v OpenWRT
(http://openwrt.org/). Tova e
keshirasht rekursiven (po-skoro termina e forwarder, zashtoto
preprashta zaiavkite kum
DNS survura na dostavchika, a ne direktno kum ROOT DNS
survurite) DNS survur s modul za DHCP/BOOTP - tiasno
integrirani
edin s drug.
Reshih da si napravia "upgrade" - da premina ot
BIND + DHCPD kum DNSmasq. Hem po-maluk i po-burz survur, hem
DDNS shte
si se pravi avtomatichno :-) Recheno-storeno - svalih si
poslednata versiia 2.40 i zapochnah da razuchavam
parametrite
v konfiguratsiiata. Napisah si elementaren skript na PHP, s
koito prez WEB-interfeis da obnoviavam spisuka s IP
adresi
i tiahnoto suotvetstvie s MAC-adresi i imena na hostove.
Purvo shte pokazha moiat konfiguratsionen fail, a sled tova
shte
go obiasnia zaedno s 1-2 podvodni kamuka, na koito se
natuknah.
addn-hosts = /etc/dnsmasq/dns_host
expand-hosts
log-facility = /var/log/dnsmasq.log
group = nobody
listen-address = 127.0.0.1
listen-address = 192.168.0.1
listen-address = 192.168.2.1
bind-interfaces
localise-queries
bogus-priv
filterwin2k
no-resolv
no-poll
domain-needed
server = xx.xx.xx.xx
cache-size = 9000
dhcp-range=net0,192.168.0.2,192.168.0.100,10h
dhcp-range=net2,192.168.2.150,192.168.2.220,10h
#dhcp-hostsfile = /etc/dnsmasq/dhcp_host
read-ethers
domain = my-domain.com
dhcp-ignore-names
dhcp-authoritative
#log-dhcp
# This tells M$ to release their lease when they
shutdown
dhcp-option=vendor:MSFT,2,1i
# Router
dhcp-option=net0,3,192.168.0.1
dhcp-option=net2,3,192.168.2.1
# DNS
dhcp-option=net0,6,192.168.0.1
dhcp-option=net2,6,192.168.2.1
# WINS server
dhcp-option=net0,44,192.168.0.1
dhcp-option=net2,44,192.168.2.1
# NetBIOS over TCP/IP Datagram Distribution Server
Option
dhcp-option=net0,45,192.168.0.1
dhcp-option=net2,45,192.168.2.1
# Node type - P (Point-to-Point UDP, not generate and not
accept broadcasts)
dhcp-option=net0,46,2
dhcp-option=net2,46,2
# NetBIOS over TCP/IP Scope Option (probably domain - they
usually leave empty)
dhcp-option=net0,47
dhcp-option=net2,47
OPISANIE
addn-hosts = /etc/dnsmasq/dns_host - dobavia sudurzhanieto na
tozi fail kum informatsiiata, prochetena ot
"/etc/hosts".
Tozi fail (/etc/dnsmasq/dns_host) se generira chrez moia PHP
skript i sudurzha DNS informatsiia za lokalnite
potrebiteli.
Formatut mu e sushtiia kakto na "/etc/hosts"
expand-hosts - avtomatichno dobavia domein-ime kum imenata ot
"/etc/hosts" i faila ot "addn-hosts",
ako lipsva
group = nobody - grupata, s chiito prava da se startira
DNSmasq. Po defolt e "dip", koeto men ne me
ustroiva
listen-address - izbroiavat se adresite na survura, prez
koito shte poluchava zaiavki. Po defolt sluhti na vsichki
dostupni interfeisi (0.0.0.0)
bind-interfaces - po defolt, dori ako se ukazhe
"listen-address", DNSmasq pak sluhti na 0.0.0.0, i
ignorira
zaiavkite, koito ne sa ot izbroenite interfeisi. Tova e
"udobstvo", taka che ako interfeisite dinamichno si
smeniat
adresite, tova ne prechi na rabotata na DNSmasq (pri men
niama takava opasnost, zatova i bind-interfaces)
localise-queries - ako edno i sushto DNS ime e obiaveno za
niakolko IP adresa v "/etc/hosts" (ili
"addn-hosts"),
DNSmasq se opitva da vurne samo adresa, koito otgovaria na
sushtata podmrezha, ot koiato idva zapitvaneto
bogus-priv - vsichki obratni zapitvaniia (toest ot IP kum
domein ime) za chastni adresi (10, 172.16-31, 192.168) se
obrabotvat samo lokalno bez da se preprashtat kum DNS survura
na dostavchika (ako gi niama opisani v "/etc/hosts"
se
vrushta suobshtenie, che niama takuv adres)
filterwin2k - eliminira LDAP zaiavkite (tui kato
potrebitelite mi ne sa v Windows-domain, a v
Workgroup-i)
no-resolv - ne vzima avtomatichno adresite za DNS survurite
na Internet dostavchika ot "/etc/resolv.conf",
a
samo izrichno ukazanite v konfiguratsionniia fail
no-poll - ne proveriava periodichno
"/etc/resolv.conf" za promeni (prilozhimo samo pri
PPP i PPPoE)
domain-needed - zabraniava da se preprashtat kum DNS survura
na dostavchika zaiavki za imena, koito ne sudurzhat tochka
"."
Tova sa lokalni imena - ako gi niama opisani v
"/etc/hosts" ili nastroikite na DHCP modula, se
vrushta greshka "Not found"
server = xx.xx.xx.xx - tova e adresut na DNS survura na
Internet dostavchika
cache-size = 9000 - kolko DNS otgovora ot survura na
dostavchika da se keshirat (maksimuma e ustanoven na 10000
v izhodniia kod na DNSmasq)
dhcp-range=net0,192.168.0.2,192.168.0.100,10h - tazi
komanda razreshava obrabotvaneto na DHCP zaiavki za
suotvetnata
podmrezha, dava i ime (net0) koeto mozhe da se izpolzva sled
tova v "dhcp-option" i ustanoviava vremetraeneto po
podrazbirane
na razdavanite IP adresi da bude 10 chasa
#dhcp-hostsfile = /etc/dnsmasq/dhcp_host - tova beshe
osnovniia prepuni-kamuk. Tozi fail se generirashe ot moia
PHP
skript, v nego se opisvashe suotvetsvieto mezhdu IP i MAC
adresi i se zadavaha imena na hostovete. DNSmasq uporito
otkazva
da priznae tova, i pri poluchavane na zaiavka DHCPREQUEST s
IP, koeto e opisano v tozi fail - vrushta otgovor DHCPNAK
sus
suobshtenie "address reserved", sled koeto klienta
izprashta otnovo DHCPREQUEST (tozi put bez IP) i poluchava
IP-adres - samo
che NE TOZI, koito sum opisal vuv faila, a niakoi svoboden ot
obhvata na "dhcp-range". Borih se niakolko dni,
rovih se
v izhodniia kod - i ne mozhah da shvana zashto e napraveno
taka. V dokumentatsiiata na DNSmasq e ukazano, che ako v
"dhcp-range"
vmesto kraen adres se napishe klyuchovata duma
"static", toi prestava da razdava dinamichno adresi
- toest IP adres shte poluchat
samo klientite, chiito MAC adresi sa opisani v
"dhcp-hostsfile" ili "dhcp-host"
direktivi. Kogato obache go izprobvah,
poluchih greshka za DHCPDISCOVER "no address available
in the range". Nakraia, absolyutno sluchaino, reshih da
izprobvam kakvo
shte stane s direktivata "read-ethers". Tia e
podobna na "dhcp-hostsfile" - prochita ot
"/etc/ethers" suotvetstvieto mezhdu
MAC i IP adresite, no ne pozvoliava nikakvi drugi optsii
(naprimer vremetraene na IP adresa, identifikator na
mrezhata, na
hosta i t.n.). Formatut na faila e MAC-adres, 1 ili poveche
shpatsii (ili tabulatsii) i sled tova ili IP-adres, ili ime na
hosta
(no ne i dvete). I o, chudo ! Vsichko se poluchi - DNSmasq
zapochna da razdava tochno posochenite IP adresi za vseki MAC
adres.
Ne uspiah da otkriia nikakva informatsiia v GOOGLE za tazi ili
podobna situatsiia, skoro shte pisha do avtora na DNSmasq, i
pri
nuzhda shte napisha komentar kum statiiata.
read-ethers - kakto napisah po-gore, tova reshava problema
za statichnoto privurzvane na MAC kum IP adres. V moia
sluchai
"/etc/ethers" e simvolichna vruzka kum
"/etc/dnsmasq/ethers", koito se generira ot moia
PHP skript
domain = my-domain.com - fiktiven lokalen domein, mozhe da
si izmislite sobstven
dhcp-ignore-names - vinagi ignorira imeto na hosta, koeto
toi sam predlaga v DHCP zaiavkata, i go registrira v DNS
spisuka s imeto, koeto e zadadeno v konfiguratsionnite
failove ("/etc/hosts", "/etc/ethers" ili
"dhcp-hostsfile")
dhcp-authoritative - izpolzva se, kogato DNSmasq sus
sigurnost e edinstveniia DHCP survur v mrezhata. Togava toi
veche
ne ignorira zaiavki, koito ne e razdal toi samiia. Po tozi
nachin ako se razvali faila s opisanie na razdadenite
adresi
(/var/lib/misc/dnsmasq.leases) - toi se suzdava dinamichno
po informatsiiata ot klientskite zaiavki. Az lichno go
izpolzvam, za
da namalia vremeto za time-out pri prehod ot DHCPD kum
DNSmasq (ili puk ako v mrezhata se vklyuchi laptop, koito ima
lease ot
druga DHCP survur v druga mrezha)
#log-dhcp - ukazva na DNSmasq da zapisva informatsiia za DHCP
zaiavkite i otgovorite v log-faila (log-queries se
izpolzva
da zapisva informatsiia za DNS zaiavkite i otgovorite)
dhcp-option - izpolzvat se za ukazvane na optsii kum tsiala
grupa ot klienti. Formatut e
"dhcp-option=net-id,option-id,option-value".
NET-ID triabva da suvpada s tozi, zadaden v
"dhcp-range" ili "dhcp-host", tova e
naimenovanieto na grupata klienti. Optsiite sa opisani v
RFC2132 (http://www.faqs.org/rfcs/rfc2132.html),
tochka 3. Nai-chesto
izpolzvanite sa kato tezi v moia konfiguratsionen fail (ot
komentarite se vizhda prednaznachenieto im)
Makar i opisano nai-nakraia, vsushtnost tova e neshtoto, koeto
triabva da proverite nai-napred - stava duma za nastroikite
na
zashtitnata stena (IPtables). DHCPD e taka napisan, che v
povecheto sluchai uspiava da zaobikoli IPtables vutre v samoto
iadro.
Taka che, dori DHCPD da e rabotil vuv vashata mrezha - tova ne
znachi, che i DNSmasq shte zaraboti. Po-konkretno, triava da
ste
uvereni, che za vsichki interfeisi, na koito sluhti DNSmasq e
razresheno poluchavaneto na paketi s iztochnik 0.0.0.0 i
poluchatel 255.255.255.255. Inache shte se chudite zashto DHCPD si
razdava adresi s kef, a puk DNSmasq siakash izobshto ne
useshta
zaiavkite :-)
Dokumentatsiiata na DNSmasq e dosta pesteliva, a i v
meiling-listite ne zabeliazah dostatuchno spetsialisti - taka
che puskaneto
mu v deistvie e edno malko predizvikatelstvo. No puk spored
men za ne osobeno natovareni mrezhi uspeshno mozhe da
zameni
BIND i DHCPD.
Iskashe mi se da publikuvam i PHP skripta za elementarniia
WEB interfeis, no mozhe bi e po-dobre napravo da dam link.
Slozhil
sum go na bezplaten survur - taka che sled 30-ina dni linka
shte bude neaktiven. No vseki zhelaesht mozhe da mi prati PM s
emaila
si, i shte mu go izpratia. A linkut e
http://rapidshare.com/files/86787611/dn...
http://www.zshare.net/download/68957842...
http://www.uploading.com/files/G92VLP4M...
Tablitsite v bazata danni imat sledniia format:
DROP TABLE IF EXISTS `host`;
CREATE TABLE `host` (
`NET` tinyint(3) unsigned NOT NULL default '0',
`IP` tinyint(3) unsigned NOT NULL default '0',
`MAC` varchar(12) NOT NULL,
`PERSON` varchar(24) NOT NULL,
PRIMARY KEY (`NET`,`IP`),
UNIQUE KEY `MAC` (`MAC`),
UNIQUE KEY `PERSON` (`PERSON`)
) ENGINE=MyISAM /*!40100 DEFAULT CHARSET=cp1251*/;
DROP TABLE IF EXISTS `mreza`;
CREATE TABLE `mreza` (
`ID` tinyint(3) unsigned NOT NULL default '0',
`MREZA` varchar(20) NOT NULL,
PRIMARY KEY (`MREZA`,`ID`)
) ENGINE=MyISAM /*!40100 DEFAULT CHARSET=cp1251*/;
<< | >>
|
 |