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

DHCP optino82 на catalyst

Всем привет.

Неделю мучаюсь с настройкой WS-C3550-24-FX-SMI и WS-C2950G-48-EI + Ubuntu (isc-dhcp-server). Ранее получилось настроить, сейчас вообще ни в какую.

Схема:

[клиент]<--access_vlan770-->[cisco2950]<--trunk_1,770-->[cisco3550]<--access_vlan1-->[sERVER_DHCP]

Конфиг 2950:

...
ip dhcp snooping vlan 770
ip dhcp snooping
ip dhcp snooping information option
...
vlan 770
!
interface FastEthernet0/1
switchport access vlan 770
ip dhcp snooping limit rate 200
!
...
interface GigabitEthernet0/2
switchport trunk allowed vlan 1,770
switchport mode trunk
ip dhcp snooping trust
!
interface Vlan1
ip address 10.10.13.90 255.255.0.0
no ip route-cache
!
...

 

Конфиг 3550:

...
ip dhcp relay information option
!
...
!
vlan 770
!
...
!
interface Vlan1
ip address 10.10.13.75 255.255.0.0
!
interface Vlan770
ip address 10.140.1.1 255.255.255.0
ip helper-address 10.10.254.127
ip dhcp relay information trusted
!

 

Конфиг dhcp:

default-lease-time 2592000;
max-lease-time 2592001;

ddns-update-style none;
log-facility local7;
option ms-classless-static-routes code 249 = array of unsigned integer 8;

site-option-space "111";
server-identifier hostname;
local-address 10.10.254.127;


shared-network mynetwork{
   authtoritative;

   if exists agent.remote-id {
    log ( info, option agent.remote-id);
   } 
   if exists agent.circuit-id {
    log ( info, option agent.circuit-id);
   }


   subnet 10.10.0.0 netmask 255.255.0.0{
#        host admin_phone{
#	    fixed-address 10.10.14.1;
#    	    hardware ethernet f8:df:a8:8a:c0:83;
#    	    option routers 10.10.10.99;
#    	    option domain-name-servers 8.8.8.8, 62.165.32.250;
#	}


   if exists agent.remote-id {
    log ( info, option agent.remote-id);
   } 
   if exists agent.circuit-id {
    log ( info, option agent.circuit-id);
   }

   }

   subnet 10.140.1.0 netmask 255.255.255.0 {

   if exists agent.remote-id {
    log ( info, option agent.remote-id);
   } 
   if exists agent.circuit-id {
    log ( info, option agent.circuit-id);
   }

   # 00:23:81:1b:eb:bf - client
   # 00:11:93:EF:A4:C0 - 2950 base
   # 00:11:93:EF:A4:C1-F2 - 2950 ports
       class "sw01-p01" {
    match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1" 
	and
    binary-to-ascii(10, 8, ":", suffix(option agent.circuit-id, 1)) = "0001";
}

class "sw01-p02" {
   	    match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"
	and
    binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1";
}


option routers 10.140.1.1;
option subnet-mask 255.255.255.0;
authoritative;

pool {
    range 10.140.1.2;
    allow members of "sw01-p01";
}
pool {
    range 10.140.1.3;
    allow members of "sw01-p02";
}
   }
}

 

В итоге, на отлавливаю пакеты такого вида:

