Sziasztok!
Egy (beismerem kissé kusza) DHCP/DHCP-RELAY egyveleg szivat, ebben kéne egy kis segítség vagy infó.
Ez egy főiskola hálózata, ahol van két Windows AP fa, és egy jópár vlan. A Windows domain-ben lévő gépek DHCP szervere a megfelelő Windows szerver. Ahol nem kapcsolódnak közvetlenül a kliensek, ott (általában) egy ProCurve 5406zl switch továbbítja a DHCP kéréseket, és a switch a router is.
Néhány VLAN-ban ahol a gépek nincsennek a domain-ben, ott a DHCP szerver (és a defaulr router/tőzfal-is) egy ubuntu szerver (8.04). Van egy VLAN (ez keverte meg a dolgokat), ahol a gépek Windows kliensek, beléptetve a domain-ba, de ezek egyébb okok miatt az Ubuntu tűzfal mögött vannak. Ennek néhány következméne:
Mivel ebben a VLAN-ban az 5406zl-nek nincs IP címe (nem ő rout-ol) nem lehet ő a DHCP-RELAY sem.
Egyébb okokból a tűzfal nem kapcsolódik ahhoz a VLAN-hoz amiben a DHCP SZERVER van:
(kliens gépek, VLAN3038)---[tűzfal ubuntu]---(VLAN3001)---[router 5406zl]---( DHCP szerver, VLAN3016 ).
A VLAN3001-ben is van ugye egy DHCP szerver, de az egy másik domain.
A felállás tulajdonképpen működik, csak van egy szépséghibája. A tűzfalon futó dhcp-relay szerver hallgatózik a vlan3038, és vlan3001-es interfészen is, ezért ha a vlan3001-ből jön egy DHCP kérés, akkor azt is továbbítja a vlan3016-ban lévő DHCP szerver felé, amit a DHCP szerver eldobb, mert a 3001-es vlan nem rá tartozik.
Úgy gondoltam, hogy ezt a kis szépséghibát tűzfal szabályokkal megszüntetem. Megírtam a tűzfalszabályokat, és nem működnek, csak annyi derült ki számomra, hogy valamit NAGYON NEM ÉRTEK.
A jelenség:
A tűzfal szabályok (input oldal, számlálókat töröltem, hogy ne legyenek tú hosszú sorok):
Chain INPUT (policy DROP 0 packets, 0 bytes)
target prot opt in out source destination
ACCEPT all -- lo any anywhere anywhere
internetioi all -- eth1 any anywhere anywhere
ACCEPT icmp -- any any anywhere anywhere
tunioi all -- tun+ any anywhere anywhere
dhcpdioi udp -- any any anywhere anywhere udp spts:bootps:bootpc dpts:bootps:bootpc
...
Az INPUT láncban (az eth1-az internet felé néz) a DHCP-vel kapcsolatba hozható csomagok mennek a dhcpdioi láncra:
Chain dhcpdioi (1 references)
target prot opt in out source destination
ACCEPT udp -- eth0 any anywhere anywhere udp spt:bootpc dpt:bootps
ACCEPT udp -- vlan3059 any anywhere anywhere udp spt:bootpc dpt:bootps
ACCEPT udp -- vlan3060 any anywhere anywhere udp spt:bootpc dpt:bootps
ACCEPT udp -- vlan3038 any anywhere anywhere udp spt:bootpc dpt:bootps
ACCEPT udp -- vlan3001 any anywhere anywhere udp spt:bootps dpt:bootps
LOG all -- any any anywhere anywhere LOG level warning prefix `DROP_DHCPi'
DROP all -- any any anywhere anywhere
Az eth0, vlan3059, vlan3060, vlan3038 -on fogadom a DHCP kéréseket a kliens felöl, a vlan3001-en fogadom a választ a DHCP szerver felől, minden mást loggolok, és eldobok. Ez alapján eldobom (el kellene dobni) a vlan3001-ből jövö DHCP kéréseket is.
Ehez képest a tcpdump eredménye, ha egy DHCP kérés érkezik a vlan3001-ből:
08:29:27.015699 IP 0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 00:0c:f1:e4:c9:70, length 300
08:29:27.016106 IP 172.20.1.253.67 > 255.255.255.255.68: BOOTP/DHCP, Reply, length 300
08:29:27.018611 IP 172.20.1.3.67 > 172.20.16.254.67: BOOTP/DHCP, Request from 00:0c:f1:e4:c9:70, length 300
A kliens kérésére (1.blokk) megjön a válasz az ottani dhcp szervertől (172.20.1.253), majd a harmadik blokkban látszik, hogy a dhcp-relay is továbbítja a kérést az általa ismert DHCP szervernek. Ha az első blokk el vagyon dobva, akkor mit keres a dump-ban, és miért válaszol rá bárki. A dhcpdioi láncban látszik is a találat az utolsó két szabályra, és ez a kernel log-ban is látszik:
Mar 20 08:51:33 mano kernel: [169919.075936] DROP_DHCPiIN=vlan3001 OUT= MAC=ff:ff:ff:ff:ff:ff:00:0c:f1:e4:c9:70:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=16 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
Bár ez a kis anomália nem okoz a kliensek szempontjából problémát, de engem nagyon elbizonytalanított.
Valaki homályosítson fel, mi a fene történik itt.