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

IP от dhcp в зависимости от сегмента подключения.

Есть сеть, поделенная на два сегмента двумя роутерами которые в свою очередь "смотрят" в третий роутер (в "главный", так сказать).

На этом роутере поднят dhcp, который раздает IP юзерам (статика, привязанная к МАС-у).

Приблизительно такая схема:

(юзеры сегм. 1) 10.0.0.0/21------роутер №1------10.1.0.1/24------
                                                                 |-------10.1.0.254/24-----роутер №3 + dhcp
(юзеры сегм. 2) 10.0.8.0/21------роутер №2------10.1.0.2/24------

 

Есть "служебный ноут", предназначенный для "прописывания" новых МАС-ов (читай - юзеров), которому от dhcp выдаётся стат. "служебный IP". На роутерах №1 и №2 для этой цели подняты сабинтерфейсы со стороны юзеров с IP тех самых "служебных" подсетей, ну например, 172.16.0.0/28 и 172.16.0.16/28 соответственно.

Задача - как выдать "правильный" IP от dhcp служебному ноуту, в зависимости от того, за каким роутером (№1, или №2) он находится??

 

P.S. Роутеры №1 и №2 - DOCSIS CMTS, роутер №3 - PC с Linux Fedora 6 на борту, ISC dhcp v3.1.0.

Share this post


Link to post
Share on other sites

Ну так роутеры 1 и 2 по любому работают как dhcp релей, следовательно, как минимум свой ip в пакет вставляют. Так что остается только нужный класс в конфиге дхцп прописать...

Share this post


Link to post
Share on other sites
Ну так роутеры 1 и 2 по любому работают как dhcp релей, следовательно, как минимум свой ip в пакет вставляют. Так что остается только нужный класс в конфиге дхцп прописать...
Эмм.. А примерчиком не поделитесь, или ссылкой на описание подобного решения? Не приходилось еще с классами работать..

Как бы вроде оно самое, но.. Не могу никак сообразить, как "прикрутить" выдраные данные (то, что требуется есть - IP роутера и МАС клиента) к секции host?

Хотелось бы выдавать один конкретный статический IP для конкретного МАС-а, а в примерах с классами везде pool.. Или dhcp сам разберется, из какой секции host вытягивать IP?

Вот вроде все есть..

Lease for 10.0.128.24 Router IP: 10.0.128.1 MAC of subscriber: 0:1e:8c:13:17:91
Lease for 10.0.152.24 Router IP: 10.0.152.1 MAC of subscriber: 0:1e:8c:13:17:91

Как бы сиё теперь оформить в dhcpd.conf, чтобы в зависимости от Router IP "срабатывал" конкретный host

host user001e8c131791_a {
hardware ethernet 00:1E:8C:13:17:91;
next-server XX.XX.XX.XX;
fixed-address 10.0.128.24;
option subnet-mask 255.255.252.0;
  }
host user001e8c131791_b {
hardware ethernet 00:1E:8C:13:17:91;
next-server XX.XX.XX.XX;
fixed-address 10.0.152.24;
option subnet-mask 255.255.252.0;
  }

Edited by AlKov

Share this post


Link to post
Share on other sites

Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип.

Т.е. так:

host user001e8c131791_b {
hardware ethernet 00:1E:8C:13:17:91;
next-server XX.XX.XX.XX;
fixed-address 10.0.152.24;
fixed-address 10.0.128.24;
option subnet-mask 255.255.252.0;
  }

Ежели не прокатит, тогда

class userXXX_1 {
    match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута
        binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.113.1"); #ip релея. такую конструкцию не проверял, но должно прокатить.
}
class userXXX_2 {
    match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута
        binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.114.1"); #ip релея. такую конструкцию не проверял, но должно прокатить.
}

#остальной конфиг
shared-network super-mega-ip-net{
    subnet 111.112.113.1 netmask 255.255.255.0{
        pool {
            range 111.112.113.10;
            allow members of userXXX_1;
        }
        pool {
            #остальные хомячки;
        }
    }
    subnet 111.112.114.1 netmask 255.255.255.0{
        pool {
            range 111.112.114.10;
            allow members of userXXX_1;
        }
        pool {
            #остальные хомячки;
        }
    }
}

Edited by Nic

Share this post


Link to post
Share on other sites
Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип.

Т.е. так:

host user001e8c131791_b {
hardware ethernet 00:1E:8C:13:17:91;
next-server XX.XX.XX.XX;
fixed-address 10.0.152.24;
fixed-address 10.0.128.24;
option subnet-mask 255.255.252.0;
  }

