Page MenuHomePhabricator

Upgrade from ISC-DHCP Server to KEA-DHCP Server
Open, LowPublic

Description

ISC DHCP is now EOL.

Its replacement, in addition to being supported, has lots of features that we could benefit from (monitoring, hooks, etc).

Full doc on:
https://www.isc.org/dhcp_migration/

On the other hand, we have such a low key usage of DHCP that we could stay on the old ISC-DHCP for longer, or even stop relying on DHCP, but that would be a much larger project (iPXE, IPv6, etc).

I used their"keama" tool to convert the old to new (json based) syntax in ulsfo and most of it got converted (following the includes).

I had to comment out vendor-option-space pxelinux; otherwise keama was failing with:

line 682: unexpected parameter option-def in group at 1
}
^

1{
2 #####################################################################
3 #### THIS FILE IS MANAGED BY PUPPET
4 #### template('install_server/dhcp/dhcpd.conf.erb')
5 ######################################################################
6 # DHCPd configuration file for Wikimedia server installations
7 # Define custom options
8 # Unless dhcpd needs to be aware of other networks for which is not authoritative
9 # it should work just having it here at the top of the file.
10 /// This configuration declares some subnets but has no interfaces-config
11 /// Reference Kea #245
12 "Dhcp4": {
13 "authoritative": true,
14 "option-def": [
15// # RFC 4578, used mainly to detect UEFI vs. BIOS
16// /// Kea does not allow redefinition of options
17// {
18// "space": "dhcp4",
19// "name": "architecture-type",
20// "code": 93,
21// "type": "uint16"
22// },
23 # syslinux/pxelinux
24 {
25 "space": "pxelinux",
26 "name": "magic",
27 "code": 208,
28 "type": "string"
29 },
30 {
31 "space": "pxelinux",
32 "name": "configfile",
33 "code": 209,
34 "type": "string"
35 },
36 {
37 "space": "pxelinux",
38 "name": "pathprefix",
39 "code": 210,
40 "type": "string"
41 },
42 {
43 "space": "pxelinux",
44 "name": "reboottime",
45 "code": 211,
46 "type": "uint32"
47 },
48 # Network Zero-Touch Provisioning (ZTP) for Juniper
49 {
50 "space": "juniper",
51 "name": "image-file-name",
52 "code": 0,
53 "type": "string"
54 },
55 {
56 "space": "juniper",
57 "name": "config-file-name",
58 "code": 1,
59 "type": "string"
60 },
61 {
62 "space": "juniper",
63 "name": "image-file-type",
64 "code": 2,
65 "type": "string"
66 },
67 {
68 "space": "juniper",
69 "name": "transfer-mode",
70 "code": 3,
71 "type": "string"
72 },
73 {
74 "space": "juniper",
75 "name": "alt-imagefile-name",
76 "code": 4,
77 "type": "string"
78 },
79 {
80 "space": "juniper",
81 "name": "http-port",
82 "code": 5,
83 "type": "string"
84 }
85 ],
86 "dhcp-ddns": {
87 "enable-updates": false
88 },
89// "config": [
90// /// log-facility is not supported
91// /// Please use the KEA_LOGGER_DESTINATION environment variable instead
92// {
93// "name": "log-facility",
94// "code": 44,
95// "value": "local0"
96// }
97// ],
98 "option-data": [
99 {
100 "space": "dhcp4",
101 "name": "domain-name-servers",
102 "code": 6,
103 "data": "10.3.0.1"
104 }
105 ],
106// /// boot-file-name was defined in an unsupported scope
107// "boot-file-name": "nonexistent-file",
108 "subnet4": [
109 # public1-a-codfw
110 {
111 "id": 1,
112 "subnet": "208.80.153.0/27",
113 "option-data": [
114 {
115 "space": "dhcp4",
116 "name": "broadcast-address",
117 "code": 28,
118 "data": "208.80.153.31"
119 },
120 {
121 "space": "dhcp4",
122 "name": "routers",
123 "code": 3,
124 "data": "208.80.153.1"
125 },
126 {
127 "space": "dhcp4",
128 "name": "domain-name",
129 "code": 15,
130 "data": "wikimedia.org"
131 },
132 {
133 "space": "dhcp4",
134 "name": "subnet-mask",
135 "code": 1,
136 "data": "255.255.255.224"
137 }
138 ],
139 "next-server": "208.80.153.105"
140 },
141 # public1-b-codfw
142 {
143 "id": 2,
144 "subnet": "208.80.153.32/27",
145 "option-data": [
146 {
147 "space": "dhcp4",
148 "name": "broadcast-address",
149 "code": 28,
150 "data": "208.80.153.63"
151 },
152 {
153 "space": "dhcp4",
154 "name": "routers",
155 "code": 3,
156 "data": "208.80.153.33"
157 },
158 {
159 "space": "dhcp4",
160 "name": "domain-name",
161 "code": 15,
162 "data": "wikimedia.org"
163 },
164 {
165 "space": "dhcp4",
166 "name": "subnet-mask",
167 "code": 1,
168 "data": "255.255.255.224"
169 }
170 ],
171 "next-server": "208.80.153.105"
172 },
173 # public1-c-codfw
174 {
175 "id": 3,
176 "subnet": "208.80.153.64/27",
177 "option-data": [
178 {
179 "space": "dhcp4",
180 "name": "broadcast-address",
181 "code": 28,
182 "data": "208.80.153.95"
183 },
184 {
185 "space": "dhcp4",
186 "name": "routers",
187 "code": 3,
188 "data": "208.80.153.65"
189 },
190 {
191 "space": "dhcp4",
192 "name": "domain-name",
193 "code": 15,
194 "data": "wikimedia.org"
195 },
196 {
197 "space": "dhcp4",
198 "name": "subnet-mask",
199 "code": 1,
200 "data": "255.255.255.224"
201 }
202 ],
203 "next-server": "208.80.153.105"
204 },
205 # public1-d-codfw
206 {
207 "id": 4,
208 "subnet": "208.80.153.96/27",
209 "option-data": [
210 {
211 "space": "dhcp4",
212 "name": "broadcast-address",
213 "code": 28,
214 "data": "208.80.153.127"
215 },
216 {
217 "space": "dhcp4",
218 "name": "routers",
219 "code": 3,
220 "data": "208.80.153.97"
221 },
222 {
223 "space": "dhcp4",
224 "name": "domain-name",
225 "code": 15,
226 "data": "wikimedia.org"
227 },
228 {
229 "space": "dhcp4",
230 "name": "subnet-mask",
231 "code": 1,
232 "data": "255.255.255.224"
233 }
234 ],
235 "next-server": "208.80.153.105"
236 },
237 # private1-a-codfw
238 {
239 "id": 5,
240 "subnet": "10.192.0.0/22",
241 "option-data": [
242 {
243 "space": "dhcp4",
244 "name": "broadcast-address",
245 "code": 28,
246 "data": "10.192.3.255"
247 },
248 {
249 "space": "dhcp4",
250 "name": "subnet-mask",
251 "code": 1,
252 "data": "255.255.252.0"
253 },
254 {
255 "space": "dhcp4",
256 "name": "routers",
257 "code": 3,
258 "data": "10.192.0.1"
259 },
260 {
261 "space": "dhcp4",
262 "name": "domain-name",
263 "code": 15,
264 "data": "codfw.wmnet"
265 }
266 ],
267 "next-server": "208.80.153.105"
268 },
269 # private1-b-codfw
270 {
271 "id": 6,
272 "subnet": "10.192.16.0/22",
273 "option-data": [
274 {
275 "space": "dhcp4",
276 "name": "broadcast-address",
277 "code": 28,
278 "data": "10.192.19.255"
279 },
280 {
281 "space": "dhcp4",
282 "name": "subnet-mask",
283 "code": 1,
284 "data": "255.255.252.0"
285 },
286 {
287 "space": "dhcp4",
288 "name": "routers",
289 "code": 3,
290 "data": "10.192.16.1"
291 },
292 {
293 "space": "dhcp4",
294 "name": "domain-name",
295 "code": 15,
296 "data": "codfw.wmnet"
297 }
298 ],
299 "next-server": "208.80.153.105"
300 },
301 # cloud-hosts1-codfw
302 {
303 "id": 7,
304 "subnet": "10.192.20.0/24",
305 "option-data": [
306 {
307 "space": "dhcp4",
308 "name": "broadcast-address",
309 "code": 28,
310 "data": "10.192.20.255"
311 },
312 {
313 "space": "dhcp4",
314 "name": "routers",
315 "code": 3,
316 "data": "10.192.20.1"
317 },
318 {
319 "space": "dhcp4",
320 "name": "domain-name",
321 "code": 15,
322 "data": "codfw.wmnet"
323 },
324 {
325 "space": "dhcp4",
326 "name": "subnet-mask",
327 "code": 1,
328 "data": "255.255.255.0"
329 }
330 ],
331 "next-server": "208.80.153.105"
332 },
333 # private1-c-codfw
334 {
335 "id": 8,
336 "subnet": "10.192.32.0/22",
337 "option-data": [
338 {
339 "space": "dhcp4",
340 "name": "broadcast-address",
341 "code": 28,
342 "data": "10.192.35.255"
343 },
344 {
345 "space": "dhcp4",
346 "name": "subnet-mask",
347 "code": 1,
348 "data": "255.255.252.0"
349 },
350 {
351 "space": "dhcp4",
352 "name": "routers",
353 "code": 3,
354 "data": "10.192.32.1"
355 },
356 {
357 "space": "dhcp4",
358 "name": "domain-name",
359 "code": 15,
360 "data": "codfw.wmnet"
361 }
362 ],
363 "next-server": "208.80.153.105"
364 },
365 # private1-d-codfw
366 {
367 "id": 9,
368 "subnet": "10.192.48.0/22",
369 "option-data": [
370 {
371 "space": "dhcp4",
372 "name": "broadcast-address",
373 "code": 28,
374 "data": "10.192.51.255"
375 },
376 {
377 "space": "dhcp4",
378 "name": "subnet-mask",
379 "code": 1,
380 "data": "255.255.252.0"
381 },
382 {
383 "space": "dhcp4",
384 "name": "routers",
385 "code": 3,
386 "data": "10.192.48.1"
387 },
388 {
389 "space": "dhcp4",
390 "name": "domain-name",
391 "code": 15,
392 "data": "codfw.wmnet"
393 }
394 ],
395 "next-server": "208.80.153.105"
396 },
397 # private1-a1-codfw
398 {
399 "id": 10,
400 "subnet": "10.192.4.0/24",
401 "option-data": [
402 {
403 "space": "dhcp4",
404 "name": "broadcast-address",
405 "code": 28,
406 "data": "10.192.4.255"
407 },
408 {
409 "space": "dhcp4",
410 "name": "routers",
411 "code": 3,
412 "data": "10.192.4.1"
413 },
414 {
415 "space": "dhcp4",
416 "name": "domain-name",
417 "code": 15,
418 "data": "codfw.wmnet"
419 },
420 {
421 "space": "dhcp4",
422 "name": "subnet-mask",
423 "code": 1,
424 "data": "255.255.255.0"
425 }
426 ],
427 "next-server": "208.80.153.105"
428 },
429 # private1-a2-codfw
430 {
431 "id": 11,
432 "subnet": "10.192.23.0/24",
433 "option-data": [
434 {
435 "space": "dhcp4",
436 "name": "broadcast-address",
437 "code": 28,
438 "data": "10.192.23.255"
439 },
440 {
441 "space": "dhcp4",
442 "name": "routers",
443 "code": 3,
444 "data": "10.192.23.1"
445 },
446 {
447 "space": "dhcp4",
448 "name": "domain-name",
449 "code": 15,
450 "data": "codfw.wmnet"
451 },
452 {
453 "space": "dhcp4",
454 "name": "subnet-mask",
455 "code": 1,
456 "data": "255.255.255.0"
457 }
458 ],
459 "next-server": "208.80.153.105"
460 },
461 # private1-a3-codfw
462 {
463 "id": 12,
464 "subnet": "10.192.5.0/24",
465 "option-data": [
466 {
467 "space": "dhcp4",
468 "name": "broadcast-address",
469 "code": 28,
470 "data": "10.192.5.255"
471 },
472 {
473 "space": "dhcp4",
474 "name": "routers",
475 "code": 3,
476 "data": "10.192.5.1"
477 },
478 {
479 "space": "dhcp4",
480 "name": "domain-name",
481 "code": 15,
482 "data": "codfw.wmnet"
483 },
484 {
485 "space": "dhcp4",
486 "name": "subnet-mask",
487 "code": 1,
488 "data": "255.255.255.0"
489 }
490 ],
491 "next-server": "208.80.153.105"
492 },
493 # private1-a4-codfw
494 {
495 "id": 13,
496 "subnet": "10.192.6.0/24",
497 "option-data": [
498 {
499 "space": "dhcp4",
500 "name": "broadcast-address",
501 "code": 28,
502 "data": "10.192.6.255"
503 },
504 {
505 "space": "dhcp4",
506 "name": "routers",
507 "code": 3,
508 "data": "10.192.6.1"
509 },
510 {
511 "space": "dhcp4",
512 "name": "domain-name",
513 "code": 15,
514 "data": "codfw.wmnet"
515 },
516 {
517 "space": "dhcp4",
518 "name": "subnet-mask",
519 "code": 1,
520 "data": "255.255.255.0"
521 }
522 ],
523 "next-server": "208.80.153.105"
524 },
525 # private1-a5-codfw
526 {
527 "id": 14,
528 "subnet": "10.192.7.0/24",
529 "option-data": [
530 {
531 "space": "dhcp4",
532 "name": "broadcast-address",
533 "code": 28,
534 "data": "10.192.7.255"
535 },
536 {
537 "space": "dhcp4",
538 "name": "routers",
539 "code": 3,
540 "data": "10.192.7.1"
541 },
542 {
543 "space": "dhcp4",
544 "name": "domain-name",
545 "code": 15,
546 "data": "codfw.wmnet"
547 },
548 {
549 "space": "dhcp4",
550 "name": "subnet-mask",
551 "code": 1,
552 "data": "255.255.255.0"
553 }
554 ],
555 "next-server": "208.80.153.105"
556 },
557 # private1-a6-codfw
558 {
559 "id": 15,
560 "subnet": "10.192.8.0/24",
561 "option-data": [
562 {
563 "space": "dhcp4",
564 "name": "broadcast-address",
565 "code": 28,
566 "data": "10.192.8.255"
567 },
568 {
569 "space": "dhcp4",
570 "name": "routers",
571 "code": 3,
572 "data": "10.192.8.1"
573 },
574 {
575 "space": "dhcp4",
576 "name": "domain-name",
577 "code": 15,
578 "data": "codfw.wmnet"
579 },
580 {
581 "space": "dhcp4",
582 "name": "subnet-mask",
583 "code": 1,
584 "data": "255.255.255.0"
585 }
586 ],
587 "next-server": "208.80.153.105"
588 },
589 # private1-a7-codfw
590 {
591 "id": 16,
592 "subnet": "10.192.9.0/24",
593 "option-data": [
594 {
595 "space": "dhcp4",
596 "name": "broadcast-address",
597 "code": 28,
598 "data": "10.192.9.255"
599 },
600 {
601 "space": "dhcp4",
602 "name": "routers",
603 "code": 3,
604 "data": "10.192.9.1"
605 },
606 {
607 "space": "dhcp4",
608 "name": "domain-name",
609 "code": 15,
610 "data": "codfw.wmnet"
611 },
612 {
613 "space": "dhcp4",
614 "name": "subnet-mask",
615 "code": 1,
616 "data": "255.255.255.0"
617 }
618 ],
619 "next-server": "208.80.153.105"
620 },
621 # private1-a8-codfw
622 {
623 "id": 17,
624 "subnet": "10.192.10.0/24",
625 "option-data": [
626 {
627 "space": "dhcp4",
628 "name": "broadcast-address",
629 "code": 28,
630 "data": "10.192.10.255"
631 },
632 {
633 "space": "dhcp4",
634 "name": "routers",
635 "code": 3,
636 "data": "10.192.10.1"
637 },
638 {
639 "space": "dhcp4",
640 "name": "domain-name",
641 "code": 15,
642 "data": "codfw.wmnet"
643 },
644 {
645 "space": "dhcp4",
646 "name": "subnet-mask",
647 "code": 1,
648 "data": "255.255.255.0"
649 }
650 ],
651 "next-server": "208.80.153.105"
652 },
653 # private1-b2-codfw
654 {
655 "id": 18,
656 "subnet": "10.192.11.0/24",
657 "option-data": [
658 {
659 "space": "dhcp4",
660 "name": "broadcast-address",
661 "code": 28,
662 "data": "10.192.11.255"
663 },
664 {
665 "space": "dhcp4",
666 "name": "routers",
667 "code": 3,
668 "data": "10.192.11.1"
669 },
670 {
671 "space": "dhcp4",
672 "name": "domain-name",
673 "code": 15,
674 "data": "codfw.wmnet"
675 },
676 {
677 "space": "dhcp4",
678 "name": "subnet-mask",
679 "code": 1,
680 "data": "255.255.255.0"
681 }
682 ],
683 "next-server": "208.80.153.105"
684 },
685 # private1-b3-codfw
686 {
687 "id": 19,
688 "subnet": "10.192.12.0/24",
689 "option-data": [
690 {
691 "space": "dhcp4",
692 "name": "broadcast-address",
693 "code": 28,
694 "data": "10.192.12.255"
695 },
696 {
697 "space": "dhcp4",
698 "name": "routers",
699 "code": 3,
700 "data": "10.192.12.1"
701 },
702 {
703 "space": "dhcp4",
704 "name": "domain-name",
705 "code": 15,
706 "data": "codfw.wmnet"
707 },
708 {
709 "space": "dhcp4",
710 "name": "subnet-mask",
711 "code": 1,
712 "data": "255.255.255.0"
713 }
714 ],
715 "next-server": "208.80.153.105"
716 },
717 # private1-b4-codfw
718 {
719 "id": 20,
720 "subnet": "10.192.13.0/24",
721 "option-data": [
722 {
723 "space": "dhcp4",
724 "name": "broadcast-address",
725 "code": 28,
726 "data": "10.192.13.255"
727 },
728 {
729 "space": "dhcp4",
730 "name": "routers",
731 "code": 3,
732 "data": "10.192.13.1"
733 },
734 {
735 "space": "dhcp4",
736 "name": "domain-name",
737 "code": 15,
738 "data": "codfw.wmnet"
739 },
740 {
741 "space": "dhcp4",
742 "name": "subnet-mask",
743 "code": 1,
744 "data": "255.255.255.0"
745 }
746 ],
747 "next-server": "208.80.153.105"
748 },
749 # private1-b5-codfw
750 {
751 "id": 21,
752 "subnet": "10.192.14.0/24",
753 "option-data": [
754 {
755 "space": "dhcp4",
756 "name": "broadcast-address",
757 "code": 28,
758 "data": "10.192.14.255"
759 },
760 {
761 "space": "dhcp4",
762 "name": "routers",
763 "code": 3,
764 "data": "10.192.14.1"
765 },
766 {
767 "space": "dhcp4",
768 "name": "domain-name",
769 "code": 15,
770 "data": "codfw.wmnet"
771 },
772 {
773 "space": "dhcp4",
774 "name": "subnet-mask",
775 "code": 1,
776 "data": "255.255.255.0"
777 }
778 ],
779 "next-server": "208.80.153.105"
780 },
781 # private1-b6-codfw
782 {
783 "id": 22,
784 "subnet": "10.192.15.0/24",
785 "option-data": [
786 {
787 "space": "dhcp4",
788 "name": "broadcast-address",
789 "code": 28,
790 "data": "10.192.15.255"
791 },
792 {
793 "space": "dhcp4",
794 "name": "routers",
795 "code": 3,
796 "data": "10.192.15.1"
797 },
798 {
799 "space": "dhcp4",
800 "name": "domain-name",
801 "code": 15,
802 "data": "codfw.wmnet"
803 },
804 {
805 "space": "dhcp4",
806 "name": "subnet-mask",
807 "code": 1,
808 "data": "255.255.255.0"
809 }
810 ],
811 "next-server": "208.80.153.105"
812 },
813 # private1-b7-codfw
814 {
815 "id": 23,
816 "subnet": "10.192.21.0/24",
817 "option-data": [
818 {
819 "space": "dhcp4",
820 "name": "broadcast-address",
821 "code": 28,
822 "data": "10.192.21.255"
823 },
824 {
825 "space": "dhcp4",
826 "name": "routers",
827 "code": 3,
828 "data": "10.192.21.1"
829 },
830 {
831 "space": "dhcp4",
832 "name": "domain-name",
833 "code": 15,
834 "data": "codfw.wmnet"
835 },
836 {
837 "space": "dhcp4",
838 "name": "subnet-mask",
839 "code": 1,
840 "data": "255.255.255.0"
841 }
842 ],
843 "next-server": "208.80.153.105"
844 },
845 # private1-b8-codfw
846 {
847 "id": 24,
848 "subnet": "10.192.22.0/24",
849 "option-data": [
850 {
851 "space": "dhcp4",
852 "name": "broadcast-address",
853 "code": 28,
854 "data": "10.192.22.255"
855 },
856 {
857 "space": "dhcp4",
858 "name": "routers",
859 "code": 3,
860 "data": "10.192.22.1"
861 },
862 {
863 "space": "dhcp4",
864 "name": "domain-name",
865 "code": 15,
866 "data": "codfw.wmnet"
867 },
868 {
869 "space": "dhcp4",
870 "name": "subnet-mask",
871 "code": 1,
872 "data": "255.255.255.0"
873 }
874 ],
875 "next-server": "208.80.153.105"
876 },
877 # public1-a-eqiad
878 {
879 "id": 25,
880 "subnet": "208.80.154.0/26",
881 "option-data": [
882 {
883 "space": "dhcp4",
884 "name": "broadcast-address",
885 "code": 28,
886 "data": "208.80.154.63"
887 },
888 {
889 "space": "dhcp4",
890 "name": "routers",
891 "code": 3,
892 "data": "208.80.154.1"
893 },
894 {
895 "space": "dhcp4",
896 "name": "domain-name",
897 "code": 15,
898 "data": "wikimedia.org"
899 },
900 {
901 "space": "dhcp4",
902 "name": "subnet-mask",
903 "code": 1,
904 "data": "255.255.255.192"
905 }
906 ],
907 "next-server": "208.80.154.74"
908 },
909 # public1-b-eqiad
910 {
911 "id": 26,
912 "subnet": "208.80.154.128/26",
913 "option-data": [
914 {
915 "space": "dhcp4",
916 "name": "broadcast-address",
917 "code": 28,
918 "data": "208.80.154.191"
919 },
920 {
921 "space": "dhcp4",
922 "name": "routers",
923 "code": 3,
924 "data": "208.80.154.129"
925 },
926 {
927 "space": "dhcp4",
928 "name": "domain-name",
929 "code": 15,
930 "data": "wikimedia.org"
931 },
932 {
933 "space": "dhcp4",
934 "name": "subnet-mask",
935 "code": 1,
936 "data": "255.255.255.192"
937 }
938 ],
939 "next-server": "208.80.154.74"
940 },
941 # public1-c-eqiad
942 {
943 "id": 27,
944 "subnet": "208.80.154.64/26",
945 "option-data": [
946 {
947 "space": "dhcp4",
948 "name": "broadcast-address",
949 "code": 28,
950 "data": "208.80.154.127"
951 },
952 {
953 "space": "dhcp4",
954 "name": "routers",
955 "code": 3,
956 "data": "208.80.154.65"
957 },
958 {
959 "space": "dhcp4",
960 "name": "domain-name",
961 "code": 15,
962 "data": "wikimedia.org"
963 },
964 {
965 "space": "dhcp4",
966 "name": "subnet-mask",
967 "code": 1,
968 "data": "255.255.255.192"
969 }
970 ],
971 "next-server": "208.80.154.74"
972 },
973 # public1-d-eqiad
974 {
975 "id": 28,
976 "subnet": "208.80.155.96/27",
977 "option-data": [
978 {
979 "space": "dhcp4",
980 "name": "subnet-mask",
981 "code": 1,
982 "data": "255.255.255.224"
983 },
984 {
985 "space": "dhcp4",
986 "name": "broadcast-address",
987 "code": 28,
988 "data": "208.80.155.127"
989 },
990 {
991 "space": "dhcp4",
992 "name": "routers",
993 "code": 3,
994 "data": "208.80.155.97"
995 },
996 {
997 "space": "dhcp4",
998 "name": "domain-name",
999 "code": 15,
1000 "data": "wikimedia.org"
1001 }
1002 ],
1003 "next-server": "208.80.154.74"
1004 },
1005 # sandbox1-b-eqiad
1006 {
1007 "id": 29,
1008 "subnet": "208.80.155.64/28",
1009 "option-data": [
1010 {
1011 "space": "dhcp4",
1012 "name": "subnet-mask",
1013 "code": 1,
1014 "data": "255.255.255.240"
1015 },
1016 {
1017 "space": "dhcp4",
1018 "name": "broadcast-address",
1019 "code": 28,
1020 "data": "208.80.155.79"
1021 },
1022 {
1023 "space": "dhcp4",
1024 "name": "routers",
1025 "code": 3,
1026 "data": "208.80.155.65"
1027 },
1028 {
1029 "space": "dhcp4",
1030 "name": "domain-name",
1031 "code": 15,
1032 "data": "wikimedia.org"
1033 }
1034 ],
1035 "next-server": "208.80.154.74"
1036 },
1037 # private1-a-eqiad
1038 {
1039 "id": 30,
1040 "subnet": "10.64.0.0/22",
1041 "option-data": [
1042 {
1043 "space": "dhcp4",
1044 "name": "broadcast-address",
1045 "code": 28,
1046 "data": "10.64.3.255"
1047 },
1048 {
1049 "space": "dhcp4",
1050 "name": "routers",
1051 "code": 3,
1052 "data": "10.64.0.1"
1053 },
1054 {
1055 "space": "dhcp4",
1056 "name": "subnet-mask",
1057 "code": 1,
1058 "data": "255.255.252.0"
1059 },
1060 {
1061 "space": "dhcp4",
1062 "name": "domain-name",
1063 "code": 15,
1064 "data": "eqiad.wmnet"
1065 }
1066 ],
1067 "next-server": "208.80.154.74"
1068 },
1069 # private1-b-eqiad
1070 {
1071 "id": 31,
1072 "subnet": "10.64.16.0/22",
1073 "option-data": [
1074 {
1075 "space": "dhcp4",
1076 "name": "broadcast-address",
1077 "code": 28,
1078 "data": "10.64.19.255"
1079 },
1080 {
1081 "space": "dhcp4",
1082 "name": "routers",
1083 "code": 3,
1084 "data": "10.64.16.1"
1085 },
1086 {
1087 "space": "dhcp4",
1088 "name": "subnet-mask",
1089 "code": 1,
1090 "data": "255.255.252.0"
1091 },
1092 {
1093 "space": "dhcp4",
1094 "name": "domain-name",
1095 "code": 15,
1096 "data": "eqiad.wmnet"
1097 }
1098 ],
1099 "next-server": "208.80.154.74"
1100 },
1101 # private1-c-eqiad
1102 {
1103 "id": 32,
1104 "subnet": "10.64.32.0/22",
1105 "option-data": [
1106 {
1107 "space": "dhcp4",
1108 "name": "broadcast-address",
1109 "code": 28,
1110 "data": "10.64.35.255"
1111 },
1112 {
1113 "space": "dhcp4",
1114 "name": "routers",
1115 "code": 3,
1116 "data": "10.64.32.1"
1117 },
1118 {
1119 "space": "dhcp4",
1120 "name": "subnet-mask",
1121 "code": 1,
1122 "data": "255.255.252.0"
1123 },
1124 {
1125 "space": "dhcp4",
1126 "name": "domain-name",
1127 "code": 15,
1128 "data": "eqiad.wmnet"
1129 }
1130 ],
1131 "next-server": "208.80.154.74"
1132 },
1133 # private1-d-eqiad
1134 {
1135 "id": 33,
1136 "subnet": "10.64.48.0/22",
1137 "option-data": [
1138 {
1139 "space": "dhcp4",
1140 "name": "broadcast-address",
1141 "code": 28,
1142 "data": "10.64.51.255"
1143 },
1144 {
1145 "space": "dhcp4",
1146 "name": "routers",
1147 "code": 3,
1148 "data": "10.64.48.1"
1149 },
1150 {
1151 "space": "dhcp4",
1152 "name": "subnet-mask",
1153 "code": 1,
1154 "data": "255.255.252.0"
1155 },
1156 {
1157 "space": "dhcp4",
1158 "name": "domain-name",
1159 "code": 15,
1160 "data": "eqiad.wmnet"
1161 }
1162 ],
1163 "next-server": "208.80.154.74"
1164 },
1165 # private1-e1-eqiad
1166 {
1167 "id": 34,
1168 "subnet": "10.64.130.0/24",
1169 "option-data": [
1170 {
1171 "space": "dhcp4",
1172 "name": "broadcast-address",
1173 "code": 28,
1174 "data": "10.64.130.255"
1175 },
1176 {
1177 "space": "dhcp4",
1178 "name": "routers",
1179 "code": 3,
1180 "data": "10.64.130.1"
1181 },
1182 {
1183 "space": "dhcp4",
1184 "name": "subnet-mask",
1185 "code": 1,
1186 "data": "255.255.255.0"
1187 },
1188 {
1189 "space": "dhcp4",
1190 "name": "domain-name",
1191 "code": 15,
1192 "data": "eqiad.wmnet"
1193 }
1194 ],
1195 "next-server": "208.80.154.74"
1196 },
1197 # private1-e2-eqiad
1198 {
1199 "id": 35,
1200 "subnet": "10.64.131.0/24",
1201 "option-data": [
1202 {
1203 "space": "dhcp4",
1204 "name": "broadcast-address",
1205 "code": 28,
1206 "data": "10.64.131.255"
1207 },
1208 {
1209 "space": "dhcp4",
1210 "name": "routers",
1211 "code": 3,
1212 "data": "10.64.131.1"
1213 },
1214 {
1215 "space": "dhcp4",
1216 "name": "subnet-mask",
1217 "code": 1,
1218 "data": "255.255.255.0"
1219 },
1220 {
1221 "space": "dhcp4",
1222 "name": "domain-name",
1223 "code": 15,
1224 "data": "eqiad.wmnet"
1225 }
1226 ],
1227 "next-server": "208.80.154.74"
1228 },
1229 # private1-e3-eqiad
1230 {
1231 "id": 36,
1232 "subnet": "10.64.132.0/24",
1233 "option-data": [
1234 {
1235 "space": "dhcp4",
1236 "name": "broadcast-address",
1237 "code": 28,
1238 "data": "10.64.132.255"
1239 },
1240 {
1241 "space": "dhcp4",
1242 "name": "routers",
1243 "code": 3,
1244 "data": "10.64.132.1"
1245 },
1246 {
1247 "space": "dhcp4",
1248 "name": "subnet-mask",
1249 "code": 1,
1250 "data": "255.255.255.0"
1251 },
1252 {
1253 "space": "dhcp4",
1254 "name": "domain-name",
1255 "code": 15,
1256 "data": "eqiad.wmnet"
1257 }
1258 ],
1259 "next-server": "208.80.154.74"
1260 },
1261 # private1-e5-eqiad
1262 {
1263 "id": 37,
1264 "subnet": "10.64.152.0/24",
1265 "option-data": [
1266 {
1267 "space": "dhcp4",
1268 "name": "broadcast-address",
1269 "code": 28,
1270 "data": "10.64.152.255"
1271 },
1272 {
1273 "space": "dhcp4",
1274 "name": "routers",
1275 "code": 3,
1276 "data": "10.64.152.1"
1277 },
1278 {
1279 "space": "dhcp4",
1280 "name": "subnet-mask",
1281 "code": 1,
1282 "data": "255.255.255.0"
1283 },
1284 {
1285 "space": "dhcp4",
1286 "name": "domain-name",
1287 "code": 15,
1288 "data": "eqiad.wmnet"
1289 }
1290 ],
1291 "next-server": "208.80.154.74"
1292 },
1293 # private1-e6-eqiad
1294 {
1295 "id": 38,
1296 "subnet": "10.64.154.0/24",
1297 "option-data": [
1298 {
1299 "space": "dhcp4",
1300 "name": "broadcast-address",
1301 "code": 28,
1302 "data": "10.64.154.255"
1303 },
1304 {
1305 "space": "dhcp4",
1306 "name": "routers",
1307 "code": 3,
1308 "data": "10.64.154.1"
1309 },
1310 {
1311 "space": "dhcp4",
1312 "name": "subnet-mask",
1313 "code": 1,
1314 "data": "255.255.255.0"
1315 },
1316 {
1317 "space": "dhcp4",
1318 "name": "domain-name",
1319 "code": 15,
1320 "data": "eqiad.wmnet"
1321 }
1322 ],
1323 "next-server": "208.80.154.74"
1324 },
1325 # private1-e7-eqiad
1326 {
1327 "id": 39,
1328 "subnet": "10.64.156.0/24",
1329 "option-data": [
1330 {
1331 "space": "dhcp4",
1332 "name": "broadcast-address",
1333 "code": 28,
1334 "data": "10.64.156.255"
1335 },
1336 {
1337 "space": "dhcp4",
1338 "name": "routers",
1339 "code": 3,
1340 "data": "10.64.156.1"
1341 },
1342 {
1343 "space": "dhcp4",
1344 "name": "subnet-mask",
1345 "code": 1,
1346 "data": "255.255.255.0"
1347 },
1348 {
1349 "space": "dhcp4",
1350 "name": "domain-name",
1351 "code": 15,
1352 "data": "eqiad.wmnet"
1353 }
1354 ],
1355 "next-server": "208.80.154.74"
1356 },
1357 # private1-e8-eqiad
1358 {
1359 "id": 40,
1360 "subnet": "10.64.158.0/24",
1361 "option-data": [
1362 {
1363 "space": "dhcp4",
1364 "name": "broadcast-address",
1365 "code": 28,
1366 "data": "10.64.158.255"
1367 },
1368 {
1369 "space": "dhcp4",
1370 "name": "routers",
1371 "code": 3,
1372 "data": "10.64.158.1"
1373 },
1374 {
1375 "space": "dhcp4",
1376 "name": "subnet-mask",
1377 "code": 1,
1378 "data": "255.255.255.0"
1379 },
1380 {
1381 "space": "dhcp4",
1382 "name": "domain-name",
1383 "code": 15,
1384 "data": "eqiad.wmnet"
1385 }
1386 ],
1387 "next-server": "208.80.154.74"
1388 },
1389 # private1-f1-eqiad
1390 {
1391 "id": 41,
1392 "subnet": "10.64.134.0/24",
1393 "option-data": [
1394 {
1395 "space": "dhcp4",
1396 "name": "broadcast-address",
1397 "code": 28,
1398 "data": "10.64.134.255"
1399 },
1400 {
1401 "space": "dhcp4",
1402 "name": "routers",
1403 "code": 3,
1404 "data": "10.64.134.1"
1405 },
1406 {
1407 "space": "dhcp4",
1408 "name": "subnet-mask",
1409 "code": 1,
1410 "data": "255.255.255.0"
1411 },
1412 {
1413 "space": "dhcp4",
1414 "name": "domain-name",
1415 "code": 15,
1416 "data": "eqiad.wmnet"
1417 }
1418 ],
1419 "next-server": "208.80.154.74"
1420 },
1421 # private1-f2-eqiad
1422 {
1423 "id": 42,
1424 "subnet": "10.64.135.0/24",
1425 "option-data": [
1426 {
1427 "space": "dhcp4",
1428 "name": "broadcast-address",
1429 "code": 28,
1430 "data": "10.64.135.255"
1431 },
1432 {
1433 "space": "dhcp4",
1434 "name": "routers",
1435 "code": 3,
1436 "data": "10.64.135.1"
1437 },
1438 {
1439 "space": "dhcp4",
1440 "name": "subnet-mask",
1441 "code": 1,
1442 "data": "255.255.255.0"
1443 },
1444 {
1445 "space": "dhcp4",
1446 "name": "domain-name",
1447 "code": 15,
1448 "data": "eqiad.wmnet"
1449 }
1450 ],
1451 "next-server": "208.80.154.74"
1452 },
1453 # private1-f3-eqiad
1454 {
1455 "id": 43,
1456 "subnet": "10.64.136.0/24",
1457 "option-data": [
1458 {
1459 "space": "dhcp4",
1460 "name": "broadcast-address",
1461 "code": 28,
1462 "data": "10.64.136.255"
1463 },
1464 {
1465 "space": "dhcp4",
1466 "name": "routers",
1467 "code": 3,
1468 "data": "10.64.136.1"
1469 },
1470 {
1471 "space": "dhcp4",
1472 "name": "subnet-mask",
1473 "code": 1,
1474 "data": "255.255.255.0"
1475 },
1476 {
1477 "space": "dhcp4",
1478 "name": "domain-name",
1479 "code": 15,
1480 "data": "eqiad.wmnet"
1481 }
1482 ],
1483 "next-server": "208.80.154.74"
1484 },
1485 # private1-f5-eqiad
1486 {
1487 "id": 44,
1488 "subnet": "10.64.160.0/24",
1489 "option-data": [
1490 {
1491 "space": "dhcp4",
1492 "name": "broadcast-address",
1493 "code": 28,
1494 "data": "10.64.160.255"
1495 },
1496 {
1497 "space": "dhcp4",
1498 "name": "routers",
1499 "code": 3,
1500 "data": "10.64.160.1"
1501 },
1502 {
1503 "space": "dhcp4",
1504 "name": "subnet-mask",
1505 "code": 1,
1506 "data": "255.255.255.0"
1507 },
1508 {
1509 "space": "dhcp4",
1510 "name": "domain-name",
1511 "code": 15,
1512 "data": "eqiad.wmnet"
1513 }
1514 ],
1515 "next-server": "208.80.154.74"
1516 },
1517 # private1-f6-eqiad
1518 {
1519 "id": 45,
1520 "subnet": "10.64.162.0/24",
1521 "option-data": [
1522 {
1523 "space": "dhcp4",
1524 "name": "broadcast-address",
1525 "code": 28,
1526 "data": "10.64.162.255"
1527 },
1528 {
1529 "space": "dhcp4",
1530 "name": "routers",
1531 "code": 3,
1532 "data": "10.64.162.1"
1533 },
1534 {
1535 "space": "dhcp4",
1536 "name": "subnet-mask",
1537 "code": 1,
1538 "data": "255.255.255.0"
1539 },
1540 {
1541 "space": "dhcp4",
1542 "name": "domain-name",
1543 "code": 15,
1544 "data": "eqiad.wmnet"
1545 }
1546 ],
1547 "next-server": "208.80.154.74"
1548 },
1549 # private1-f7-eqiad
1550 {
1551 "id": 46,
1552 "subnet": "10.64.164.0/24",
1553 "option-data": [
1554 {
1555 "space": "dhcp4",
1556 "name": "broadcast-address",
1557 "code": 28,
1558 "data": "10.64.164.255"
1559 },
1560 {
1561 "space": "dhcp4",
1562 "name": "routers",
1563 "code": 3,
1564 "data": "10.64.164.1"
1565 },
1566 {
1567 "space": "dhcp4",
1568 "name": "subnet-mask",
1569 "code": 1,
1570 "data": "255.255.255.0"
1571 },
1572 {
1573 "space": "dhcp4",
1574 "name": "domain-name",
1575 "code": 15,
1576 "data": "eqiad.wmnet"
1577 }
1578 ],
1579 "next-server": "208.80.154.74"
1580 },
1581 # private1-f8-eqiad
1582 {
1583 "id": 47,
1584 "subnet": "10.64.166.0/24",
1585 "option-data": [
1586 {
1587 "space": "dhcp4",
1588 "name": "broadcast-address",
1589 "code": 28,
1590 "data": "10.64.166.255"
1591 },
1592 {
1593 "space": "dhcp4",
1594 "name": "routers",
1595 "code": 3,
1596 "data": "10.64.166.1"
1597 },
1598 {
1599 "space": "dhcp4",
1600 "name": "subnet-mask",
1601 "code": 1,
1602 "data": "255.255.255.0"
1603 },
1604 {
1605 "space": "dhcp4",
1606 "name": "domain-name",
1607 "code": 15,
1608 "data": "eqiad.wmnet"
1609 }
1610 ],
1611 "next-server": "208.80.154.74"
1612 },
1613 # labs-hosts1-a-eqiad subnet
1614 {
1615 "id": 48,
1616 "subnet": "10.64.4.0/24",
1617 "option-data": [
1618 {
1619 "space": "dhcp4",
1620 "name": "broadcast-address",
1621 "code": 28,
1622 "data": "10.64.4.255"
1623 },
1624 {
1625 "space": "dhcp4",
1626 "name": "routers",
1627 "code": 3,
1628 "data": "10.64.4.1"
1629 },
1630 {
1631 "space": "dhcp4",
1632 "name": "subnet-mask",
1633 "code": 1,
1634 "data": "255.255.255.0"
1635 },
1636 {
1637 "space": "dhcp4",
1638 "name": "domain-name",
1639 "code": 15,
1640 "data": "eqiad.wmnet"
1641 }
1642 ],
1643 "next-server": "208.80.154.74"
1644 },
1645 # cloud-hosts1-eqiad subnet
1646 {
1647 "id": 49,
1648 "subnet": "10.64.20.0/24",
1649 "option-data": [
1650 {
1651 "space": "dhcp4",
1652 "name": "broadcast-address",
1653 "code": 28,
1654 "data": "10.64.20.255"
1655 },
1656 {
1657 "space": "dhcp4",
1658 "name": "routers",
1659 "code": 3,
1660 "data": "10.64.20.1"
1661 },
1662 {
1663 "space": "dhcp4",
1664 "name": "subnet-mask",
1665 "code": 1,
1666 "data": "255.255.255.0"
1667 },
1668 {
1669 "space": "dhcp4",
1670 "name": "domain-name",
1671 "code": 15,
1672 "data": "eqiad.wmnet"
1673 }
1674 ],
1675 "next-server": "208.80.154.74"
1676 },
1677 # labs-support1-c-eqiad subnet
1678 {
1679 "id": 50,
1680 "subnet": "10.64.37.0/24",
1681 "option-data": [
1682 {
1683 "space": "dhcp4",
1684 "name": "broadcast-address",
1685 "code": 28,
1686 "data": "10.64.37.255"
1687 },
1688 {
1689 "space": "dhcp4",
1690 "name": "routers",
1691 "code": 3,
1692 "data": "10.64.37.1"
1693 },
1694 {
1695 "space": "dhcp4",
1696 "name": "subnet-mask",
1697 "code": 1,
1698 "data": "255.255.255.0"
1699 },
1700 {
1701 "space": "dhcp4",
1702 "name": "domain-name",
1703 "code": 15,
1704 "data": "eqiad.wmnet"
1705 }
1706 ],
1707 "next-server": "208.80.154.74"
1708 },
1709 # analytics1-a-eqiad subnet
1710 {
1711 "id": 51,
1712 "subnet": "10.64.5.0/24",
1713 "option-data": [
1714 {
1715 "space": "dhcp4",
1716 "name": "broadcast-address",
1717 "code": 28,
1718 "data": "10.64.5.255"
1719 },
1720 {
1721 "space": "dhcp4",
1722 "name": "routers",
1723 "code": 3,
1724 "data": "10.64.5.1"
1725 },
1726 {
1727 "space": "dhcp4",
1728 "name": "subnet-mask",
1729 "code": 1,
1730 "data": "255.255.255.0"
1731 },
1732 {
1733 "space": "dhcp4",
1734 "name": "domain-name",
1735 "code": 15,
1736 "data": "eqiad.wmnet"
1737 }
1738 ],
1739 "next-server": "208.80.154.74"
1740 },
1741 # analytics1-b-eqiad subnet
1742 {
1743 "id": 52,
1744 "subnet": "10.64.21.0/24",
1745 "option-data": [
1746 {
1747 "space": "dhcp4",
1748 "name": "broadcast-address",
1749 "code": 28,
1750 "data": "10.64.21.255"
1751 },
1752 {
1753 "space": "dhcp4",
1754 "name": "routers",
1755 "code": 3,
1756 "data": "10.64.21.1"
1757 },
1758 {
1759 "space": "dhcp4",
1760 "name": "subnet-mask",
1761 "code": 1,
1762 "data": "255.255.255.0"
1763 },
1764 {
1765 "space": "dhcp4",
1766 "name": "domain-name",
1767 "code": 15,
1768 "data": "eqiad.wmnet"
1769 }
1770 ],
1771 "next-server": "208.80.154.74"
1772 },
1773 # analytics1-c-eqiad subnet
1774 {
1775 "id": 53,
1776 "subnet": "10.64.36.0/24",
1777 "option-data": [
1778 {
1779 "space": "dhcp4",
1780 "name": "broadcast-address",
1781 "code": 28,
1782 "data": "10.64.36.255"
1783 },
1784 {
1785 "space": "dhcp4",
1786 "name": "routers",
1787 "code": 3,
1788 "data": "10.64.36.1"
1789 },
1790 {
1791 "space": "dhcp4",
1792 "name": "subnet-mask",
1793 "code": 1,
1794 "data": "255.255.255.0"
1795 },
1796 {
1797 "space": "dhcp4",
1798 "name": "domain-name",
1799 "code": 15,
1800 "data": "eqiad.wmnet"
1801 }
1802 ],
1803 "next-server": "208.80.154.74"
1804 },
1805 # analytics1-d-eqiad subnet
1806 {
1807 "id": 54,
1808 "subnet": "10.64.53.0/24",
1809 "option-data": [
1810 {
1811 "space": "dhcp4",
1812 "name": "broadcast-address",
1813 "code": 28,
1814 "data": "10.64.53.255"
1815 },
1816 {
1817 "space": "dhcp4",
1818 "name": "routers",
1819 "code": 3,
1820 "data": "10.64.53.1"
1821 },
1822 {
1823 "space": "dhcp4",
1824 "name": "subnet-mask",
1825 "code": 1,
1826 "data": "255.255.255.0"
1827 },
1828 {
1829 "space": "dhcp4",
1830 "name": "domain-name",
1831 "code": 15,
1832 "data": "eqiad.wmnet"
1833 }
1834 ],
1835 "next-server": "208.80.154.74"
1836 },
1837 # analytics1-e1-eqiad
1838 {
1839 "id": 55,
1840 "subnet": "10.64.138.0/24",
1841 "option-data": [
1842 {
1843 "space": "dhcp4",
1844 "name": "broadcast-address",
1845 "code": 28,
1846 "data": "10.64.138.255"
1847 },
1848 {
1849 "space": "dhcp4",
1850 "name": "routers",
1851 "code": 3,
1852 "data": "10.64.138.1"
1853 },
1854 {
1855 "space": "dhcp4",
1856 "name": "subnet-mask",
1857 "code": 1,
1858 "data": "255.255.255.0"
1859 },
1860 {
1861 "space": "dhcp4",
1862 "name": "domain-name",
1863 "code": 15,
1864 "data": "eqiad.wmnet"
1865 }
1866 ],
1867 "next-server": "208.80.154.74"
1868 },
1869 # analytics1-e2-eqiad
1870 {
1871 "id": 56,
1872 "subnet": "10.64.139.0/24",
1873 "option-data": [
1874 {
1875 "space": "dhcp4",
1876 "name": "broadcast-address",
1877 "code": 28,
1878 "data": "10.64.139.255"
1879 },
1880 {
1881 "space": "dhcp4",
1882 "name": "routers",
1883 "code": 3,
1884 "data": "10.64.139.1"
1885 },
1886 {
1887 "space": "dhcp4",
1888 "name": "subnet-mask",
1889 "code": 1,
1890 "data": "255.255.255.0"
1891 },
1892 {
1893 "space": "dhcp4",
1894 "name": "domain-name",
1895 "code": 15,
1896 "data": "eqiad.wmnet"
1897 }
1898 ],
1899 "next-server": "208.80.154.74"
1900 },
1901 # analytics1-e3-eqiad
1902 {
1903 "id": 57,
1904 "subnet": "10.64.140.0/24",
1905 "option-data": [
1906 {
1907 "space": "dhcp4",
1908 "name": "broadcast-address",
1909 "code": 28,
1910 "data": "10.64.140.255"
1911 },
1912 {
1913 "space": "dhcp4",
1914 "name": "routers",
1915 "code": 3,
1916 "data": "10.64.140.1"
1917 },
1918 {
1919 "space": "dhcp4",
1920 "name": "subnet-mask",
1921 "code": 1,
1922 "data": "255.255.255.0"
1923 },
1924 {
1925 "space": "dhcp4",
1926 "name": "domain-name",
1927 "code": 15,
1928 "data": "eqiad.wmnet"
1929 }
1930 ],
1931 "next-server": "208.80.154.74"
1932 },
1933 # analytics1-e5-eqiad
1934 {
1935 "id": 58,
1936 "subnet": "10.64.153.0/24",
1937 "option-data": [
1938 {
1939 "space": "dhcp4",
1940 "name": "broadcast-address",
1941 "code": 28,
1942 "data": "10.64.153.255"
1943 },
1944 {
1945 "space": "dhcp4",
1946 "name": "routers",
1947 "code": 3,
1948 "data": "10.64.153.1"
1949 },
1950 {
1951 "space": "dhcp4",
1952 "name": "subnet-mask",
1953 "code": 1,
1954 "data": "255.255.255.0"
1955 },
1956 {
1957 "space": "dhcp4",
1958 "name": "domain-name",
1959 "code": 15,
1960 "data": "eqiad.wmnet"
1961 }
1962 ],
1963 "next-server": "208.80.154.74"
1964 },
1965 # analytics1-e6-eqiad
1966 {
1967 "id": 59,
1968 "subnet": "10.64.155.0/24",
1969 "option-data": [
1970 {
1971 "space": "dhcp4",
1972 "name": "broadcast-address",
1973 "code": 28,
1974 "data": "10.64.155.255"
1975 },
1976 {
1977 "space": "dhcp4",
1978 "name": "routers",
1979 "code": 3,
1980 "data": "10.64.155.1"
1981 },
1982 {
1983 "space": "dhcp4",
1984 "name": "subnet-mask",
1985 "code": 1,
1986 "data": "255.255.255.0"
1987 },
1988 {
1989 "space": "dhcp4",
1990 "name": "domain-name",
1991 "code": 15,
1992 "data": "eqiad.wmnet"
1993 }
1994 ],
1995 "next-server": "208.80.154.74"
1996 },
1997 # analytics1-e7-eqiad
1998 {
1999 "id": 60,
2000 "subnet": "10.64.157.0/24",
2001 "option-data": [
2002 {
2003 "space": "dhcp4",
2004 "name": "broadcast-address",
2005 "code": 28,
2006 "data": "10.64.157.255"
2007 },
2008 {
2009 "space": "dhcp4",
2010 "name": "routers",
2011 "code": 3,
2012 "data": "10.64.157.1"
2013 },
2014 {
2015 "space": "dhcp4",
2016 "name": "subnet-mask",
2017 "code": 1,
2018 "data": "255.255.255.0"
2019 },
2020 {
2021 "space": "dhcp4",
2022 "name": "domain-name",
2023 "code": 15,
2024 "data": "eqiad.wmnet"
2025 }
2026 ],
2027 "next-server": "208.80.154.74"
2028 },
2029 # analytics1-e8-eqiad
2030 {
2031 "id": 61,
2032 "subnet": "10.64.159.0/24",
2033 "option-data": [
2034 {
2035 "space": "dhcp4",
2036 "name": "broadcast-address",
2037 "code": 28,
2038 "data": "10.64.159.255"
2039 },
2040 {
2041 "space": "dhcp4",
2042 "name": "routers",
2043 "code": 3,
2044 "data": "10.64.159.1"
2045 },
2046 {
2047 "space": "dhcp4",
2048 "name": "subnet-mask",
2049 "code": 1,
2050 "data": "255.255.255.0"
2051 },
2052 {
2053 "space": "dhcp4",
2054 "name": "domain-name",
2055 "code": 15,
2056 "data": "eqiad.wmnet"
2057 }
2058 ],
2059 "next-server": "208.80.154.74"
2060 },
2061 # analytics1-f1-eqiad
2062 {
2063 "id": 62,
2064 "subnet": "10.64.142.0/24",
2065 "option-data": [
2066 {
2067 "space": "dhcp4",
2068 "name": "broadcast-address",
2069 "code": 28,
2070 "data": "10.64.142.255"
2071 },
2072 {
2073 "space": "dhcp4",
2074 "name": "routers",
2075 "code": 3,
2076 "data": "10.64.142.1"
2077 },
2078 {
2079 "space": "dhcp4",
2080 "name": "subnet-mask",
2081 "code": 1,
2082 "data": "255.255.255.0"
2083 },
2084 {
2085 "space": "dhcp4",
2086 "name": "domain-name",
2087 "code": 15,
2088 "data": "eqiad.wmnet"
2089 }
2090 ],
2091 "next-server": "208.80.154.74"
2092 },
2093 # analytics1-f2-eqiad
2094 {
2095 "id": 63,
2096 "subnet": "10.64.143.0/24",
2097 "option-data": [
2098 {
2099 "space": "dhcp4",
2100 "name": "broadcast-address",
2101 "code": 28,
2102 "data": "10.64.143.255"
2103 },
2104 {
2105 "space": "dhcp4",
2106 "name": "routers",
2107 "code": 3,
2108 "data": "10.64.143.1"
2109 },
2110 {
2111 "space": "dhcp4",
2112 "name": "subnet-mask",
2113 "code": 1,
2114 "data": "255.255.255.0"
2115 },
2116 {
2117 "space": "dhcp4",
2118 "name": "domain-name",
2119 "code": 15,
2120 "data": "eqiad.wmnet"
2121 }
2122 ],
2123 "next-server": "208.80.154.74"
2124 },
2125 # analytics1-f3-eqiad
2126 {
2127 "id": 64,
2128 "subnet": "10.64.144.0/24",
2129 "option-data": [
2130 {
2131 "space": "dhcp4",
2132 "name": "broadcast-address",
2133 "code": 28,
2134 "data": "10.64.144.255"
2135 },
2136 {
2137 "space": "dhcp4",
2138 "name": "routers",
2139 "code": 3,
2140 "data": "10.64.144.1"
2141 },
2142 {
2143 "space": "dhcp4",
2144 "name": "subnet-mask",
2145 "code": 1,
2146 "data": "255.255.255.0"
2147 },
2148 {
2149 "space": "dhcp4",
2150 "name": "domain-name",
2151 "code": 15,
2152 "data": "eqiad.wmnet"
2153 }
2154 ],
2155 "next-server": "208.80.154.74"
2156 },
2157 # analytics1-f5-eqiad
2158 {
2159 "id": 65,
2160 "subnet": "10.64.161.0/24",
2161 "option-data": [
2162 {
2163 "space": "dhcp4",
2164 "name": "broadcast-address",
2165 "code": 28,
2166 "data": "10.64.161.255"
2167 },
2168 {
2169 "space": "dhcp4",
2170 "name": "routers",
2171 "code": 3,
2172 "data": "10.64.161.1"
2173 },
2174 {
2175 "space": "dhcp4",
2176 "name": "subnet-mask",
2177 "code": 1,
2178 "data": "255.255.255.0"
2179 },
2180 {
2181 "space": "dhcp4",
2182 "name": "domain-name",
2183 "code": 15,
2184 "data": "eqiad.wmnet"
2185 }
2186 ],
2187 "next-server": "208.80.154.74"
2188 },
2189 # analytics1-f6-eqiad
2190 {
2191 "id": 66,
2192 "subnet": "10.64.163.0/24",
2193 "option-data": [
2194 {
2195 "space": "dhcp4",
2196 "name": "broadcast-address",
2197 "code": 28,
2198 "data": "10.64.163.255"
2199 },
2200 {
2201 "space": "dhcp4",
2202 "name": "routers",
2203 "code": 3,
2204 "data": "10.64.163.1"
2205 },
2206 {
2207 "space": "dhcp4",
2208 "name": "subnet-mask",
2209 "code": 1,
2210 "data": "255.255.255.0"
2211 },
2212 {
2213 "space": "dhcp4",
2214 "name": "domain-name",
2215 "code": 15,
2216 "data": "eqiad.wmnet"
2217 }
2218 ],
2219 "next-server": "208.80.154.74"
2220 },
2221 # analytics1-f7-eqiad
2222 {
2223 "id": 67,
2224 "subnet": "10.64.165.0/24",
2225 "option-data": [
2226 {
2227 "space": "dhcp4",
2228 "name": "broadcast-address",
2229 "code": 28,
2230 "data": "10.64.165.255"
2231 },
2232 {
2233 "space": "dhcp4",
2234 "name": "routers",
2235 "code": 3,
2236 "data": "10.64.165.1"
2237 },
2238 {
2239 "space": "dhcp4",
2240 "name": "subnet-mask",
2241 "code": 1,
2242 "data": "255.255.255.0"
2243 },
2244 {
2245 "space": "dhcp4",
2246 "name": "domain-name",
2247 "code": 15,
2248 "data": "eqiad.wmnet"
2249 }
2250 ],
2251 "next-server": "208.80.154.74"
2252 },
2253 # analytics1-f8-eqiad
2254 {
2255 "id": 68,
2256 "subnet": "10.64.167.0/24",
2257 "option-data": [
2258 {
2259 "space": "dhcp4",
2260 "name": "broadcast-address",
2261 "code": 28,
2262 "data": "10.64.167.255"
2263 },
2264 {
2265 "space": "dhcp4",
2266 "name": "routers",
2267 "code": 3,
2268 "data": "10.64.167.1"
2269 },
2270 {
2271 "space": "dhcp4",
2272 "name": "subnet-mask",
2273 "code": 1,
2274 "data": "255.255.255.0"
2275 },
2276 {
2277 "space": "dhcp4",
2278 "name": "domain-name",
2279 "code": 15,
2280 "data": "eqiad.wmnet"
2281 }
2282 ],
2283 "next-server": "208.80.154.74"
2284 },
2285 # cloud-hosts1-e4-eqiad
2286 {
2287 "id": 69,
2288 "subnet": "10.64.148.0/24",
2289 "option-data": [
2290 {
2291 "space": "dhcp4",
2292 "name": "broadcast-address",
2293 "code": 28,
2294 "data": "10.64.148.255"
2295 },
2296 {
2297 "space": "dhcp4",
2298 "name": "routers",
2299 "code": 3,
2300 "data": "10.64.148.1"
2301 },
2302 {
2303 "space": "dhcp4",
2304 "name": "subnet-mask",
2305 "code": 1,
2306 "data": "255.255.255.0"
2307 },
2308 {
2309 "space": "dhcp4",
2310 "name": "domain-name",
2311 "code": 15,
2312 "data": "eqiad.wmnet"
2313 }
2314 ],
2315 "next-server": "208.80.154.74"
2316 },
2317 # cloud-hosts1-f4-eqiad
2318 {
2319 "id": 70,
2320 "subnet": "10.64.149.0/24",
2321 "option-data": [
2322 {
2323 "space": "dhcp4",
2324 "name": "broadcast-address",
2325 "code": 28,
2326 "data": "10.64.149.255"
2327 },
2328 {
2329 "space": "dhcp4",
2330 "name": "routers",
2331 "code": 3,
2332 "data": "10.64.149.1"
2333 },
2334 {
2335 "space": "dhcp4",
2336 "name": "subnet-mask",
2337 "code": 1,
2338 "data": "255.255.255.0"
2339 },
2340 {
2341 "space": "dhcp4",
2342 "name": "domain-name",
2343 "code": 15,
2344 "data": "eqiad.wmnet"
2345 }
2346 ],
2347 "next-server": "208.80.154.74"
2348 },
2349 # cloud-hosts1-d5-eqiad
2350 {
2351 "id": 71,
2352 "subnet": "10.64.150.0/24",
2353 "option-data": [
2354 {
2355 "space": "dhcp4",
2356 "name": "broadcast-address",
2357 "code": 28,
2358 "data": "10.64.150.255"
2359 },
2360 {
2361 "space": "dhcp4",
2362 "name": "routers",
2363 "code": 3,
2364 "data": "10.64.150.1"
2365 },
2366 {
2367 "space": "dhcp4",
2368 "name": "subnet-mask",
2369 "code": 1,
2370 "data": "255.255.255.0"
2371 },
2372 {
2373 "space": "dhcp4",
2374 "name": "domain-name",
2375 "code": 15,
2376 "data": "eqiad.wmnet"
2377 }
2378 ],
2379 "next-server": "208.80.154.74"
2380 },
2381 # cloud-hosts1-c8-eqiad
2382 {
2383 "id": 72,
2384 "subnet": "10.64.151.0/24",
2385 "option-data": [
2386 {
2387 "space": "dhcp4",
2388 "name": "broadcast-address",
2389 "code": 28,
2390 "data": "10.64.151.255"
2391 },
2392 {
2393 "space": "dhcp4",
2394 "name": "routers",
2395 "code": 3,
2396 "data": "10.64.151.1"
2397 },
2398 {
2399 "space": "dhcp4",
2400 "name": "subnet-mask",
2401 "code": 1,
2402 "data": "255.255.255.0"
2403 },
2404 {
2405 "space": "dhcp4",
2406 "name": "domain-name",
2407 "code": 15,
2408 "data": "eqiad.wmnet"
2409 }
2410 ],
2411 "next-server": "208.80.154.74"
2412 },
2413 # public1-bw27-esams subnet
2414 {
2415 "id": 73,
2416 "subnet": "185.15.59.0/27",
2417 "option-data": [
2418 {
2419 "space": "dhcp4",
2420 "name": "subnet-mask",
2421 "code": 1,
2422 "data": "255.255.255.224"
2423 },
2424 {
2425 "space": "dhcp4",
2426 "name": "broadcast-address",
2427 "code": 28,
2428 "data": "185.15.59.31"
2429 },
2430 {
2431 "space": "dhcp4",
2432 "name": "routers",
2433 "code": 3,
2434 "data": "185.15.59.1"
2435 },
2436 {
2437 "space": "dhcp4",
2438 "name": "domain-name",
2439 "code": 15,
2440 "data": "wikimedia.org"
2441 }
2442 ],
2443 "next-server": "185.15.59.3"
2444 },
2445 # public1-by27-esams subnet
2446 {
2447 "id": 74,
2448 "subnet": "185.15.59.32/27",
2449 "option-data": [
2450 {
2451 "space": "dhcp4",
2452 "name": "subnet-mask",
2453 "code": 1,
2454 "data": "255.255.255.224"
2455 },
2456 {
2457 "space": "dhcp4",
2458 "name": "broadcast-address",
2459 "code": 28,
2460 "data": "185.15.59.63"
2461 },
2462 {
2463 "space": "dhcp4",
2464 "name": "routers",
2465 "code": 3,
2466 "data": "185.15.59.33"
2467 },
2468 {
2469 "space": "dhcp4",
2470 "name": "domain-name",
2471 "code": 15,
2472 "data": "wikimedia.org"
2473 }
2474 ],
2475 "next-server": "185.15.59.3"
2476 },
2477 # private1-bw27-esams subnet
2478 {
2479 "id": 75,
2480 "subnet": "10.80.0.0/24",
2481 "option-data": [
2482 {
2483 "space": "dhcp4",
2484 "name": "subnet-mask",
2485 "code": 1,
2486 "data": "255.255.255.0"
2487 },
2488 {
2489 "space": "dhcp4",
2490 "name": "broadcast-address",
2491 "code": 28,
2492 "data": "10.80.0.255"
2493 },
2494 {
2495 "space": "dhcp4",
2496 "name": "routers",
2497 "code": 3,
2498 "data": "10.80.0.1"
2499 },
2500 {
2501 "space": "dhcp4",
2502 "name": "domain-name",
2503 "code": 15,
2504 "data": "esams.wmnet"
2505 }
2506 ],
2507 "next-server": "185.15.59.3"
2508 },
2509 # private1-by27-esams subnet
2510 {
2511 "id": 76,
2512 "subnet": "10.80.1.0/24",
2513 "option-data": [
2514 {
2515 "space": "dhcp4",
2516 "name": "subnet-mask",
2517 "code": 1,
2518 "data": "255.255.255.0"
2519 },
2520 {
2521 "space": "dhcp4",
2522 "name": "broadcast-address",
2523 "code": 28,
2524 "data": "10.80.1.255"
2525 },
2526 {
2527 "space": "dhcp4",
2528 "name": "routers",
2529 "code": 3,
2530 "data": "10.80.1.1"
2531 },
2532 {
2533 "space": "dhcp4",
2534 "name": "domain-name",
2535 "code": 15,
2536 "data": "esams.wmnet"
2537 }
2538 ],
2539 "next-server": "185.15.59.3"
2540 },
2541 # public1-ulsfo subnet
2542 {
2543 "id": 77,
2544 "subnet": "198.35.26.0/28",
2545 "option-data": [
2546 {
2547 "space": "dhcp4",
2548 "name": "subnet-mask",
2549 "code": 1,
2550 "data": "255.255.255.240"
2551 },
2552 {
2553 "space": "dhcp4",
2554 "name": "broadcast-address",
2555 "code": 28,
2556 "data": "198.35.26.15"
2557 },
2558 {
2559 "space": "dhcp4",
2560 "name": "routers",
2561 "code": 3,
2562 "data": "198.35.26.1"
2563 },
2564 {
2565 "space": "dhcp4",
2566 "name": "domain-name",
2567 "code": 15,
2568 "data": "wikimedia.org"
2569 }
2570 ],
2571 "next-server": "198.35.26.13"
2572 },
2573 # private1-ulsfo subnet
2574 {
2575 "id": 78,
2576 "subnet": "10.128.0.0/24",
2577 "option-data": [
2578 {
2579 "space": "dhcp4",
2580 "name": "subnet-mask",
2581 "code": 1,
2582 "data": "255.255.255.0"
2583 },
2584 {
2585 "space": "dhcp4",
2586 "name": "broadcast-address",
2587 "code": 28,
2588 "data": "10.128.0.255"
2589 },
2590 {
2591 "space": "dhcp4",
2592 "name": "routers",
2593 "code": 3,
2594 "data": "10.128.0.1"
2595 },
2596 {
2597 "space": "dhcp4",
2598 "name": "domain-name",
2599 "code": 15,
2600 "data": "ulsfo.wmnet"
2601 }
2602 ],
2603 "next-server": "198.35.26.13"
2604 },
2605 # public1-eqsin subnet
2606 {
2607 "id": 79,
2608 "subnet": "103.102.166.0/28",
2609 "option-data": [
2610 {
2611 "space": "dhcp4",
2612 "name": "subnet-mask",
2613 "code": 1,
2614 "data": "255.255.255.240"
2615 },
2616 {
2617 "space": "dhcp4",
2618 "name": "broadcast-address",
2619 "code": 28,
2620 "data": "103.102.166.15"
2621 },
2622 {
2623 "space": "dhcp4",
2624 "name": "routers",
2625 "code": 3,
2626 "data": "103.102.166.1"
2627 },
2628 {
2629 "space": "dhcp4",
2630 "name": "domain-name",
2631 "code": 15,
2632 "data": "wikimedia.org"
2633 }
2634 ],
2635 "next-server": "103.102.166.12"
2636 },
2637 # private1-eqsin subnet
2638 {
2639 "id": 80,
2640 "subnet": "10.132.0.0/24",
2641 "option-data": [
2642 {
2643 "space": "dhcp4",
2644 "name": "subnet-mask",
2645 "code": 1,
2646 "data": "255.255.255.0"
2647 },
2648 {
2649 "space": "dhcp4",
2650 "name": "broadcast-address",
2651 "code": 28,
2652 "data": "10.132.0.255"
2653 },
2654 {
2655 "space": "dhcp4",
2656 "name": "routers",
2657 "code": 3,
2658 "data": "10.132.0.1"
2659 },
2660 {
2661 "space": "dhcp4",
2662 "name": "domain-name",
2663 "code": 15,
2664 "data": "eqsin.wmnet"
2665 }
2666 ],
2667 "next-server": "103.102.166.12"
2668 },
2669 # public1-b12-drmrs subnet
2670 {
2671 "id": 81,
2672 "subnet": "185.15.58.0/27",
2673 "option-data": [
2674 {
2675 "space": "dhcp4",
2676 "name": "broadcast-address",
2677 "code": 28,
2678 "data": "185.15.58.31"
2679 },
2680 {
2681 "space": "dhcp4",
2682 "name": "routers",
2683 "code": 3,
2684 "data": "185.15.58.1"
2685 },
2686 {
2687 "space": "dhcp4",
2688 "name": "domain-name",
2689 "code": 15,
2690 "data": "wikimedia.org"
2691 },
2692 {
2693 "space": "dhcp4",
2694 "name": "subnet-mask",
2695 "code": 1,
2696 "data": "255.255.255.224"
2697 }
2698 ],
2699 "next-server": "185.15.58.12"
2700 },
2701 # public1-b13-drmrs subnet
2702 {
2703 "id": 82,
2704 "subnet": "185.15.58.32/27",
2705 "option-data": [
2706 {
2707 "space": "dhcp4",
2708 "name": "broadcast-address",
2709 "code": 28,
2710 "data": "185.15.58.63"
2711 },
2712 {
2713 "space": "dhcp4",
2714 "name": "routers",
2715 "code": 3,
2716 "data": "185.15.58.33"
2717 },
2718 {
2719 "space": "dhcp4",
2720 "name": "domain-name",
2721 "code": 15,
2722 "data": "wikimedia.org"
2723 },
2724 {
2725 "space": "dhcp4",
2726 "name": "subnet-mask",
2727 "code": 1,
2728 "data": "255.255.255.224"
2729 }
2730 ],
2731 "next-server": "185.15.58.12"
2732 },
2733 # private1-b12-drmrs subnet
2734 {
2735 "id": 83,
2736 "subnet": "10.136.0.0/24",
2737 "option-data": [
2738 {
2739 "space": "dhcp4",
2740 "name": "broadcast-address",
2741 "code": 28,
2742 "data": "10.136.0.255"
2743 },
2744 {
2745 "space": "dhcp4",
2746 "name": "routers",
2747 "code": 3,
2748 "data": "10.136.0.1"
2749 },
2750 {
2751 "space": "dhcp4",
2752 "name": "domain-name",
2753 "code": 15,
2754 "data": "drmrs.wmnet"
2755 },
2756 {
2757 "space": "dhcp4",
2758 "name": "subnet-mask",
2759 "code": 1,
2760 "data": "255.255.255.0"
2761 }
2762 ],
2763 "next-server": "185.15.58.12"
2764 },
2765 # private1-b13-drmrs subnet
2766 {
2767 "id": 84,
2768 "subnet": "10.136.1.0/24",
2769 "option-data": [
2770 {
2771 "space": "dhcp4",
2772 "name": "broadcast-address",
2773 "code": 28,
2774 "data": "10.136.1.255"
2775 },
2776 {
2777 "space": "dhcp4",
2778 "name": "routers",
2779 "code": 3,
2780 "data": "10.136.1.1"
2781 },
2782 {
2783 "space": "dhcp4",
2784 "name": "domain-name",
2785 "code": 15,
2786 "data": "drmrs.wmnet"
2787 },
2788 {
2789 "space": "dhcp4",
2790 "name": "subnet-mask",
2791 "code": 1,
2792 "data": "255.255.255.0"
2793 }
2794 ],
2795 "next-server": "185.15.58.12"
2796 },
2797 /// Begin file /etc/dhcp/automation.conf
2798 #
2799 # Managed by Puppet and automatically generated
2800 # see modules/install_server/manifests/dhcp_server.pp
2801 #
2802 {
2803 "id": 85,
2804 "subnet": "10.65.0.0/16",
2805 "option-data": [
2806 {
2807 "space": "dhcp4",
2808 "name": "subnet-mask",
2809 "code": 1,
2810 "data": "255.255.0.0"
2811 },
2812 {
2813 "space": "dhcp4",
2814 "name": "routers",
2815 "code": 3,
2816 "data": "10.65.0.1"
2817 },
2818 {
2819 "space": "dhcp4",
2820 "name": "domain-name",
2821 "code": 15,
2822 "data": "mgmt.eqiad.wmnet"
2823 }
2824 ]
2825 },
2826 /// End file /etc/dhcp/automation/proxies/mgmt-eqiad.conf
2827 {
2828 "id": 86,
2829 "subnet": "10.128.128.0/17",
2830 "option-data": [
2831 {
2832 "space": "dhcp4",
2833 "name": "subnet-mask",
2834 "code": 1,
2835 "data": "255.255.128.0"
2836 },
2837 {
2838 "space": "dhcp4",
2839 "name": "routers",
2840 "code": 3,
2841 "data": "10.128.128.1"
2842 },
2843 {
2844 "space": "dhcp4",
2845 "name": "domain-name",
2846 "code": 15,
2847 "data": "mgmt.ulsfo.wmnet"
2848 }
2849 ]
2850 },
2851 /// End file /etc/dhcp/automation/proxies/mgmt-ulsfo.conf
2852 {
2853 "id": 87,
2854 "subnet": "10.193.0.0/16",
2855 "option-data": [
2856 {
2857 "space": "dhcp4",
2858 "name": "subnet-mask",
2859 "code": 1,
2860 "data": "255.255.0.0"
2861 },
2862 {
2863 "space": "dhcp4",
2864 "name": "routers",
2865 "code": 3,
2866 "data": "10.193.0.1"
2867 },
2868 {
2869 "space": "dhcp4",
2870 "name": "domain-name",
2871 "code": 15,
2872 "data": "mgmt.codfw.wmnet"
2873 }
2874 ]
2875 },
2876 /// End file /etc/dhcp/automation/proxies/mgmt-codfw.conf
2877 {
2878 "id": 88,
2879 "subnet": "10.80.128.0/17",
2880 "option-data": [
2881 {
2882 "space": "dhcp4",
2883 "name": "subnet-mask",
2884 "code": 1,
2885 "data": "255.255.128.0"
2886 },
2887 {
2888 "space": "dhcp4",
2889 "name": "routers",
2890 "code": 3,
2891 "data": "10.80.128.1"
2892 },
2893 {
2894 "space": "dhcp4",
2895 "name": "domain-name",
2896 "code": 15,
2897 "data": "mgmt.esams.wmnet"
2898 }
2899 ]
2900 },
2901 /// End file /etc/dhcp/automation/proxies/mgmt-esams.conf
2902 {
2903 "id": 89,
2904 "subnet": "10.132.128.0/17",
2905 "option-data": [
2906 {
2907 "space": "dhcp4",
2908 "name": "subnet-mask",
2909 "code": 1,
2910 "data": "255.255.128.0"
2911 },
2912 {
2913 "space": "dhcp4",
2914 "name": "routers",
2915 "code": 3,
2916 "data": "10.132.128.1"
2917 },
2918 {
2919 "space": "dhcp4",
2920 "name": "domain-name",
2921 "code": 15,
2922 "data": "mgmt.eqsin.wmnet"
2923 }
2924 ]
2925 },
2926 /// End file /etc/dhcp/automation/proxies/mgmt-eqsin.conf
2927 {
2928 "id": 90,
2929 "subnet": "10.136.128.0/17",
2930 "option-data": [
2931 {
2932 "space": "dhcp4",
2933 "name": "subnet-mask",
2934 "code": 1,
2935 "data": "255.255.128.0"
2936 },
2937 {
2938 "space": "dhcp4",
2939 "name": "routers",
2940 "code": 3,
2941 "data": "10.136.128.1"
2942 },
2943 {
2944 "space": "dhcp4",
2945 "name": "domain-name",
2946 "code": 15,
2947 "data": "mgmt.drmrs.wmnet"
2948 }
2949 ]
2950 }
2951 ],
2952 "client-classes": [
2953 # This is an automation include proxy.
2954 /// End file /etc/dhcp/automation/proxies/ttyS0-115200.conf
2955 #
2956 # ZTP classes
2957 #
2958 {
2959 "name": "juniper",
2960// /// match if (substring(lowercase(option dhcp.vendor-class-identifier), 0, 7)) = 'juniper'
2961// "match-if": {
2962// "equal": {
2963// "left": {
2964// "substring": {
2965// "expression": {
2966// "lowercase": {
2967// "option": {
2968// "universe": "dhcp",
2969// "name": "vendor-class-identifier",
2970// "code": 60
2971// }
2972// }
2973// },
2974// "offset": 0,
2975// "length": 7
2976// }
2977// },
2978// "right": "juniper"
2979// }
2980// },
2981 "option-def": [
2982 {
2983 "name": "vendor-encapsulated-options",
2984 "code": 43,
2985 "type": "empty",
2986 "encapsulate": "juniper"
2987 }
2988 ],
2989 "option-data": [
2990 {
2991 "name": "vendor-encapsulated-options",
2992 "code": 43
2993 },
2994 {
2995 "space": "dhcp4",
2996 "name": "tftp-server-name",
2997 "code": 66,
2998 "data": "208.80.154.30"
2999 },
3000 {
3001 "space": "juniper",
3002 "name": "transfer-mode",
3003 "code": 3,
3004 "data": "http"
3005 },
3006 {
3007 "space": "juniper",
3008 "name": "http-port",
3009 "code": 5,
3010 "data": "8080"
3011 },
3012 {
3013 "space": "juniper",
3014 "name": "image-file-name",
3015 "code": 0,
3016 "data": "junos/qfx5120.tgz"
3017 },
3018 {
3019 "space": "juniper",
3020 "name": "config-file-name",
3021 "code": 1,
3022 "data": "junos/ztp-juniper.sh"
3023 }
3024 ]
3025 }
3026 ]
3027 }
3028}

