0:00–0:30
Lecture
0:30–1:50
Lab 4A
1:50–2:00
Debrief
0:00 – 0:30Lecture · 30 min

Why split-horizon DNS exists and how BIND9 views implement it

Part 1 — The split-horizon problem (8 min)

Part 2 — BIND9 views (12 min)

Part 3 — Zone file differences (10 min)

0:30 – 1:50Lab 4A · 80 min

Lab 4A — Migrate yourname.net into BIND9 views with separate internal/external zone files

Part 1 — Backup existing DNS configuration (10 min)

Part 2 — Define the internal-nets ACL (10 min)

Part 3 — Restructure named.conf.local with view blocks (25 min)

Part 4 — Create internal and external zone files (35 min)

Lab 4A complete when: named-checkconf passes. named-checkzone passes for all three zone files. BIND9 restarts cleanly. Journal shows both internal and external zones loaded for yourname.net.
1:50 – 2:00Debrief · 10 min

Learning outcomes — by end of Day 1, students can…

Explain split-horizon DNSDescribe the problem it solves and draw the network scenario that makes it necessary
Define a named ACLWrite an acl block in named.conf.options and reference it by name in a view's match-clients directive
Write view blocks in named.conf.localStructure internal and external views with correct match-clients, recursion, and zone declarations
Create separate zone files per viewMaintain internal (192.168.x.x) and external (172.17.x.x) versions of the same zone with appropriate records in each

Common issues and fixes

IssueLikely causeFix
named-checkconf: "view 'internal': zone already in another view"Old zone declarations still exist outside the view blocks — they weren't removed when the views were addedEdit named.conf.local and ensure there are no zone declarations outside the view blocks. All zones must be inside a view once views are used
BIND9 fails to start: "not found" for zone fileZone file path in the view declaration doesn't match the actual file path/nameCheck paths carefully — the file names must include .internal or .external suffix. Verify with: ls /etc/bind/db.*
named-checkconf passes but both views return the same responseBoth zone files have the same records (internal file not updated)Verify the external zone file has the external IP (172.17.x.x) for s1, not the internal IP
Reverse zone breaks after migration to viewsReverse zone not included inside the internal view blockThe reverse zone declaration must be inside one of the view blocks. It typically belongs in the internal view only, since external clients don't need PTR lookups for internal addresses
← Week 4 Overview Lab 4A Handout Day 2 →