Jump to content

Recommended Posts

Posted

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

На этом роутере поднят 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.

Posted

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

Posted (edited)
Ну так роутеры 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
Posted (edited)

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

 

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

 

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

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

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

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

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

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.