# tcpdump -s0 -vvvni vr0 host 10.10.254.127 and port 67
tcpdump: listening on vr0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:36:03.956400 IP (tos 0x0, ttl 255, id 348, offset 0, flags [none], proto UDP (17), length 347)
   10.140.1.1.67 > 10.10.254.127.67: [udp sum ok] BOOTP/DHCP, Request from 00:23:81:1b:eb:bf, length 319, hops 1, xid 0xc5f545ed, secs 7424, Flags [broadcast] (0x8000)
  Gateway-IP 10.140.1.1
  Client-Ethernet-Address 00:23:81:1b:eb:bf
  Vendor-rfc1048 Extensions
    Magic Cookie 0x63825363
    DHCP-Message Option 53, length 1: Discover
    Client-ID Option 61, length 7: ether 00:23:81:1b:eb:bf
    Hostname Option 12, length 3: "DNS"
    Vendor-Class Option 60, length 8: "MSFT 5.0"
    Parameter-Request Option 55, length 13: 
      Subnet-Mask, Domain-Name, Default-Gateway, Domain-Name-Server
      Netbios-Name-Server, Netbios-Node, Netbios-Scope, Router-Discovery
      Static-Route, Classless-Static-Route, Classless-Static-Route-Microsoft, Option 252
      Vendor-Option
    Agent-Information Option 82, length 18: 
      Circuit-ID SubOption 1, length 6: ^@^D^C^B^@^@
      Remote-ID SubOption 2, length 8: ^@^F^@^QM-^SM-oM-$M-@
    Agent-Information Option 82, length 14: 
      Remote-ID SubOption 2, length 12: ^B^J^@^@^JM-^L^A^A^J^@^@^@
    END Option 255, length 0

 

А в логах пусто - только мак ноута.

Где я накосячил?

Спасибо.

Share this post


Link to post
Share on other sites