Т.е. Вы хотите сказать, что можно не заморачиваться с классами, а просто сделать два объявления соотв. сабнетов, а dhcp уже сам разберется по ответу от релея?
Ежели не прокатит, тогда

class userXXX_1 {
    match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута
        binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.113.1"); #ip релея. такую конструкцию не проверял, но должно прокатить.
}
class userXXX_2 {
    match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута
        binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.114.1"); #ip релея. такую конструкцию не проверял, но должно прокатить.
}

#остальной конфиг
shared-network super-mega-ip-net{
    subnet 111.112.113.1 netmask 255.255.255.0{
        pool {
            range 111.112.113.10;
            allow members of userXXX_1;
        }
        pool {
            #остальные хомячки;
        }
    }
    subnet 111.112.114.1 netmask 255.255.255.0{
        pool {
            range 111.112.114.10;
            allow members of userXXX_1;
        }
        pool {
            #остальные хомячки;
        }
    }
}

А здесь объявление пула обязательно? Ведь по большому счету это будет один IP.

 

Share this post


Link to post
Share on other sites
Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип.

Т.е. так:

host user001e8c131791_b {
hardware ethernet 00:1E:8C:13:17:91;
next-server XX.XX.XX.XX;
fixed-address 10.0.152.24;
fixed-address 10.0.128.24;
option subnet-mask 255.255.252.0;
  }

Не катит.. :( В лог матюгает вот так

Feb  2 15:32:44 router dhcpd: /etc/dhcpd/other.conf line 29: Only one fixed address declaration per host.
Feb  2 15:32:44 router dhcpd: fixed-address 10.0.128.24;
Feb  2 15:32:44 router dhcpd:                           ^
Feb  2 15:32:44 router dhcpd: /etc/dhcpd.conf line 805: /etc/dhcpd/other.conf: bad parse.
Feb  2 15:32:44 router dhcpd: include "/etc/dhcpd/other.conf"
Feb  2 15:32:44 router dhcpd:         ^
Feb  2 15:32:44 router dhcpd: Configuration file errors encountered -- exiting

Это если два IP прописаны. По одному все в норме.

Может это как-то по-другому объявляется, типа два объявления host??

 

Share this post


Link to post
Share on other sites
Может это как-то по-другому объявляется, типа два объявления host??

Именно!

 

host aaa {
hardware ethernet 00:1d:60:95:e6:55;
fixed-address 10.110.45.102;
}

host bbb { 
hardware ethernet 00:1d:60:95:e6:55;
fixed-address 10.110.40.30;
}

 

IP из сетей на разных интерфейсах.

Share this post


Link to post
Share on other sites
Может это как-то по-другому объявляется, типа два объявления host??

Именно!

 

host aaa {
hardware ethernet 00:1d:60:95:e6:55;
fixed-address 10.110.45.102;
}

host bbb { 
hardware ethernet 00:1d:60:95:e6:55;
fixed-address 10.110.40.30;
}

 

IP из сетей на разных интерфейсах.

Подтверждаю, давно такое есть - работает.

Share this post


Link to post
Share on other sites
Подтверждаю, давно такое есть - работает.

А вот такое не пробовали?

host user001 {
hardware ethernet 00:11:7F:02:1B:66;
next-server XX.XX.XX.XX;
fixed-address 10.0.128.24,10.0.152.24;
  }

Однако тоже работает! :) Вычитал на opennet (man dhcpd).

Параметр fixed-address

 

 

fixed-address адрес [, адрес ... ];

 

Параметр fixed-address используется для назначения одного или нескольких постоянных адресов клиенту. Параметр может присутствовать только в секции host. Если указано более одного адреса, то клиенту будет присвоен адрес соответствующий подсети к которой подключен клиент в данный момент. Если нет адресов соответствующих подсети в которую включен клиент, то считается что этот клиент не соответствует объявлению host и эти адреса ему не присваиваются. Каждый адрес может быть IP адресом или доменным именем, которое резолвится в один или несколько IP адресов.

Вот только немного смущает момент с масками.. У меня в одной подсети маска /21, а в другой /29 и для "обычного" юзера в каждой секции host я добавляю option subnet-mask XXX.XXX.XXX.XXX; Там у всех маска одинакова. А здесь как быть? Либо все же логичнее сделать два объявления host, или (судя по ману), dhcpd сам разберется с масками и "отдаст" клиенту нужную?
Edited by AlKov

Share this post


Link to post
Share on other sites

Предлагаю попробовать оба варианта и рассказать, что получилось.

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