Многие на этом форуме жаловались по поводу появления лишних dhcp-запросов на DES-3028, когда на нем включен dhcp_relay. Я постарался изучить это на стенде. HW 1A1G, прошивка 2.00-B14.
Приводим свич в исходное состояние:
Код:
DES-3028:4#reset config
Втыкаем в 1-й порт dhcp-клиента, во 2-й dhcp-сервер, проверяем, что все работает (по логам сервера):
Код:
root@server:/var/log# tail dhcpd.log
Nov 29 19:09:43 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0
Nov 29 19:09:43 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Nov 29 19:09:43 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0
Nov 29 19:09:43 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Включаем option 82 insertion:
Код:
DES-3028:4#config dhcp_local_relay vlan default state enable
DES-3028:4#enable dhcp_local_relay
Проверяем, что все работает нормально и свич добавляет option 82:
Код:
Nov 29 19:15:32 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 19:15:32 localhost dhcpd: circuit-id: 1
Nov 29 19:15:32 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0
Nov 29 19:15:32 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Nov 29 19:15:32 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 19:15:32 localhost dhcpd: circuit-id: 1
Nov 29 19:15:32 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0
Nov 29 19:15:32 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Создаем разрешающее правило (годится любое, под которое подпадают dhcp-запросы, которые в данном случае и так разрешены):
Код:
DES-3028:4#create access_profile ip udp dst_port_mask 0xFFFF profile_id 10
DES-3028:4#config access_profile profile_id 10 add access_id 1 ip udp dst_port 67 port 1 permit
Смотрим логи и видим чудеса: запросов к dhcp-серверу стало вдвое больше, половина из них с option 82, половина без:
Код:
Nov 29 19:30:29 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 19:30:29 localhost dhcpd: circuit-id: 1
Nov 29 19:30:29 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 19:30:29 localhost dhcpd: circuit-id: 1
Nov 29 19:30:29 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0
Nov 29 19:30:29 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0
Снова приводим свич в исходное состояние и создаем управляющий и пользовательский вланы, dhcp-клиент по-прежнему на 1-м порту, dhcp-сервер на 2-м:
Код:
DES-3028:4#reset config
DES-3028:4#create vlan management tag 501
DES-3028:4#create vlan users tag 502
DES-3028:4#config vlan management add tagged 2
DES-3028:4#config vlan users add tagged 2
DES-3028:4#config vlan default delete 1
DES-3028:4#config vlan users add untagged 1
DES-3028:4#config ipif System ipaddress 10.90.90.90/24 vlan management
Проверяем, что dhcp-запросы проходят:
Код:
Nov 29 19:56:11 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0.502
Nov 29 19:56:11 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0.502
Nov 29 19:56:11 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0.502
Nov 29 19:56:11 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0.502
Включаем dhcp_relay с опцией 82:
Код:
DES-3028:4#enable dhcp_relay
DES-3028:4#config dhcp_relay add ipif System 10.90.90.1
DES-3028:4#config dhcp_relay option_82 check enable
DES-3028:4#config dhcp_relay option_82 state enable
Все работает корректно, dhcp-сервер получает уникастные запросы с опцией 82 по управляющему влану:
Код:
Nov 29 20:01:38 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 20:01:38 localhost dhcpd: circuit-id: 1
Nov 29 20:01:38 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:01:38 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:01:38 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 20:01:38 localhost dhcpd: circuit-id: 1
Nov 29 20:01:38 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:01:38 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via 10.90.90.90
Добавляем разрешающее правило на клиентском порту, под которое подпадают dhcp-запросы, на этот раз другое:
Код:
DES-3028:4#create access_profile ethernet ethernet_type profile_id 10
DES-3028:4#config access_profile profile_id 10 add access_id 1 ethernet ethernet_type 0x0800 port 1 permit
И снова видим чудеса: запросов стало вдвое больше, половина идет с опцией 82 уникастом по управляющему влану, половина идет броадкастом без опции 82 по пользовательскому влану:
Код:
Nov 29 20:07:24 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via eth0.502
Nov 29 20:07:24 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via eth0.502
Nov 29 20:07:24 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 20:07:24 localhost dhcpd: circuit-id: 1
Nov 29 20:07:24 localhost dhcpd: DHCPDISCOVER from 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:07:24 localhost dhcpd: DHCPOFFER on 192.168.50.2 to 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:07:24 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via eth0.502
Nov 29 20:07:24 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via eth0.502
Nov 29 20:07:24 localhost dhcpd: remote-id: 0:1e:58:af:92:21
Nov 29 20:07:24 localhost dhcpd: circuit-id: 1
Nov 29 20:07:24 localhost dhcpd: DHCPREQUEST for 192.168.50.2 (192.168.50.1) from 00:22:15:19:e4:91 via 10.90.90.90
Nov 29 20:07:24 localhost dhcpd: DHCPACK on 192.168.50.2 to 00:22:15:19:e4:91 via 10.90.90.90
Таким образом, dhcp_relay и dhcp_local_relay ведут себя одинаково. Все работает корректно до тех пор, пока не создано разрешающее правило в ACL, под которое подпадают dhcp-запросы. Если такое правило есть, то dhcp-запросы размножаются (видимо, один запрос идет тогда через ASIC, а второй генерируется центральным процессором). Это явный баг, а для dhcp-relay нарушение RFC-1542, раздела 4.
Жить с этим можно, хотя и не очень удобно. Нужно просто следить, чтобы в ACL не было ни разрешающих, ни запрещающих правил для dhcp-запросов. Лучше бы, конечно, поправить. Может быть в более новых прошивках это уже сделали?
Тогда пришлите, пожалуйста, прошивочку на berk at imt dot ru.