Bài 39b: Thực hành DHCP — Router làm DHCP server, DHCP relay và DHCP client
Sơ đồ lab Bài 39b · ⬇️ Tải sơ đồ (SVG) · 🔍 Mở cỡ lớn
💡 Liên hệ thực tế
Công ty ABC có hơn trăm máy, không ai muốn ngồi gõ IP tay cho từng máy. Anh Nam (VNExperts) dùng cả ba vai trò DHCP mà một kỹ sư mạng phải biết:
- DHCP server trên router — cấp IP cho phòng Kinh doanh, nhanh gọn, không cần thêm máy chủ.
- DHCP relay — phòng Kế toán xin IP từ máy chủ DHCP tập trung SRV1 nằm ở VLAN khác.
- DHCP client — cổng WAN của router nhận IP từ nhà mạng.
Quy tắc ghi nhớ: gói DHCP Discover là broadcast nên không qua được router — muốn xin IP từ server ở mạng khác, phải đặt ip helper-address trên gateway của mạng có client.
🎯 Mục tiêu bài lab
- Cấu hình router Cisco làm DHCP server:
excluded-address,pool,network,default-router,dns-server. - Cấu hình máy chủ DHCP tập trung và DHCP relay bằng
ip helper-address. - Cấu hình interface router nhận IP bằng DHCP (
ip address dhcp). - Kiểm tra bằng
show ip dhcp binding,show ip dhcp pool,ipconfig /all; giải thích được vì sao binding của PC2 không nằm trên R1.
📋 Bảng VLAN, địa chỉ IP và đấu nối
| VLAN | Tên | Dải địa chỉ | Ai cấp IP? |
|---|---|---|---|
| 10 | KinhDoanh | 192.168.10.0/24 | R1 (DHCP server trên router) |
| 20 | KeToan | 192.168.20.0/24 | SRV1, qua relay trên R1 |
| 100 | Server | 192.168.100.0/24 | IP tĩnh |
| — | WAN | 203.0.113.0/24 | R-ISP cấp cho R1 G0/1 |
| Thiết bị | Interface | Địa chỉ IP / Prefix | Gateway |
|---|---|---|---|
| R1 | G0/0.10 | 192.168.10.1/24 | — |
| G0/0.20 | 192.168.20.1/24 | — | |
| G0/0.100 | 192.168.100.1/24 | — | |
| G0/1 | Nhận qua DHCP từ R-ISP | — | |
| R-ISP | G0/0 | 203.0.113.1/24 | — |
| SRV1 | NIC | 192.168.100.10/24 | 192.168.100.1 |
| PC1 | NIC (VLAN 10) | DHCP | DHCP |
| PC2 | NIC (VLAN 20) | DHCP | DHCP |
| Từ | Cổng | Đến | Cổng | Ghi chú |
|---|---|---|---|---|
| R1 | G0/1 | R-ISP | G0/0 | Copper Cross-Over |
| R1 | G0/0 | SW1 | Gi0/1 | Trunk VLAN 10, 20, 100 |
| SW1 | Fa0/1 | PC1 | FastEthernet0 | Access VLAN 10 |
| SW1 | Fa0/2 | PC2 | FastEthernet0 | Access VLAN 20 |
| SW1 | Fa0/10 | SRV1 | FastEthernet0 | Access VLAN 100 |
⚙️ Các bước thực hiện
⚙️ Bước 1 — Dựng sơ đồ và dán cấu hình nền
Kéo ra 2 router 2911 (R1, R-ISP), 1 switch 2960-24TT, 2 PC và 1 Server-PT (SRV1). Nối cáp theo bảng. Phần VLAN và Router-on-a-Stick đã luyện ở Bài 24b, 27b nên cho sẵn:
SW1
hostname SW1
vlan 10
name KinhDoanh
vlan 20
name KeToan
vlan 100
name Server
interface gigabitEthernet 0/1
switchport mode trunk
switchport trunk allowed vlan 10,20,100
interface fastEthernet 0/1
switchport mode access
switchport access vlan 10
spanning-tree portfast
interface fastEthernet 0/2
switchport mode access
switchport access vlan 20
spanning-tree portfast
interface fastEthernet 0/10
switchport mode access
switchport access vlan 100
spanning-tree portfast
end
R1
hostname R1
interface gigabitEthernet 0/0
no shutdown
interface gigabitEthernet 0/0.10
encapsulation dot1Q 10
ip address 192.168.10.1 255.255.255.0
interface gigabitEthernet 0/0.20
encapsulation dot1Q 20
ip address 192.168.20.1 255.255.255.0
interface gigabitEthernet 0/0.100
encapsulation dot1Q 100
ip address 192.168.100.1 255.255.255.0
end
SRV1: Desktop → IP Configuration → Static: 192.168.100.10 / 255.255.255.0, gateway 192.168.100.1, DNS 192.168.100.10.
⚙️ Bước 2 — R1 làm DHCP server cho VLAN 10
R1(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.10
R1(config)# ip dhcp pool KINHDOANH
R1(dhcp-config)# network 192.168.10.0 255.255.255.0
R1(dhcp-config)# default-router 192.168.10.1
R1(dhcp-config)# dns-server 192.168.100.10
R1(dhcp-config)# exit
📎 Giải thích:
•excluded-address: giữ lại .1–.10 cho gateway, máy in, thiết bị cần IP cố định. Nên gõ trước khi tạo pool, để router không kịp cấp nhầm các địa chỉ này.
•network: dải địa chỉ của pool — phải khớp với mạng trên interface gateway (192.168.10.1/24).
•default-routervàdns-server: gateway và DNS mà PC sẽ nhận.
Trên PC1: Desktop → IP Configuration → chọn DHCP. Sau vài giây phải hiện DHCP request successful với IP 192.168.10.11.
⚙️ Bước 3 — Máy chủ DHCP tập trung SRV1 cho VLAN 20
- Bấm SRV1 → tab Services → DHCP → chọn On.
- Giữ nguyên serverPool có sẵn. Điền pool mới:
- Pool Name:
KETOAN - Default Gateway:
192.168.20.1 - DNS Server:
192.168.100.10 - Start IP Address:
192.168.20.11 - Subnet Mask:
255.255.255.0 - Maximum Number of Users:
50
- Pool Name:
- Bấm Add — pool KETOAN xuất hiện trong bảng bên dưới.
⚙️ Bước 4 — Bật DHCP relay trên gateway VLAN 20
R1(config)# interface gigabitEthernet 0/0.20
R1(config-subif)# ip helper-address 192.168.100.10
R1(config-subif)# end
Trên PC2: chọn DHCP → phải nhận IP 192.168.20.11, gateway 192.168.20.1.
📎 Relay hoạt động thế nào? PC2 gửi Discover dạng broadcast. G0/0.20 nhận được, đổi thành gói unicast gửi tới 192.168.100.10, và ghi địa chỉ của chính nó (192.168.20.1, gọi là giaddr) vào gói. SRV1 nhìn giaddr để chọn đúng pool KETOAN, rồi gửi trả lời về 192.168.20.1 để R1 chuyển lại cho PC2.
⚠️ Lỗi kinh điển: đặt ip helper-address trên interface nối tới server (G0/0.100). Phải đặt trên interface nhận broadcast của client — tức gateway của VLAN 20.
⚙️ Bước 5 — R1 nhận IP WAN từ nhà mạng (DHCP client)
Dán cấu hình cho R-ISP (đóng vai nhà mạng):
hostname R-ISP
ip dhcp excluded-address 203.0.113.1 203.0.113.9
ip dhcp pool ISP
network 203.0.113.0 255.255.255.0
default-router 203.0.113.1
dns-server 8.8.8.8
interface gigabitEthernet 0/0
ip address 203.0.113.1 255.255.255.0
no shutdown
end
Trên R1:
R1(config)# interface gigabitEthernet 0/1
R1(config-if)# ip address dhcp
R1(config-if)# no shutdown
Sau vài giây, console có thể hiện thông báo dạng %DHCP-6-ADDRESS_ASSIGN: Interface GigabitEthernet0/1 assigned DHCP address 203.0.113.10 …
💾 Bước 6 — Lưu cấu hình
R1# copy running-config startup-config
Làm trên R1, R-ISP, SW1.
🔍 Kiểm tra kết quả
| # | Kiểm tra | Lệnh / thao tác | Kết quả mong đợi |
|---|---|---|---|
| 1 | PC1 nhận IP | PC1 ipconfig /all |
192.168.10.11, gateway .10.1, DHCP Server 192.168.10.1 |
| 2 | PC2 nhận IP qua relay | PC2 ipconfig /all |
192.168.20.11, gateway .20.1, DHCP Server 192.168.100.10 |
| 3 | Binding trên R1 | show ip dhcp binding |
Chỉ có địa chỉ của PC1 (VLAN 10) |
| 4 | Thống kê pool | show ip dhcp pool |
Pool KINHDOANH, 1 địa chỉ đã cấp |
| 5 | R1 nhận IP WAN | show ip interface brief |
G0/1 = 203.0.113.10, cột Method = DHCP |
| 6 | Liên VLAN | PC1 ping 192.168.20.11 |
✅ Thành công |
🔍 Output mẫu trên R1 (địa chỉ MAC của bạn sẽ khác)
R1# show ip dhcp binding
IP address Client-ID/ Lease expiration Type
Hardware address
192.168.10.11 0001.6402.A1B2 -- Automatic
R1# show ip interface brief
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 unassigned YES unset up up
GigabitEthernet0/0.10 192.168.10.1 YES manual up up
GigabitEthernet0/0.20 192.168.20.1 YES manual up up
GigabitEthernet0/0.100 192.168.100.1 YES manual up up
GigabitEthernet0/1 203.0.113.10 YES DHCP up up
GigabitEthernet0/2 unassigned YES unset administratively down down
🔍 Output mẫu trên PC2 (đã rút gọn)
C:\>ipconfig /all
(… rút gọn …)
IPv4 Address....................: 192.168.20.11
Subnet Mask.....................: 255.255.255.0
Default Gateway.................: 192.168.20.1
DHCP Servers....................: 192.168.100.10
📎 Câu hỏi tự kiểm tra: vì sao show ip dhcp binding trên R1 không có địa chỉ của PC2? Vì R1 chỉ chuyển tiếp yêu cầu của PC2; người cấp phát và lưu bảng thuê là SRV1.
🛠️ Lỗi thường gặp & cách xử lý
| Triệu chứng | Nguyên nhân thường gặp | Cách kiểm tra & sửa |
|---|---|---|
| PC nhận địa chỉ 169.254.x.x | Không tới được DHCP server: thiếu helper, VLAN không có trên trunk, dịch vụ DHCP trên SRV1 đang Off | show running-config interface g0/0.20; show interfaces trunk trên SW1; tab Services của SRV1 |
| PC1 nhận IP trùng gateway hoặc thiết bị khác | Thiếu excluded-address, hoặc gõ sau khi đã cấp |
Thêm excluded-address, rồi clear ip dhcp binding * và xin lại IP |
| PC2 vẫn không nhận IP dù helper đúng | SRV1 không có default gateway nên không gửi được trả lời về 192.168.20.1 (khác mạng) | Đặt gateway 192.168.100.1 cho SRV1 |
| PC2 nhận IP sai dải | Start IP của pool KETOAN không thuộc 192.168.20.0/24 | Sửa pool trên SRV1 |
| PC1 không xin được IP | Lệnh network trong pool sai mạng/mask, không khớp với G0/0.10 |
show running-config | section dhcp |
| R1 G0/1 không có IP | R-ISP chưa có pool hoặc interface đang tắt | show ip interface brief trên cả hai router |
🏆 Thử thách mở rộng
- Thêm phòng Kỹ thuật (VLAN 30, 192.168.30.0/24) nhận IP từ SRV1 qua relay. Liệt kê đủ mọi chỗ phải sửa.
- Chuyển luôn VLAN 10 sang lấy IP từ SRV1 để quản lý tập trung. Cần bỏ gì trên R1, thêm gì trên R1 và SRV1?
- Trên R-ISP chạy
show ip dhcp binding. Quan sát cột Client-ID của R1 — nó khác gì so với PC?
Thử thách 3: router gửi kèm client-identifier là một chuỗi dài, khác với PC thường chỉ hiện địa chỉ MAC. Hãy so sánh hai dòng trong output.👉 Gợi ý đáp án
! Thử thách 1
SW1(config)# vlan 30
SW1(config-vlan)# name KyThuat
SW1(config-vlan)# exit
SW1(config)# interface gigabitEthernet 0/1
SW1(config-if)# switchport trunk allowed vlan add 30
R1(config)# interface gigabitEthernet 0/0.30
R1(config-subif)# encapsulation dot1Q 30
R1(config-subif)# ip address 192.168.30.1 255.255.255.0
R1(config-subif)# ip helper-address 192.168.100.10
! SRV1: thêm pool KYTHUAT, gateway 192.168.30.1, start 192.168.30.11
! Thử thách 2
R1(config)# no ip dhcp pool KINHDOANH
R1(config)# interface gigabitEthernet 0/0.10
R1(config-subif)# ip helper-address 192.168.100.10
! SRV1: thêm pool KINHDOANH, gateway 192.168.10.1, start 192.168.10.11
💬 Hỏi & Đáp nhanh
❓ Một interface có thể đặt nhiều ip helper-address không?
✅ Được. Router gửi bản sao yêu cầu tới tất cả các địa chỉ — thường dùng để có hai DHCP server dự phòng cho nhau.
❓ ip helper-address chỉ chuyển tiếp DHCP thôi sao?
⚠️ Không. Mặc định nó chuyển tiếp nhiều loại broadcast UDP, trong đó có DHCP/BOOTP (67, 68), TFTP (69), DNS (53), TACACS (49), Time (37), NetBIOS (137, 138). Có thể tắt từng loại bằng no ip forward-protocol udp. Trong đề CCNA, bạn chủ yếu gặp nó với DHCP.
❓ Muốn đổi thời gian cho thuê IP thì làm sao?
✅ Trong pool dùng lệnh lease, ví dụ lease 7 là 7 ngày. Mặc định trên router Cisco là 1 ngày.
📝 Bài tập đánh giá
Câu 1: DHCP server nằm ở VLAN 100, client nằm ở VLAN 20. Lệnh ip helper-address phải đặt ở đâu?
- A. Trên interface của router nối tới DHCP server
- B. Trên interface của router làm gateway cho VLAN 20
- C. Trên cổng access của switch nối với client
- D. Trên chính DHCP server
Câu 2: PC ở VLAN 20 nhận địa chỉ 169.254.10.5. Router đã có helper-address đúng, SRV1 có pool đúng dải và dịch vụ đang On, nhưng SRV1 chưa khai báo default gateway. Giải thích nào đúng nhất?
- A. Đây là hành vi bình thường khi dùng relay
- B. SRV1 không gửi được gói trả lời về relay agent 192.168.20.1 vì địa chỉ đó nằm ở mạng khác
- C. Pool trên SRV1 sai
- D. VLAN 20 không có trên trunk
👉 Đáp án
- Câu 1: B — Helper đặt trên interface nhận broadcast từ client, trỏ tới IP của DHCP server.
- Câu 2: B — Gói trả lời được gửi unicast tới giaddr 192.168.20.1. Không có gateway, SRV1 không biết đường đi tới mạng 192.168.20.0/24.
💡 Output trong bài là output mẫu trên Packet Tracer, trên máy bạn có thể khác một chút (ví dụ địa chỉ MAC).
📚 Bài thực hành thuộc Khóa học CCNA Online của VNExperts.
🧭 Điều hướng
| ⬅️ Bài trước | 🏠 Mục lục khóa học | Bài kế tiếp ➡️ |
|---|---|---|
| Bài 39: DHCP — cơ chế DORA, cấu hình DHCP server/relay | Mục lục khóa học CCNA | Bài 40: So sánh Layer 2 switching và Layer 3 switching |