Debian lenny.
Van egy dhcp3 telepítve. A gépben van néhány hálókártya, és azt szeretném, hogy az eth3-on, ami 192.168.5.1/24 legyen ő a dhcp szerver.
Viszont az eth1-en, ami 192.168.0.22/24 ott ne (azon a hálózaton van egy másik gép).
/etc/dhcp3/dhcpd.conf fájlban nem találtam erre utaló beállítást.
/etc/default/dhcp3-server tartalma:
INTERFACES="eth3"
Ezután elindítva a dhcp szervert:
uwall:/etc/default# /etc/init.d/dhcp3-server start
Starting DHCP server: dhcpd3.
uwall:/etc/default# netstat -lup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:openvpn *:* 1916/openvpn
udp 0 0 *:bootps *:* 10713/dhcpd3
Szóval úgy tűnik, hogy mindenhol figyel.
Mit lehet tenni?
- 6329 megtekintés
Hozzászólások
Workaround: iptables-el tiltod a bejövő DHCP kéréseket, (és/vagy) a kimenő DHCP válaszokat azokon a portokon, ahol nem kéne válaszolnia.
- A hozzászóláshoz be kell jelentkezni
igen, pont ezt tettem kínomban :-(
- A hozzászóláshoz be kell jelentkezni
"Szóval úgy tűnik, hogy mindenhol figyel."
IP-n mindenképpen. Higgy neki, a DHCP protokoll működéséből adódóan nem hallgathat kizárólag egy adott IP-n. (A ps-ben láthatod is majd, hogy -q eth3.)
- A hozzászóláshoz be kell jelentkezni
-1
- A hozzászóláshoz be kell jelentkezni
Miért a mínusz egy? Ahogy már írták mások is, a unicast mellett a broadcast IP-re érkező forgalommal is kell kezdenie valamit. Ezért hát nem hallgathat kizárólag a 192.168.5.1-en. Nem azt írtam, hogy minden interfészen, hanem hogy minden IP-n. Megbízhat a dhcpd-ben, ha eth3-at állított be a dhcpd paramétereként interfésznek, akkor az csak azon fog hallgatni, és az eth1-en nem. Ebben mi volt a hibás? Elfogadom az érvet ha rámutatsz a tévedésemre, de a mínusz egynél lehetne egy fél mondat konkrétummal több.
- A hozzászóláshoz be kell jelentkezni
Megbízhat a dhcpd-ben, ha eth3-at állított be a dhcpd paramétereként interfésznek, akkor az csak azon fog hallgatni, és az eth1-en nem.
OK!
Kevertem a szezont...
+2
- A hozzászóláshoz be kell jelentkezni
Az, amit látsz, az nem az, mint amit keresel.
A dhcpd-nek több socketja van, amit itt látsz, az nem a listener, hanem a válasz-kiküldő socket.
A listener, az SOL_PACKET típusú, és arra rak is megfelelő socket filtert.
- A hozzászóláshoz be kell jelentkezni
+1, dhcpd raw packet figyel, ráadásként ha már ip-t szeretnél akkor max ez lehetne: 255.255.255.255
- A hozzászóláshoz be kell jelentkezni
Nem jó, mert kaphat olyan csomagokat is, amin már a gép rendes IP címével címzik. Meg talán még a 0.0.0.0-t is el kéne fogadni.
- A hozzászóláshoz be kell jelentkezni
csak példaként írtam, mint extreme value;)
- A hozzászóláshoz be kell jelentkezni
A netstattal meg tudom mutattatni ezt a socketet?
Eddig azt hittem, a -l az erre szolgál, a listener socketeket mutatja, nem a válasz-kiküldőket.
- A hozzászóláshoz be kell jelentkezni
netstat -awpn
UDP-nél nincs ilyen meg olyan. Merthogy connection-less...
- A hozzászóláshoz be kell jelentkezni
Kapásból nem tudnám megmondani, a netstat kijelzi-e (és hogyan), de a "connected datagram socket" létező kényelmi funkció. (Természetesen nem protokollszinten, hanem a helyi OS szintjén.)
http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html
If the initiating socket is not connection-mode, then connect() shall set the socket's peer address, and no connection is made. For SOCK_DGRAM sockets, the peer address identifies where all datagrams are sent on subsequent send() functions, and limits the remote sender for subsequent recv() functions. If the sa_family member of address is AF_UNSPEC, the socket's peer address shall be reset. Note that despite no connection being made, the term ``connected'' is used to describe a connectionless-mode socket for which a peer address has been set
- A hozzászóláshoz be kell jelentkezni
Létező fogalom, de az, hogy az UDP socket nincs connected állapotban, még nem jelent semmit. Lehet a felhasználás receive-only, lehet send-only, de lehet receive-send vegyesen. Ezekből a netstattal semmit nem látsz.
- A hozzászóláshoz be kell jelentkezni
Kapcsolódó kérdésem van.
Openwrt-n futkosó isc-dhcpd-4.2.4 azt csinálja hogy nem csak a
0.0.0.0:67
címen hallgatózik, hanem a
0.0.0.0:PORT
-on is, ahol PORT egy random szám.
Ez normális?
- A hozzászóláshoz be kell jelentkezni
"hanem a 0.0.0.0:PORT-on is, ahol PORT egy random szám."
És pontosan milyen protokollon? Véletlenül nem a raw socketet látod? Egy "netstat -nlp | grep dhcp" kimenetet légy szíves.
- A hozzászóláshoz be kell jelentkezni
root@OpenWrt:/# netstat -nlp | grep dhcp
netstat: /proc/net/tcp6: No such file or directory
udp 0 0 0.0.0.0:67 0.0.0.0:* 994/dhcpd
udp 0 0 0.0.0.0:54766 0.0.0.0:* 994/dhcpd
netstat: /proc/net/udp6: No such file or directory
raw 0 0 0.0.0.0:1 0.0.0.0:* 1 994/dhcpd
netstat: /proc/net/raw6: No such file or directory
Amúgy router reboot után mindig ezt az 54766-os portot választja...
- A hozzászóláshoz be kell jelentkezni
Még nem néztem utána:
That should be the port for mtftp for clients to download the bootfile
- A hozzászóláshoz be kell jelentkezni
Ha jól látom, itt tetted fel a kérdést. A kapott válasszal csak az a baj, hogy az ISC-féle dhcpd csak DHCP szerver, TFTP szerver nem tud lenni. Persze a DHCP-n kiszolgált adatok közé vehetsz fel TFTP-vel kapcsolatos opciókat, de ettől a dhcpd még nem lesz sem unicast, sem multicast TFTP szerver. Ezért nem hinném, hogy az ott jó válasz lenne.
Kicsit utánanézve inkább úgy tűnik, hogy a DDNS update-tel van kapcsolata.
server/dhcpd.c:
...
int
main(int argc, char **argv) {
...
status = dhcp_context_create();
...
}
omapip/isclib.c:
...
isc_result_t
dhcp_context_create(void) {
...
#if defined (NSUPDATE)
result = dns_client_createx(dhcp_gbl_ctx.mctx,
dhcp_gbl_ctx.actx,
dhcp_gbl_ctx.taskmgr,
dhcp_gbl_ctx.socketmgr,
dhcp_gbl_ctx.timermgr,
0,
&dhcp_gbl_ctx.dnsclient);
...
}
...
lib/dns/client.c (bind9):
...
isc_result_t
dns_client_createx(isc_mem_t *mctx, isc_appctx_t *actx, isc_taskmgr_t *taskmgr,
isc_socketmgr_t *socketmgr, isc_timermgr_t *timermgr,
unsigned int options, dns_client_t **clientp)
{
...
result = getudpdispatch(AF_INET, dispatchmgr, socketmgr,
taskmgr, ISC_TRUE, &dispatchv4);
...
result = getudpdispatch(AF_INET6, dispatchmgr, socketmgr,
taskmgr, ISC_TRUE, &dispatchv6);
...
}
...
lib/dns/client.c (bind9):
...
static isc_result_t
getudpdispatch(int family, dns_dispatchmgr_t *dispatchmgr,
isc_socketmgr_t *socketmgr, isc_taskmgr_t *taskmgr,
isc_boolean_t is_shared, dns_dispatch_t **dispp)
{
...
result = dns_dispatch_getudp(dispatchmgr, socketmgr,
taskmgr, &sa,
buffersize, maxbuffers, maxrequests,
buckets, increment,
attrs, attrmask, &disp);
...
}
...
lib/dns/dispatch.c (bind9):
...
dns_dispatch_getudp(dns_dispatchmgr_t *mgr, isc_socketmgr_t *sockmgr,
isc_taskmgr_t *taskmgr, isc_sockaddr_t *localaddr,
unsigned int buffersize,
unsigned int maxbuffers, unsigned int maxrequests,
unsigned int buckets, unsigned int increment,
unsigned int attributes, unsigned int mask,
dns_dispatch_t **dispp)
{
...
result = dispatch_createudp(mgr, sockmgr, taskmgr, localaddr,
maxrequests, attributes, &disp);
...
}
...
includes/site.h:
...
/* Define this if you want DNS update functionality to be available. */
#define NSUPDATE
...
stb.
- A hozzászóláshoz be kell jelentkezni
Akkor fordítsuk le ezt egyszerűbb nyelvezetre: az a random porton lakó socket egy UDP kliens socket, és azon keresztül küldözget DNS kéréseket kifelé a DHCP szerver, mégpedig azért, hogy így "jegyeztesse be" a DNS szerverbe a frissen kiadott IP cím-név párosokat.
Ellentétben a TCP socketokkal, egy UDP socketról sosem lehet tudni ránézésre, hogy az bejövő kérések fogadására szolgál (server socket), vagy kimenő kérések kiküldésére (client socket), ugyanis a kettő pont ugyanúgy néz ki - sőt, ad abszurdum egyazon socket használható akár mindkét célra egyaránt, ez az NTP szervernél pl. így is működik.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Nem igazán értem - régebben nekem működött (Lenny).
Amit biztosan tudok, az az hogy dnsmasq működik - nem tudom mire van szükséged a dhcp3 -ból.
"interface=eth1"
Semmire nem válaszol az eth0 -án - ott a router az úr.
* Én egy indián vagyok. Minden indián hazudik.
- A hozzászóláshoz be kell jelentkezni