Some parts got converted but commented out, for example:

  • /// match if (substring(lowercase(option dhcp.vendor-class-identifier), 0, 7)) = 'juniper' (and below)
  • # RFC 4578, used mainly to detect UEFI vs. BIOS
  • /// Please use the KEA_LOGGER_DESTINATION environment variable instead

To be investigated but doesn't seem too complex to fix. If true the main part would be updating automation (cookbook) and Puppet.

Event Timeline

ayounsi created this task.
jhathaway renamed this task from Upgrade from ISC-DHCP to KEA-DHCP to Upgrade from ISC-DHCP Server to KEA-DHCP Server.Nov 20 2023, 3:05 PM

Haven't made a lot of progress on this, unfortunately. Scheduled for April.

In the meantime, Arzhel has been in contact with upstream for Option 97 support: https://gitlab.isc.org/isc-projects/kea/-/issues/3218

@ayounsi and I have discussed my first findings, and we thought it made sense to share them here.

I stumbled upon https://github.com/davejohncole/kea_python/. As far as I understand, we can install Python hooks that can parse DHCPDISCOVER messages, look up properties in NetBox (our DCIM), and then construct DHCPOFFER messages based on information in NetBox (such as the desired IP address, subnet mask, and list of nameservers). One of the advantages is that no master data from NetBox - the single source of truth - has to be copied temporarily. Similar to ISC, Kea requires the 'automation include proxy' trickery to add, change, or delete file inclusions in kea-dhcp4.conf (there's no such thing as: include conf.d/*.conf, in either dhcpd or Kea, that will re-read all files upon reload - poor design choice, in my opinion). Meta has been using Kea to dynamically craft responses beased on their DCIM: https://engineering.fb.com/2015/07/21/core-infra/using-isc-kea-dhcp-in-our-data-centers/.