ip helper-address 10.10.254.127 пингуется с каталиста? Вообще, уберите снупинг и всякие трасты на время отладки, а на dhcp-сервере tcpdump`ом посмотрите, что летит. Может банально не маршрута с самого каталиста до сервера. И сервер у Вас сам слушает запросы на 10.10.254.127:67?

Share this post


Link to post
Share on other sites

Благодарю за ответ. Что летит - самый последний из дампов. Да, все пингуется, маршрут до 10.140.1.1 тоже включен

Share this post


Link to post
Share on other sites

Вообще, уберите снупинг и всякие трасты на время отладки

Убрал .

Теперь приходит

09:50:38.920864 IP (tos 0x0, ttl 255, id 4, offset 0, flags [none], proto UDP (17), length 326)
   10.140.1.1.67 > 10.10.254.127.67: [udp sum ok] BOOTP/DHCP, Request from 00:23:81:1b:eb:bf, length 298, hops 1, xid 0x63e6f4f5, secs 7168, Flags [none] (0x0000)
  Gateway-IP 10.140.1.1
  Client-Ethernet-Address 00:23:81:1b:eb:bf
  Vendor-rfc1048 Extensions
    Magic Cookie 0x63825363
    DHCP-Message Option 53, length 1: Discover
    Client-ID Option 61, length 7: ether 00:23:81:1b:eb:bf
    Hostname Option 12, length 3: "DNS"
    Vendor-Class Option 60, length 8: "MSFT 5.0"
    Parameter-Request Option 55, length 13: 
      Subnet-Mask, Domain-Name, Default-Gateway, Domain-Name-Server
      Netbios-Name-Server, Netbios-Node, Netbios-Scope, Router-Discovery
      Static-Route, Classless-Static-Route, Classless-Static-Route-Microsoft, Option 252
      Vendor-Option
    Agent-Information Option 82, length 14: 
      Remote-ID SubOption 2, length 12: ^B^J^@^@^JM-^L^A^A^J^@^@^@

выше такой же дамп, судя по Remote-ID в первом и во втором случаях, в данном случае это mac-адрес 3550 без порта. Если на 2950 вернуть снуппинг и указать снуппинг для вилана, то я получу Mac 2950 и порт, но останется одна проблема - в dhcp в логи, падает только

Aug 18 09:53:26 www dhcpd: DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases

хотя в конфиге есть запись следующего вида

subnet 10.140.1.0 netmask 255.255.255.0 {

if exists agent.remote-id {
       log ( info, concat(
        "Switch MAC:", binary-to-ascii(16, 8, ":", option agent.remote-id),
    "Switch port:", binary-to-ascii(10, 8, ":", option agent.circuit-id) ));    }

или как в первом посте - просто белиберду в лог писать, если remote-id существует.

Из пакета видно, что он существует, но в лог ничего не падает. Получается, что не существует? Но ведь тогда circuit-id также изменяется, почему в этом случае ничего не падает в лог?

Edited by default_vlan

Share this post


Link to post
Share on other sites

уберите

if exists agent.remote-id 

 

Как вариант оставив:

log (info, "--------------------------------------------------------------------");
   log ( info, concat(
                      "Switch MAC:", binary-to-ascii(16, 8, ":", option agent.remote-id),
                      "Switch port:", binary-to-ascii(10, 8, ":", option agent.circuit-id) 
                     )
       );    
log (info, "--------------------------------------------------------------------");

 

посмотрите что будет в логах.

Edited by bomberman

Share this post


Link to post
Share on other sites

посмотрите что будет в логах.

Добавил. В логах только это.

Aug 18 10:46:12 www dhcpd: Copyright 2004-2016 Internet Systems Consortium.
Aug 18 10:46:12 www dhcpd: All rights reserved.
Aug 18 10:46:12 www dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Aug 18 10:46:13 www dhcpd: Internet Systems Consortium DHCP Server 4.3.4
Aug 18 10:46:13 www dhcpd: Copyright 2004-2016 Internet Systems Consortium.
Aug 18 10:46:13 www dhcpd: All rights reserved.
Aug 18 10:46:13 www dhcpd: For info, please visit https://www.isc.org/software/dhcp/
Aug 18 10:46:13 www dhcpd: Wrote 0 class decls to leases file.
Aug 18 10:46:13 www dhcpd: Wrote 0 leases to leases file.
Aug 18 10:46:13 www dhcpd: 
Aug 18 10:46:13 www dhcpd: No subnet declaration for vr1 (8*.***.***.***).
Aug 18 10:46:13 www dhcpd: ** Ignoring requests on vr1.  If this is not what
Aug 18 10:46:13 www dhcpd:    you want, please write a subnet declaration
Aug 18 10:46:13 www dhcpd:    in your dhcpd.conf file for the network segment
Aug 18 10:46:13 www dhcpd:    to which interface vr1 is attached. **
Aug 18 10:46:13 www dhcpd: 
Aug 18 10:46:13 www dhcpd: Listening on BPF/vr0/00:1c:f0:98:47:ff/mynetwork
Aug 18 10:46:13 www dhcpd: Sending on   BPF/vr0/00:1c:f0:98:47:ff/mynetwork
Aug 18 10:46:13 www dhcpd: Sending on   Socket/fallback/fallback-net
Aug 18 10:46:13 www dhcpd: Server starting service.
Aug 18 10:47:26 www dhcpd: DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
Aug 18 10:47:30 www dhcpd: DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
Aug 18 10:47:39 www dhcpd: DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
Aug 18 10:47:56 www dhcpd: DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases

Edited by default_vlan

Share this post


Link to post
Share on other sites

1. Не отрабатывает условие

match if

поэтому

DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases

2. Какого беса не видно log-а......

Попробуйте запустить dhcp в терминале так, убив существующий.:

dhcpd -4 -d -cf [путь к конфигу] [интерфейс] 

Будет ли log в терминале?

Share this post


Link to post
Share on other sites

этот лог не сработает. чтобы залогировать приходящую опцию был отдельный патч.

 

Оставьте эту секцию с логом, но выдайте адрес по маку. насколько я помню в опции 82 у цисок счет портов начинается с 0.

 

на 2950 добавьте еще no ip dhcp snooping verify mac-address

Share this post


Link to post
Share on other sites

этот лог не сработает. чтобы залогировать приходящую опцию был отдельный патч

Любопытно. На тестовом стенде:

Internet Systems Consortium DHCP Server 4.3.1 Gentoo-r2

log работает. И опцию в нём видно.

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

Edited by bomberman

Share this post


Link to post
Share on other sites

патч помогает, когда ноу фри лизес )

 

This patch makes the server log the agent options when it receives a DHCP DISCOVER packet. You need this patch if you want to know the agent options of a received DISCOVER packet that doesn't match anything in the config file and gets rejected.

02-log-agent-options patch

 

http://www.miquels.cistron.nl/isc-dhcpd/

при успехе никто не спорит, что будет лог :)

 

 

 

Еще на прошлой работе использовали патч на субклассы с этой же ссылки, конфиг получался сильно меньше.

Share this post


Link to post
Share on other sites

Попробуйте запустить dhcp в терминале так, убив существующий.:

Server starting service.
DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases
DHCPDISCOVER from 00:23:81:1b:eb:bf via 10.140.1.1: network mynetwork: no free leases

Не сработало.

 

Оставьте эту секцию с логом, но выдайте адрес по маку. насколько я помню в опции 82 у цисок счет портов начинается с 0.

Да, с 0 или ^@ в tcpdump'е.

 

на 2950 добавьте еще no ip dhcp snooping verify mac-address

Эммм...

TEST_2950-48(config)#ip dhcp snooping ?
 information  DHCP Snooping information
 vlan         DHCP Snooping vlan
 <cr>

 

Логически, чтобы подправить конфиг, надо понимать что приходит.

 Agent-Information Option 82, length 18: 
             Circuit-ID SubOption 1, length 6: ^@^D^C^B^@^@
             Remote-ID SubOption 2, length 8: ^@^F^@^QM-^SM-oM-$M-@

 

Circuit-ID SubOption 1, length 6: ^@^D^C^B^@^@ 000504030000 - клиет был в 1 порту. Последняя ^@ меняется в соответствии с ASCII кодом, оно и логично.

^@^F^@^QM-^SM-oM-$M-@ - даже близко на mac-адрес не похоже.

IP по маку клиента получил.

Share this post


Link to post
Share on other sites

на коммутаторе оставьте вставку опции 82 и тогда при выдаче успешной по маку у вас в логе вылезет реальное содержимое опций :)

Share this post


Link to post
Share on other sites

на коммутаторе оставьте вставку опции 82 и тогда при выдаче успешной по маку у вас в логе вылезет реальное содержимое опций :)

ГИГАМЕГАМЕЖГАЛАКТИЧЕСКИЙПАЛЕЦВВЕРХ )) завелось. Спасибо огромное

Share this post


Link to post
Share on other sites

Вот еще вопрос, чисто теоретически, как-то можно проверять мак свитча + мак порта + мак клиента?

Share this post


Link to post
Share on other sites

Хм. Не заметил у себя. При Discover тоже есть опция, но вот не в случае "no free leases". В моём случае: "unknown client" в соседней сети стоит deny unknown-clients;

 

патч помогает, когда ноу фри лизес )

Т.е. лог не срабатвает при DISCOVER и "no free leases"?

 

Быть может в моём установленном пакете патч присутствует. Не смотрел.

В любом случае спасибо за информацию и патч. Записал в блокнотик :)

Share this post


Link to post
Share on other sites

вряд ли этот патч ушел в дистрибы.

Ты вон сам написал, что если ноу фри лизес у тебя лога нет содержимого опций (т.е. log правило из subnet не срабатывает). Патч это правит. Очень удобно, если надо понять че за клиент.

 

поди можно. если дописать еще один and и условие в

match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"

and

binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1";

Share this post


Link to post
Share on other sites

поди можно. если дописать еще один and и условие в

match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"

and

binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1";

Это хотя бы отлавливается. Вопрос в том, как это сравнить. Может быть есть возможность вывести все эти переменные? я же не могу сделать:

match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"
and
binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1"
and
Client-Ethernet-Address = "00:23:81:1b:eb:bf";

 

или Client-Ethernet-Address надо заменить на "hardware ethernet"?

Share this post


Link to post
Share on other sites

Ты вон сам написал, что если ноу фри лизес у тебя лога нет содержимого опций (т.е. log правило из subnet не срабатывает).

Нет. Есть всегда. Я наверное не правильно выразился. У меня всегда есть log, даже при Discover. Но состояния "no free leases" у меня небыло. Было только "unknown client".

Да, к тому же я log пишу не в пределах subnet, а глобально. Быть может поэтому он и есть всегда.

Edited by bomberman

Share this post


Link to post
Share on other sites

Вот еще вопрос, чисто теоретически, как-то можно проверять мак свитча + мак порта + мак клиента?

 

Мак свитча - можно всунуть в идентификатор. Только не помню, какие модели цисок позволяют/не позволяют задать произвольный идентификатор для релея. Мак порта - нальзя. Мак клиента - можно без проблем. Но Ваш вариант заведомо мертвый. Чтобы исключить проблему с невозможностью использования мака порта, используйте опцию 82, и будет Вам счастье.

 

Чуть не забыл - опция 82 номер порта сообщает при запросе. Вот только у цисок 2940 и 2960, если память мне не изменяет, не передается VLANID в запросе серверу.

Share this post


Link to post
Share on other sites

мак свитча там и так есть в remote-id. он хочет мак клиента проверять. видимо защита от перетыкальщиков..

mac клиента лежит в hardware, только обязательно поиграть с lead zeroes в маке.

 

http://www.exonotes.com/node/55

 

 

Скорее всего будет что-то типа

class "sw01-p02" {

match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"

and

binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1"

and

binary-to-ascii(16, 8, ":", hardware) = "00:22:33:44:55:66";

}

Share this post


Link to post
Share on other sites

Скорее всего будет что-то типа

class "sw01-p02" {

match if binary-to-ascii( 16, 8, ":", suffix(option agent.remote-id ,6) )="00:11:93:ef:a4:c1"

and

binary-to-ascii( 10, 8, ":", suffix(option agent.circuit-id, 1) ) = "1"

and

binary-to-ascii(16, 8, ":", hardware) = "00:22:33:44:55:66";

}

 

Почти. binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); - так полностью определяет. Пока на одном ноуте пробовал, но, думаю, что и на всех сработает.

 

Вот теперь другой вопрос. Как-то можно запретить изменение ip для клиента? Ну, чтобы если у клиента должен быть Ip-адрес 10.144.1.2, то забивая 10.144.1.3 и другие у него не было доступа к Интернет. Писать соответствие mac-порта к ip на сервере доступа - насколько я понимаю - не вариант, т.к. в arp-таблицу мак порта не попадает. Отслеживать по лизингу ip-адресов тоже не вариант.

Может есть решение?

 

Еще раз спасибо.

Share this post


Link to post
Share on other sites

Вот теперь другой вопрос. Как-то можно запретить изменение ip для клиента? Ну, чтобы если у клиента должен быть Ip-адрес 10.144.1.2, то забивая 10.144.1.3 и другие у него не было доступа к Интернет. Писать соответствие mac-порта к ip на сервере доступа - насколько я понимаю - не вариант, т.к. в arp-таблицу мак порта не попадает. Отслеживать по лизингу ip-адресов тоже не вариант.

Может есть решение?

ip source guard + dhcp snooping

Share this post


Link to post
Share on other sites

ip source guard + dhcp snooping

 

А без ip source guard реально? У меня ни 2950, не 3550 не поддерживают это.

Вроде бы на 3550 есть вариант использовать "ip source binding". Вопрос, как это все синхронизировать?

Edited by default_vlan

Share this post


Link to post
Share on other sites

без ip source guard + dhcp snooping только влан на клиента

Share this post


Link to post
Share on other sites

без ip source guard + dhcp snooping только влан на клиента

TEST_3550-24(config)#ip ver
TEST_3550-24(config)#ip verify ?
 drop-rate  drop-rate snmp trap config commands

TEST_3550-24(config)#ip verify d
TEST_3550-24(config)#ip verify drop-rate ?
 compute  drop-rate computation config commands
 notify   drop-rate snmp trap config

TEST_3550-24(config)#ip so               
TEST_3550-24(config)#ip source ?
 binding  static IP binding

TEST_3550-24(config)#ip source bin
TEST_3550-24(config)#ip source binding ?
 H.H.H  binding MAC address

 

Суть в том, что snooping на 2950 (L2), на 3550 (L3) - relay. Как таблицу снупинга с 2950 перенести на 3550?)

vlan на клиента у меня не сработает - слишком много vlan получается

Edited by default_vlan

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