DHCP-Server + DHCP-Relay - что как настраивать? [Решено]
NFS_Daemon 16 Августа, 2010 - 21:22
Доброго времени суток.
Есть вопрос - как нужно настроить DHCP-Server и DHCP-Relay чтобы они работали в связке?
На даный момент у меня ситуация следующая: клиент посылает запрос в сеть, Relay его принимает, и пересылает на Server, тот его обрабатывает, отсылает (куда? - хз), но Relay ничего от него не получает - клиент остается без ip-шника.
Конфиги обоих:
Server:
#cat /etc/dhcp/dhcpd.conf option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org; default-lease-time 600; max-lease-time 7200; ddns-update-style none; log-facility local7; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; } local-address 192.168.1.1; subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.100 192.168.2.200; } if exists agent.circuit-id { log ( info, concat( " Lease for ", binary-to-ascii (10, 8, ".", leased-address), " Switch port: ", binary-to-ascii (10, 8, ".", option agent.circuit-id), " Switch MAC: ", binary-to-ascii(16, 8, ".", option agent.remote-id))); } #ifconfig eth1 Link encap:Ethernet HWaddr 00:0c:29:98:00:3a inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe98:3a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:777 errors:0 dropped:0 overruns:0 frame:0 TX packets:579 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:181525 (177.2 KiB) TX bytes:79026 (77.1 KiB) Interrupt:19 Base address:0x2080 #cat /etc/conf.d/dhcpd DHCPD_IFACE="eth1"
Relay:
#cat /etc/conf.d/dhcrelay IFACE="eth3" DHCRELAY_SERVERS="192.168.1.1" #ifconfig gentoo ~ # ifconfig eth1 Link encap:Ethernet HWaddr 00:0c:29:9d:c8:39 inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe9d:c839/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:582 errors:0 dropped:0 overruns:0 frame:0 TX packets:824 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:86120 (84.1 KiB) TX bytes:182815 (178.5 KiB) Interrupt:19 Base address:0x2080 eth3 Link encap:Ethernet HWaddr 00:0c:29:9d:c8:43 inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe9d:c843/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:595 errors:0 dropped:0 overruns:0 frame:0 TX packets:56 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:175290 (171.1 KiB) TX bytes:11700 (11.4 KiB) Interrupt:16 Base address:0x2400
О топологии:
Server находится в сети 192.168.1.0/24 и имеет ip - 192.168.1.1
Relay находится в сетях 192.168.1.0/24 и 192.168.2.0/24, имеет адреса 192.168.1.100 и 192.168.2.1 соответственно.
Вот выдержки из логов обоих при попытке клиентом получить адрес:
Relay:
#/usr/sbin/dhcrelay -i eth3 -d 192.168.1.1 Internet Systems Consortium DHCP Relay Agent V3.1.2p1-Gentoo Copyright 2004-2009 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ Listening on LPF/eth3/00:0c:29:9d:c8:43 Sending on LPF/eth3/00:0c:29:9d:c8:43 Sending on Socket/fallback forwarded BOOTREQUEST for 00:0c:29:b0:94:06 to 192.168.1.1 forwarded BOOTREQUEST for 00:0c:29:6b:4a:95 to 192.168.1.1 forwarded BOOTREQUEST for 00:0c:29:b0:94:06 to 192.168.1.1
Server:
#tailf /var/log/messages Aug 16 23:20:23 gentoo dhcpd: DHCPDISCOVER from 00:0c:29:6b:4a:95 (gentoo) via 192.168.2.1 Aug 16 23:20:23 gentoo dhcpd: DHCPDISCOVER from 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1 Aug 16 23:20:24 gentoo dhcpd: ns1.example.org: host unknown. Aug 16 23:20:24 gentoo dhcpd: ns2.example.org: host unknown. Aug 16 23:20:24 gentoo dhcpd: DHCPOFFER on 192.168.2.100 to 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1 Aug 16 23:20:24 gentoo dhcpd: DHCPOFFER on 192.168.2.101 to 00:0c:29:6b:4a:95 (gentoo) via 192.168.2.1 Aug 16 23:20:31 gentoo dhcpd: DHCPDISCOVER from 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1 Aug 16 23:20:31 gentoo dhcpd: DHCPOFFER on 192.168.2.100 to 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1 Aug 16 23:20:47 gentoo dhcpd: DHCPDISCOVER from 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1 Aug 16 23:20:47 gentoo dhcpd: DHCPOFFER on 192.168.2.100 to 00:0c:29:b0:94:06 (gentoo) via 192.168.2.1
Сюдя по всему Server отправляет ответ в свою подсеть, а не на Relay, а как это исправить я уже не понимаю.
»
- Для комментирования войдите или зарегистрируйтесь
Маршрутизация из
Маршрутизация из 192.168.2.0/24 в 192.168.1.0/24 настроена/работает?
Т.е. если вручную присвоить клиенту 192.168.2.х адрес, то он видит DHCP-Server (ping etc)?
Kстати, у вас gateway'и не прописаны! :)
А можно по-подробнее?
Нужно чтобы от сети DHCP-клиентов к сети DHCP-Server (и наоборот) была связь через DHCP-Relay который должен выполнять функцию роутера?
Еще один вопрос - можно ли посредством DHCP-Server выставлять на клиенте дополнительные маршруты (к сети A через шлюз R)?
Статичесские маршруты в протоколе описаны.
Исходя из RFC 2132 - DHCP Options and BOOTP Vendor Extensions:
Значит остается узнать как их можно в dhcpd.conf описать.
Статические маршруты описать
Статические маршруты описать можно. Но для UNIX и M$ систем (принимающих маршруты) это делается по-разному.
Например:
1. В глобальной секции конфига описывается следующее:
2. Либо в глобальной, либо в секциях "network" или "host" описываются маршруты:
Например, 192.168.10.0/24 -> 192.168.200.220
Как перевести в этот вид (по смещениям) [все в HEX]:
0: (1 байт) - маска (/24) - 18
Маска /24 - это три значимых байта в адресе сети, далее:
1: (3 байта) - адрес сети назначения маршрута(192.168.10.0) - c0:a8:0a
4: (4 байта) - адрес шлюза (192.168.200.220) c0:a8:c8:dc
И так далее, если есть еще маршруты.
На самом деле - это еще далеко не все, куча подводных камней. Например - M$ XP не принимает маршрутов типа link (с gw=0.0.0.0), а M$ Vista/M$ Win7/Linux - принимают.
Но принцип именно такой, далее простыми экспериментами можно добиться желаемого.
Кстати - есть и другие варианты описания в конфиге dhcp, но приведенный мне почему-то понравился более всего.
Спасибо, уже немного легче.
А что ж так... У *nix одно, у MS - другое, это два стандарта выходит?
На всякий случай можно будет две опции указать (если в сети есть и *nix, и MS)?
Именно так, можно две. Я так
Именно так, можно две. Я так и делаю (и так же привел в примере), потому что мой домашний комп может быть загружен как под M$, так и под Linux. Однако, DHCP он принимает и таблицу маршрутизации тоже.
PS:
Это описано по другому RFC, 3442, в приведенном в вашем посте документе есть ссылка на него. Что касается Linux, то если передаются classless-routes, то требуется прямо указать default. Указывается он так: 00 (маска) и 4 байта шлюза. Адрес назначения пропускается, ибо его длина согласно маске 0 байт.
Что касается relay - не настраивал никогда, для каждого сегмента есть отдельный DHCP сервер - потому подсказать что-то мне сложно - не сталкивался непосредственно, только теоретически.
Немного потестил конфигурацию...
В общем, если на клиенте прописать статику - то сервера он пингует нормально, но - до перезапуска net.eth2 (что в общем ожидаемо), но на перед этапом получения адреса он и есть в состоянии down. То есть, все что ему нужно знать о сети он должен получить от DHCP-Server'a, а вот сервер я настроить не могу...
Есть кусок конфига, предназначеный для моих целей (взято с xgu.ru):
но сервер ругается на строчку pool, ругня идет на счет того что эта строка находится не в описании сети.
И знаю что мне нужно сюда копать, т.к. Relay - работает, запрос пересылает, ответ нет, но не потому что не хочет, а потому что ему ответа никто не дает. Server ему не отвечает.
Где можно почитать про настройку DHCP-Server для обработки DHCP-Relay запросов. Я что-то нашел аз один источник, остальные касаются железок.
Вопрос снят, косяки найдены.
Во-первых, на dhcp-сервере надо было указать маршруты к сети (сетям) DHCP-клиентов, но этого не было достаточно.
Окончательно все начало работать как надо после правильной настройки DHCP-Relay, а именно:
в файле /etc/conf.d/dhcrelay, в строке IFACE="eth1 eth2 ..." должны быть указаны не только интерфейсы клиентов, а и интерфейс смотрящий в подсеть сервера. А я его тут не указал.
Помогла сообщение из похожей темы на OpenNet.ru
Связка заработала.