Querying NetBox upon receival of a DHCPDISCOVER is a neat solution, because it removes the need for the automation include proxy, and because it means we do not have to sync config from Spicerack to Kea. Furthermore, it seems the kea_python software can parse and send raw DHCP messages, allowing us to parse and insert options 82 and 97 as we wish, regardless of Kea support. A major downside is the initial development time required, complexity of the software (mangling raw network packets brings us in the territory of eBPF programs and PyBal, both rather scary-looking to SREs without networking background), and Iatency and load introduced by the API calls to NetBox. Finally, it is up to Spicerack to sync the name of the desired OS to the DHCP server, otherwise the to-be-reimaged server does not get the right TFTP boot image. However, this information needs to be stored somewhere else; for instance, NetBox could be used for this. (@Volans, you may have an opinion on storing the desired distro name in a NetBox field - let us know!)

After writing this, I realised Arzhel has actually proposed this before: see T269855. I suggest I'll spend a bit of time on PoC'ing the viability of kea_python for parsing DHCPDISCOVER messages, and crafting DHCPOFFER ones.

Thanks for the summary, well outlined. I've spoken a bit with Arzhel and I think that the general idea of using Netbox data in a more streamlined way for the DHCP is sound. There are some comments/concerns/caveats that I would like to highlight, but nothing is a hard blocker:

  1. The current setup that by default doesn't offer an IP to DHCP requests is by design, in response to data loss on servers that rebooted into PXE by error (the force PXE bit didn't get cleared by the BIOS or similar), see T251416 for context. This is easily fixable having a Netbox field that is empty by default and the reimage/dhcp cookbooks will set it to the PXE image to be installed next and will reset it after the DHCP step is done. The automation should surely not give PXE fields if that field is not set, probably not even an IP for safety reasons (to be discussed).
  2. The kea_python hook bindings would need to be packaged for Debian as they don't seem to be available now.
  3. We might need to have an easy way to inject manual data into the hook in case either Netbox is down or there is a special corner case no covered by the automation. This also is easily fixable (see 4).
  4. To add a bit more security, simplify eventual caching (see 5) and allow manual injection of data (see 3) it might be wise to have a proxy layer between the KEA hooks and Netbox. A simple web service could handle all this.
  5. We'd need to investigate the rate of queries to the Netbox APIs to prevent DoSing it, we could evaluate caching at KEA level or at the proxy level.
  6. We need to ensure that the hook will be able to distinguish the type of request only from the DHCP data, while now that information is injected from the cookbook. So for example for VMs we need to do MAC matching but option 82 will also be set in the request packet. We have option 82, option 97, MAC and host-name depending on what is requesting them. MAC should probably match only ganeti MACs and host-name should be the last one. But we need to outline the logic to be sure the hook can distinguish them all.
  7. The proxy will probably have different endpoints for each DHCP matching so to gather different data from Netbox. As for Ganeti VMs we'll need to find a way to inject the MAC address, either in Netbox or directly into the proxy.

