Jump to content
Калькуляторы

DHCP сервер и алиасы (виртуальные интерфейсы) DHCP сервер и алиасы на бридже

Здравствуйте,

Имеется Ubuntu Server с тремя сетевыми интерфейсами: первый (eth2) - смотрит в интернет, второй (eth1) и третий (eth0) - объединены в бридж (br0) и смотрят в локалку. На бридже конфигурятся алиасы для 20 подсетей (br0:1.......br0:20). Поднимается DHCP сервер и начинает слушать интерфейс br0. На DHCP сконфигурена четкая привязка: каждому устройству в соответствии с MAC выдавать ip из определенной подсети. В общем то все работает - выдается ip из соответствующей сети, gateway, DNS. ОДНАКО, на стороне клиента ip самого DHCP сервера определяется неправильно - отображается ip не самого br0 (или даже ip соответствующего алиаса), а ip первого попавшегося алиаса, который указан в интерфейсах.

Вот - конфиги для 2х алиасов и результат, что получают клиенты из двух разных подсетей.

 

/etc/network/interfaces

auto lo
iface lo inet loopback

# Интернет
auto eth2
iface eth2 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1

# Локальная сеть
auto br0
iface br0 inet static
address 10.10.0.1
network 10.10.0.0
netmask 255.255.255.0
broadcast 10.10.0.255
bridge_ports eth0 eth1

auto br0:1
iface br0:1 inet static
address 10.10.1.1
network 10.10.1.0
netmask 255.255.255.0
broadcast 10.10.1.255

auto br0:2
iface br0:2 inet static
address 10.10.2.1
network 10.10.2.0
netmask 255.255.255.0
broadcast 10.10.2.255

 

/etc/default/dhcp3-server

INTERFACES="br0"

 

/etc/dhcp3/dhcpd.conf

ddns-updates off;
option T150 code 150 = string;
deny client-updates;
one-lease-per-client false;
allow bootp;

ddns-update-style none;

default-lease-time 172800;
max-lease-time 172800;

log-facility local7;

shared-network test_network { 
    deny unknown-clients;
    authoritative;
    option domain-name-servers 10.0.1.13 , 10.0.1.24;

subnet 10.10.1.0 netmask 255.255.255.0 {
        option broadcast-address 10.10.1.255;
        option routers 10.10.1.1;
}

subnet 10.10.2.0 netmask 255.255.255.0 {
    option broadcast-address 10.10.2.255;
    option routers 10.10.2.1;    
}
}

host comp1 {
           hardware ethernet 00:00:00:00:00:C3;
           fixed-address 10.10.1.2;
}

host comp2 {
           hardware ethernet 00:00:00:00:00:8F;
           fixed-address 10.10.2.2;
}

 

Вот результат, что получают comp1 и comp2

 

comp1

Физический адрес. . . . . . . . . : 00-00-00-00-00-C3

Dhcp включен. . . . . . . . . . . : да

Автонастройка включена . . . . . : да

IP-адрес . . . . . . . . . . . . :10.10.1.2

Маска подсети . . . . . . . . . . : 255.255.255.0

Основной шлюз . . . . . . . . . . :10.10.1.1

DHCP-сервер . . . . . . . . . . . :10.10.1.1 - Должен быть либо ip br0 либо ip br0:1

DNS-серверы . . . . . . . . . . . : 10.0.1.13

10.0.1.24

 

comp2

Физический адрес. . . . . . . . . : 00:00:00:00:00:8F

Dhcp включен. . . . . . . . . . . : да

Автонастройка включена . . . . . : да

IP-адрес . . . . . . . . . . . . :10.10.2.2

Маска подсети . . . . . . . . . . : 255.255.255.0

Основной шлюз . . . . . . . . . . :10.10.2.1

DHCP-сервер . . . . . . . . . . . :10.10.1.1 - Должен быть либо ip br0 либо ip br0:2

DNS-серверы . . . . . . . . . . . : 10.0.1.13

10.0.1.24

 

Запись в syslog (почему у br0 10.10.1.1, а не 10.10.0.1 - не понятно)

dhcpd: DHCPDISCOVER from 00:00:00:00:00:8F via br0
dhcpd: DHCPOFFER on 10.10.2.2 to 00:00:00:00:00:8F via br0
dhcpd: DHCPREQUEST for 10.10.2.2 (10.10.1.1) from 00:00:00:00:00:8F via br0
dhcpd: DHCPACK on 10.10.2.2 to 00:00:00:00:00:8F via br0

 

Т.е. для всех подсетей ip DHCP определяется не из br0 (10.10.0.1) и не из соответствующего алиаса, а из первого попавшегося алиаса в interfaces. Че за косяк - не понятно.

Share this post


Link to post
Share on other sites

Если не секрет, то какой смысл менять это поле? Ну отдаёт он первый адрес интерфейса (в данном случае им оказался ip альяса br0:0) и пусть отдаёт.

 

Но всё же если очень хочется, то выставляйте это поле вручную: добавьте строку option dhcp-server-identifier 10.10.1.1 в subnet 10.10.1.0 ; option dhcp-server-identifier 10.10.2.1 в subnet 10.10.2.0 и т.д. во все subnet'ы

 

>Запись в syslog (почему у br0 10.10.1.1, а не 10.10.0.1 - не понятно)

 

Потому что интерфейс - это либо физика(например eth0), либо саб(например eth0.3), либо тунель(ppp0), либо всякие bridge, а альяс это не интерфейс, а просто secondary ip на интерфейсе, поэтому он и пишет, что у br0 10.10.1.1, точно также можно писать, что у br0 10.10.2.1.

Edited by s.lobanov

Share this post


Link to post
Share on other sites
Если не секрет, то какой смысл менять это поле? Ну отдаёт он первый адрес интерфейса (в данном случае им оказался ip альяса br0:0) и пусть отдаёт.

Нада...

 

Но всё же если очень хочется, то выставляйте это поле вручную: добавьте строку option dhcp-server-identifier 10.10.1.1 в subnet 10.10.1.0 ; option dhcp-server-identifier 10.10.2.1 в subnet 10.10.2.0 и т.д. во все subnet'ы

Спасибо, s.lobanov! Это то, что нужно. Про аналог dhcp-server-identifier - параметр server-identifier говориться:

 

The usual case where the server-identifier statement needs to be sent

is when a physical interface has more than one IP address, and the

one being sent by default isn't appropriate for some or all clients

served by that interface. Another common case is when an alias is

defined for the purpose of having a consistent IP address for the

DHCP server, and it is desired that the clients use this IP address

when contacting the server.

 

Сегодня вечером протестирую dhcp-server-identifier (или эквивалент server-identifier) - думаю проблем не будет. Вопрос закрыт.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this