Перейти к содержимому
Калькуляторы

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так роутеры 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;
  }

Изменено пользователем AlKov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кста, если верить доке, то все тривиально - делаете 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 {
            #остальные хомячки;
        }
    }
}

Изменено пользователем Nic

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кста, если верить доке, то все тривиально - делаете 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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кста, если верить доке, то все тривиально - делаете 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??

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может это как-то по-другому объявляется, типа два объявления 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 из сетей на разных интерфейсах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может это как-то по-другому объявляется, типа два объявления 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 из сетей на разных интерфейсах.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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 сам разберется с масками и "отдаст" клиенту нужную?
Изменено пользователем AlKov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.