Я пытаюсь настроить dhcp-сервер (isc dhcpd на debian 8 (vm внутри среды esxi)) с 4 сетевыми интерфейсами, eth0-3. Сервер dhcp должен обслуживать другую подсеть на интерфейсах. eth1, eth2, eth3. Каждая подсеть имеет свой собственный vSwitch (vSphere), и сервер DHCP подключен к каждому vSwitch.
Настройка сетевого интерфейса выглядит так:
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255
auto eth2
iface eth2 inet static
address 172.16.0.1
netmask 255.255.255.0
network 172.16.0.0
broadcast 172.16.0.255
auto eth3
iface eth3 inet static
address 10.0.1.1
netmask 255.255.255.0
network 10.0.1.0
broadcast 10.0.1.255
Текущая конфигурация dhcpd выглядит так:
# dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
subnet 172.16.0.0 netmask 255.255.255.0 {
range 172.16.0.2 172.16.0.100;
option subnet-mask 255.255.255.0;
option domain-name-servers 172.16.0.1;
option routers 172.16.0.1;
option broadcast-address 172.16.0.255;
}
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.2 10.0.0.100;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.0.1;
option routers 10.0.0.1;
option broadcast-address 10.0.0.255;
}
subnet 10.0.1.0 netmask 255.255.255.0 {
range 10.0.1.2 10.0.1.100;
option subnet-mask 255.255.255.0;
option domain-name-servers 10.0.1.1;
option routers 10.0.1.1;
option broadcast-address 10.0.1.255;
}
И наконец, сценарий инициализации dhcpd выглядит так:
# /etc/default/isc-dhcp-server
DHCPD_CONF=/etc/dhcp/dhcpd.conf
DHCPD_PID=/var/run/dhcpd.pid
INTERFACES="eth1 eth2 eth3"
Все идет нормально. Однако в настоящее время происходит то, что клиенты получают трафик DHCP только через интерфейс eth1. Два других сетевых интерфейса игнорируются. Даже когда я удаляю eth1 из сценария инициализации isc-dhcp-server, он все еще используется и обслуживает IP-адреса:
isc-dhcp-server[1467]: Starting ISC DHCP server: dhcpd.
dhcpd: DHCPDISCOVER from 00:0a:26:37:6f:12 via eth1
dhcpd: DHCPOFFER on 10.0.0.2 to 00:0a:26:37:6f:12 (client0) via eth1
dhcpd: DHCPREQUEST for 10.0.0.2 (10.0.0.1) from 00:0a:26:37:6f:12 (client0) via eth1
dhcpd: DHCPACK on 10.0.0.2 to 00:0a:26:37:6f:12 (client0) via eth1
Как я могу убедиться, что определенная сеть / подсеть обслуживается только с использованием определенного сетевого интерфейса? Как dhcp-сервер узнает, какой клиент к какой подсети принадлежит? Я знаю, что могу указать хосты для подсети, используя нотацию хостов (адрес оборудования, имя хоста и т. Д.). Однако для меня это противоречит цели dhcp, потому что я хочу иметь возможность назначать IP-адреса динамически, не касаясь конфигурации dhcp всякий раз, когда я добавляю нового клиента в подсеть.
Итак, мы приступим к небольшому объяснению того, что происходит. ПОЖАЛУЙСТА, обратите внимание, что я настоятельно рекомендую запускать конфигурации в тестовой среде, чтобы убедиться, что все работает так, как вы хотите!
Изменить: также обратите внимание, что ваши переключатели должны быть правильно настроены. Мы используем переключатели CISCO. Чтобы сгенерировать ключ OMAPI, вы можете следовать гид1 или guide2.
Как сделать isc-dhcp-сервер слушать в нескольких подсетях. Это мини-руководство даст вам общее представление о конфигурации и некоторые дополнительные материалы, которые нужно прочитать, чтобы полностью понять, что происходит.
dhcpd.conf:
omapi-port 7911;
omapi-key omapi_key;
key omapi_key {
algorithm hmac-md5;
secret your-secret-key;
}
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# option definitions common to all supported networks...
# option domain-name-servers x.x.x.x,y.y.y.y;
option netbios-node-type 2;
default-lease-time 7200;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# Failover Configuration
failover peer "failover-partner" {
primary;
# this servers ip address
address A.A.A.A;
port 519;
# dhcp failover ip address
peer address B.B.B.B;
peer port 520;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
}
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
# here we include specific configuration files for our different subnets.
# I'll provide an example for a configuration file, all other subnet configuration files
# are (in my scenario) written the same way.
include "/etc/dhcp/X.Y.1.Z.conf";
include "/etc/dhcp/X.Y.2.Z.conf";
include "/etc/dhcp/X.Y.3.Z.conf";
X.Y.1.Z.conf:
#____________________________________
# subnet information X.Y.1.0/24
#____________________________________
subnet X.Y.1.0 netmask 255.255.255.0 {
deny client-updates;
deny unknown-clients;
# gateway of this subnet
option routers X.Y.1.254;
# DNS server(s)
option domain-name-servers 123.123.123.1, 123.123.123.2;
# search domain(s) for this subnet. Needs the "" to work!
option domain-search "domain1", "domain2";
# name of domain of this subnet (if exists, otherwise comment out)
option domain-name "mydomain";
# ntp server if you are running one
option ntp-servers X.Y.Z.254;
default-lease-time 86400;
max-lease-time 86400;
group {
use-host-decl-names on;
# Infodisplay
host dns-name-1 {
# mac address of client
hardware ethernet 00:00:00:00:00:00;
# ip address the above mac address will receive
fixed-address 123.123.123.1;
}
}
Остальные файлы конфигурации для подсетей создаются одинаково. Убедитесь, что если вы запускаете виртуальную машину DHCP внутри ESXi, чтобы сделать виртуальную машину доступной для всех ваших сетей / VLAN. В isc-dhcp-сервер затем необходимо прослушивать все ожидаемые сети, чтобы обрабатывать разные подсети в одном запущенном экземпляре isc-dhcp-server. Если вы хотите исключить простои или неработающую сеть, вы, конечно, можете запустить вторую виртуальную машину с isc-dhcp-сервер в подчиненном режиме вот так:
подчиненный dhcpd.conf:
omapi-port 7911;
omapi-key omapi_key;
key omapi_key {
algorithm hmac-md5;
secret your-secret-key;
}
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# option definitions common to all supported networks...
# option domain-name-servers x.x.x.x,y.y.y.y;
option netbios-node-type 2;
default-lease-time 7200;
max-lease-time 7200;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# Failover Configuration
failover peer "failover-partner" {
primary;
# this servers ip address
address B.B.B.B;
port 519;
# dhcp master ip address
peer address A.A.A.A;
peer port 520;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
}
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
# here we include specific configuration files for our different subnets.
# I'll provide an example for a configuration file, all other subnet configuration files
# are (in my scenario) written the same way.
include "/etc/dhcp/X.Y.1.Z.conf";
include "/etc/dhcp/X.Y.2.Z.conf";
include "/etc/dhcp/X.Y.3.Z.conf";
Убедитесь, что секретные ключи одинаковы на обеих машинах, иначе клиент и сервер не могут связываться или даже выполнять переключение при отказе, если сервер выходит из строя и подчиненное устройство, как ожидается, возьмет на себя функции dhcp.
Если у вас есть оборудование / параметры настройки, настройте все это в экспериментальной среде.
ПОЖАЛУЙСТА, НЕ ЗАПУСКАЙТЕ ЭТО МГНОВЕННО В ПРОИЗВОДСТВЕННОЙ СРЕДЕ.
Вы можете перестать заставлять своих сетевых клиентов работать в считанные секунды, и это не понравится вашему боссу.