Назад | Перейти на главную страницу

CentOS: DHCP-сервер и DHCP-ретранслятор на одном компьютере

dhcpd.conf:

authoritative;
local-address 10.10.1.100;

subnet 10.10.1.0 netmask 255.255.255.0 {

    range 10.10.1.10 10.10.1.50;
    option routers 10.10.1.1;
    option domain-name-servers 8.8.8.8, 8.8.4.4;

}

Запущенные процессы:

# ps -elf | grep [d]hcp
4 S root      1876  1867  0  80   0 -  1661 poll_s 11:11 pts/2    00:00:00 dhcrelay -i eth0 10.10.1.100 -i eth0:dhcp -d
5 S dhcpd     1947     1  0  80   0 - 12121 poll_s 11:38 ?        00:00:00 /usr/sbin/dhcpd -user dhcpd -group dhcpd eth0:dhcp

Я вижу DHCP DISCOVER, поступающие на eth0, и агент ретрансляции перенаправляет их на 10.10.1.100:

Forwarded BOOTREQUEST for <mac_address> to 10.10.1.100
Forwarded BOOTREQUEST for <mac_address> to 10.10.1.100
Forwarded BOOTREQUEST for <mac_address> to 10.10.1.100
Forwarded BOOTREQUEST for <mac_address> to 10.10.1.100

но DHCP-сервер регистрирует следующее сообщение:

Sep  4 11:13:47 localhost dhcpd: DHCPDISCOVER from <mac_address> via 192.168.1.1: unknown network segment
Sep  4 11:13:50 localhost dhcpd: DHCPDISCOVER from <mac_address> via 192.168.1.1: unknowk network segment
Sep  4 11:13:54 localhost dhcpd: DHCPDISCOVER from <mac_address> via 192.168.1.1: unknown network segment
Sep  4 11:13:59 localhost dhcpd: DHCPDISCOVER from <mac_address> via 192.168.1.1: unknown network segment

Переадресация IP включена:

net.ipv4.ip_forward = 1

Обычно сервер должен находиться в сети 192.168.1.0/24, однако он должен распределять IP-адреса из диапазона 10.10.1.0/24.

Предполагая, что ISC DHCPD вам не нужен ретранслятор dhcp, но вам нужна общая сеть в вашем dchpd.conf:

authoritative;
local-address 10.10.1.100;

shared-network eth0 {

    subnet 192.168.1.100 netmask 255.255.255.0 {
    }

    subnet 10.10.1.0 netmask 255.255.255.0 {

        range 10.10.1.10 10.10.1.50;
        option routers 10.10.1.1;
        option domain-name-servers 8.8.8.8, 8.8.4.4;

    }
}

Мне кажется, что ваш DHCP-ретранслятор прослушивает не тот интерфейс. Ретранслятор DHCP должен принимать запросы DHCP от клиентов на интерфейсе, который настроен для клиентской подсети, чтобы он мог передавать эту информацию на сервер DHCP.

ваша командная строка dhcrelay предполагает, что вы используете eth0 в качестве принимающего интерфейса. Я бы попробовал эту командную строку:

dhcrelay -i eth0: dhcp -d 192.168.1.100

Таким образом вы получите DHCP-запросы от eth0: dhcp (10.10.1.100) и отправите их на сервер 192.168.1.100. И не забудьте изменить local-адрес в dhcpd.conf.

Я не знаю точных RFC, но Википедия может мне помочь (Википедия о DHCP-ретрансляции). Также прочтите прекрасное руководство: dhcrelay руководство и dhcpcd.conf руководство