As data point Ganeti's iPXE send 4 DHCP requests, doubling the timeout between each: 1s, 2s, 4s.

12:34:21.812153 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:22.831693 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:24.863614 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:28.928072 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414

Thank you for your reply! My comments:

[...]

  1. The current setup that by default doesn't offer an IP to DHCP requests is by design, in response to data loss on servers that rebooted into PXE by error (the force PXE bit didn't get cleared by the BIOS or similar), see T251416 for context. This is easily fixable having a Netbox field that is empty by default and the reimage/dhcp cookbooks will set it to the PXE image to be installed next and will reset it after the DHCP step is done. The automation should surely not give PXE fields if that field is not set, probably not even an IP for safety reasons (to be discussed).

As I understand it, no server in production VLANs (that is: starting with {analytics,private,public} - excluding frack infrastructure?) should rely on DHCP for any purpose other than reimaging, because the IPv4 address will be set statically in d-i. For that reason, I can see why we would like to refuse DHCP requests if no syslinux path is provided by NetBox. I wouldn't classify it as a security measure against malevolent administrators, but rather as a failsafe to mitigate the impact of operator error.

Some Juniper equipment relies on DHCP for ZTP as well, and maybe there are other uses of DHCP. Any idea if anything else relies on DHCP too?

  1. The kea_python hook bindings would need to be packaged for Debian as they don't seem to be available now.

Agreed. I am not familiar with Debian packaging, but I do not see major issues.

  1. We might need to have an easy way to inject manual data into the hook in case either Netbox is down or there is a special corner case no covered by the automation. This also is easily fixable (see 4).

Wouldn't most reimages fail anyways if NetBox was down? Regarding the special corner case: that can be either handled by the proxy layer, or by manually adding configuring to kea-dhcp4.conf. To be discussed, I guess.

  1. To add a bit more security, simplify eventual caching (see 5) and allow manual injection of data (see 3) it might be wise to have a proxy layer between the KEA hooks and Netbox. A simple web service could handle all this.

Indeed. In the case of a delayed API call, you want caching too, to avoid hammering Netbox with API calls that take longer than the DHCP timeout applicable to the nth request for an IP address and TFTP settings (see the exponential backoffs in my reply to Arzhel's comment).

I have been told there's already a simple web service to expose some of the NetBox data (GitHub link). I am not sure what kind of web server is serving this Flask application, but I feel we can build a simple middleware to serve the information required in Kea. Said middleware can do the caching, and can have a read-only NetBox token.

  1. We'd need to investigate the rate of queries to the Netbox APIs to prevent DoSing it, we could evaluate caching at KEA level or at the proxy level.

Unfortunately, libdhcp_host_cache.so requires a subscription, and I do not think it is useful in Kea hooks. If we were to put a proxy between NetBox and Kea, implementing caching in that middleware layer should be doable.

  1. We need to ensure that the hook will be able to distinguish the type of request only from the DHCP data, while now that information is injected from the cookbook. So for example for VMs we need to do MAC matching but option 82 will also be set in the request packet. We have option 82, option 97, MAC and host-name depending on what is requesting them. MAC should probably match only ganeti MACs and host-name should be the last one. But we need to outline the logic to be sure the hook can distinguish them all.

Seems we need to define the order of evaluation. For instance, we can go with:

  1. Option 97
  2. Option 82
  3. MAC address

Did I miss anything?

  1. The proxy will probably have different endpoints for each DHCP matching so to gather different data from Netbox. As for Ganeti VMs we'll need to find a way to inject the MAC address, either in Netbox or directly into the proxy.

How is this currently handled for VMs? Does the DHCP server match on the NIC's MAC address, or does it match on VM hostname? It may be possible to inject custom tags via Ganeti/iPXE/QEMU, if we cannot match on MAC address.

As data point Ganeti's iPXE send 4 DHCP requests, doubling the timeout between each: 1s, 2s, 4s.

12:34:21.812153 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:22.831693 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:24.863614 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414
12:34:28.928072 IP ganeti2033.codfw.wmnet.bootps > install2004.wikimedia.org.bootps: BOOTP/DHCP, Request from aa:00:00:7e:e0:91 (oui Unknown), length 414

Yep, seems to be compliant with the exponential backoff in DHCP retries (section 4.1 in RFC 2131).

Some Juniper equipment relies on DHCP for ZTP as well, and maybe there are other uses of DHCP. Any idea if anything else relies on DHCP too?

Yes, pretty much anything that needs an IP at provisioning time. I think there were also some old corner cases that should be gone by now.
The main use cases are:

  • server's BMCs proxied from the management network to setup the management interface (NAME.mgmt.DC.wmnet).
  • server's during reimages or any other related boot from a network image usages
  • network devices at provision time

Wouldn't most reimages fail anyways if NetBox was down?

No, not really, they will only fail to update Netbox at the end with their interfaces.

I have been told there's already a simple web service to expose some of the NetBox data (GitHub link). I am not sure what kind of web server is serving this Flask application, but I feel we can build a simple middleware to serve the information required in Kea. Said middleware can do the caching, and can have a read-only NetBox token.

yes, that's an option. It currently uses a RW token to be able to run the scripts but could be easily modified to use different tokens based on the different actions.

Seems we need to define the order of evaluation. For instance, we can go with:

Option 97
Option 82
MAC address

Did I miss anything?

The host-name field matching, that should go last. And we need to ensure the way we match option 97 (not yet implemented) doesn't conflict with any other. Also MAC address must match only Ganeti MAC addresses or it will prevent host-name to match.

You can see the current usages in Spicerack's DHCP module, checking the classes that inherit from DHCPConfiguration.

How is this currently handled for VMs? Does the DHCP server match on the NIC's MAC address, or does it match on VM hostname? It may be possible to inject custom tags via Ganeti/iPXE/QEMU, if we cannot match on MAC address.

We match on MAC, the reimage cookbook gets the MAC from the Ganeti APIs and pass it to the DHCP snippet, see here.