DHCP Troubleshooting trên Cisco: Khi Client Không Nhận Được IP, Đừng Vội Đổ Lỗi Cho DHCP!
Chỉ một lệnh show ip sockets có thể cứu bạn hàng giờ debug…
DHCP là một trong những dịch vụ tưởng đơn giản nhưng lại gây ra rất nhiều sự cố khó chịu trong thực tế vận hành mạng. Client không nhận được IP, DHCP relay không hoạt động, server gửi Offer nhưng không bao giờ thấy ACK quay về… Đây là các lỗi mà kỹ sư CCNA, CCNP hay cả CCIE đều từng gặp.
Trong bài này chúng ta đi qua hai tình huống troubleshoot DHCP rất điển hình: DHCP Service bị lỗi trên router server và DHCP Relay (ip helper-address) hoạt động không đầy đủ do lỗi định tuyến. Quan trọng hơn, ta không chỉ xem cấu hình mà đi theo tư duy troubleshooting từng bước như khi xử lý sự cố thật. fileciteturn0file0
Phần 1. Troubleshooting DHCP Service
Topology ban đầu
Mô hình rất đơn giản:
Nhưng client không lấy được địa chỉ IP.
Câu hỏi đầu tiên không phải “DHCP pool có đúng không?” mà phải kiểm tra Layer 1 đến Layer 3 trước. Bước 1: Kiểm tra interface
Trên client:
show ip interface brief
Kết quả:
FastEthernet0/0 unassigned YES DHCP up up
Interface up/up và đã cấu hình DHCP.
Kiểm tra phía server:
show ip interface brief
FastEthernet0/0 192.168.12.2 YES manual up up
Server cũng hoạt động bình thường.
Bước 2: Xác minh client có gửi DHCP Discover không
Bật debug:
debug dhcp detail
Thấy:
DHCP: Discover attempt #1
Lease server: 0.0.0.0 state Selecting
Điều này chứng minh:
Nếu không thấy Discover, cần kiểm tra:
Đây là chỗ nhiều người bỏ sót.
Bước 3: Kiểm tra DHCP Pool
show ip dhcp pool
Output:
Pool MYPOOL
Subnet 192.168.12.0/24
Total addresses 254
Leased addresses 0
Pool tồn tại và đúng subnet.
Tới đây nhiều người nghĩ DHCP phải hoạt động.
Nhưng chưa chắc.
Bước 4: Kiểm tra DHCP Server Statistics
show ip dhcp server statistics
Không thấy:
Tức DHCP server không xử lý packet nào.
Vì sao?
Bước 5: Dùng lệnh ít người nhớ đến — show ip sockets
show ip sockets
Không thấy UDP port 67.
Đây chính là đầu mối.
DHCP service chưa chạy.
Bật dịch vụ:
service dhcp
Kiểm tra lại:
show ip sockets
Giờ thấy:
UDP ... 192.168.12.2 67
Router đang listen cổng UDP 67.
Ngay sau đó client nhận IP:
DHCP-6-ADDRESS_ASSIGN:
192.168.12.1 assigned
Root Cause
Không phải:
Mà đơn giản:
DHCP service bị disable.
Bài học rút ra
Nếu mọi thứ có vẻ đúng nhưng DHCP vẫn chết:
Luôn kiểm tra:
show ip sockets
show ip dhcp server statistics
Đây là hai lệnh troubleshoot rất mạnh nhưng ít được dùng.
Phần 2. Troubleshooting DHCP Relay
Đây mới là chỗ nhiều kỹ sư dễ vấp. Topology
Ba router:
Client --- Relay --- Server
Relay đã có:
ip helper-address x.x.x.x
Nhưng client vẫn không có IP.
Bước 1: Kiểm tra Discover tới server không
Trên DHCP server:
show ip dhcp server statistics
Thấy:
DHCPDISCOVER 12
DHCPOFFER 12
Tin rất tốt:
Nhưng:
Không có DHCPACK.
Rõ ràng vấn đề nằm sau giai đoạn Offer.
Bước 2: Debug DHCP Packet
debug ip dhcp server packet
Thấy:
Sending DHCPOFFER to client
through relay 192.168.23.2
Server cố trả lời client thông qua relay.
Nhưng có tới được không?
Bước 3: Kiểm tra Route Return Path
show ip route 192.168.12.0
Kết quả:
% Network not in table
Đây chính là lỗi.
Server không biết route quay về mạng client.
Một ví dụ kinh điển về asymmetric reachability.
Nhiều người nghĩ ip helper-address là đủ.
Sai.
Relay chỉ forward broadcast Discover.
Server vẫn cần route unicast quay lại subnet client.
Bước 4: Chứng minh bằng debug IP packet
debug ip packet
Xuất hiện:
192.168.12.2 unreachable
unroutable
Không thể rõ hơn.
Bước 5: Sửa bằng static route
ip route 192.168.12.0 255.255.255.0 192.168.23.2
Ngay sau đó:
DHCPDISCOVER
DHCPOFFER
DHCPREQUEST
DHCPACK
Hoàn tất 4 bước DORA:
Client lấy IP thành công.
Tư duy quan trọng về DHCP Relay
Nhiều người nhớ cấu hình:
ip helper-address
Nhưng quên điều kiện sống còn:
DHCP server phải có route tới subnet client.
Không có return path:
Đây là lỗi cực phổ biến ngoài production.
Checklist Troubleshooting DHCP Thực Chiến
Khi DHCP lỗi, đi theo trình tự này: Nếu là DHCP Server issue:
Kiểm tra:
show ip interface brief
show ip dhcp pool
show ip dhcp binding
show ip dhcp server statistics
show ip sockets
Đừng quên:
service dhcp
Nếu là DHCP Relay issue:
Kiểm tra:
show run interface
show ip interface
show ip dhcp server statistics
show ip route
Debug:
debug ip dhcp server packet
debug ip packet
Xác minh:
Bonus thực chiến (CCNP/CCIE)
Trong enterprise thật, DHCP failure còn có thể do:
Đây là những lỗi rất hay xuất hiện trong đề lab CCIE và production.
Lesson Learned
Hai bài học cực đắt giá:
Nếu mọi thứ có vẻ đúng, hãy kiểm tra DHCP service có thực sự đang listen trên UDP 67 không.
và
Nếu dùng ip helper-address, DHCP server phải biết đường quay về subnet client.
Chỉ cần nhớ hai điều này, bạn tránh được rất nhiều giờ troubleshoot vô ích.
Chỉ một lệnh show ip sockets có thể cứu bạn hàng giờ debug…
DHCP là một trong những dịch vụ tưởng đơn giản nhưng lại gây ra rất nhiều sự cố khó chịu trong thực tế vận hành mạng. Client không nhận được IP, DHCP relay không hoạt động, server gửi Offer nhưng không bao giờ thấy ACK quay về… Đây là các lỗi mà kỹ sư CCNA, CCNP hay cả CCIE đều từng gặp.
Trong bài này chúng ta đi qua hai tình huống troubleshoot DHCP rất điển hình: DHCP Service bị lỗi trên router server và DHCP Relay (ip helper-address) hoạt động không đầy đủ do lỗi định tuyến. Quan trọng hơn, ta không chỉ xem cấu hình mà đi theo tư duy troubleshooting từng bước như khi xử lý sự cố thật. fileciteturn0file0
Phần 1. Troubleshooting DHCP Service
Topology ban đầu
Mô hình rất đơn giản:
- DHCP Client: 192.168.12.0/24
- DHCP Server: Router địa chỉ 192.168.12.2
- Client kết nối Fa0/0 tới Server Fa0/0
Nhưng client không lấy được địa chỉ IP.
Câu hỏi đầu tiên không phải “DHCP pool có đúng không?” mà phải kiểm tra Layer 1 đến Layer 3 trước. Bước 1: Kiểm tra interface
Trên client:
show ip interface brief
Kết quả:
FastEthernet0/0 unassigned YES DHCP up up
Interface up/up và đã cấu hình DHCP.
Kiểm tra phía server:
show ip interface brief
FastEthernet0/0 192.168.12.2 YES manual up up
Server cũng hoạt động bình thường.
Bước 2: Xác minh client có gửi DHCP Discover không
Bật debug:
debug dhcp detail
Thấy:
DHCP: Discover attempt #1
Lease server: 0.0.0.0 state Selecting
Điều này chứng minh:
- Client đang gửi DHCP Discover
- Layer 2 không phải vấn đề
- Broadcast DHCP đang rời khỏi client
Nếu không thấy Discover, cần kiểm tra:
- VLAN sai
- Trunk mismatch
- STP blocking
- Port security chặn lưu lượng
Đây là chỗ nhiều người bỏ sót.
Bước 3: Kiểm tra DHCP Pool
show ip dhcp pool
Output:
Pool MYPOOL
Subnet 192.168.12.0/24
Total addresses 254
Leased addresses 0
Pool tồn tại và đúng subnet.
Tới đây nhiều người nghĩ DHCP phải hoạt động.
Nhưng chưa chắc.
Bước 4: Kiểm tra DHCP Server Statistics
show ip dhcp server statistics
Không thấy:
- DHCPDISCOVER
- DHCPOFFER
- DHCPACK
Tức DHCP server không xử lý packet nào.
Vì sao?
Bước 5: Dùng lệnh ít người nhớ đến — show ip sockets
show ip sockets
Không thấy UDP port 67.
Đây chính là đầu mối.
DHCP service chưa chạy.
Bật dịch vụ:
service dhcp
Kiểm tra lại:
show ip sockets
Giờ thấy:
UDP ... 192.168.12.2 67
Router đang listen cổng UDP 67.
Ngay sau đó client nhận IP:
DHCP-6-ADDRESS_ASSIGN:
192.168.12.1 assigned
Root Cause
Không phải:
- Interface lỗi
- Pool lỗi
- Client lỗi
Mà đơn giản:
DHCP service bị disable.
Bài học rút ra
Nếu mọi thứ có vẻ đúng nhưng DHCP vẫn chết:
Luôn kiểm tra:
show ip sockets
show ip dhcp server statistics
Đây là hai lệnh troubleshoot rất mạnh nhưng ít được dùng.
Phần 2. Troubleshooting DHCP Relay
Đây mới là chỗ nhiều kỹ sư dễ vấp. Topology
Ba router:
Client --- Relay --- Server
- Client subnet: 192.168.12.0/24
- Relay–Server subnet: 192.168.23.0/24
Relay đã có:
ip helper-address x.x.x.x
Nhưng client vẫn không có IP.
Bước 1: Kiểm tra Discover tới server không
Trên DHCP server:
show ip dhcp server statistics
Thấy:
DHCPDISCOVER 12
DHCPOFFER 12
Tin rất tốt:
- Relay hoạt động
- Server nhận Discover
- Server gửi Offer
Nhưng:
Không có DHCPACK.
Rõ ràng vấn đề nằm sau giai đoạn Offer.
Bước 2: Debug DHCP Packet
debug ip dhcp server packet
Thấy:
Sending DHCPOFFER to client
through relay 192.168.23.2
Server cố trả lời client thông qua relay.
Nhưng có tới được không?
Bước 3: Kiểm tra Route Return Path
show ip route 192.168.12.0
Kết quả:
% Network not in table
Đây chính là lỗi.
Server không biết route quay về mạng client.
Một ví dụ kinh điển về asymmetric reachability.
Nhiều người nghĩ ip helper-address là đủ.
Sai.
Relay chỉ forward broadcast Discover.
Server vẫn cần route unicast quay lại subnet client.
Bước 4: Chứng minh bằng debug IP packet
debug ip packet
Xuất hiện:
192.168.12.2 unreachable
unroutable
Không thể rõ hơn.
Bước 5: Sửa bằng static route
ip route 192.168.12.0 255.255.255.0 192.168.23.2
Ngay sau đó:
DHCPDISCOVER
DHCPOFFER
DHCPREQUEST
DHCPACK
Hoàn tất 4 bước DORA:
- Discover
- Offer
- Request
- Acknowledge
Client lấy IP thành công.
Tư duy quan trọng về DHCP Relay
Nhiều người nhớ cấu hình:
ip helper-address
Nhưng quên điều kiện sống còn:
DHCP server phải có route tới subnet client.
Không có return path:
- Offer có thể gửi ra
- ACK không bao giờ quay về đúng nơi
- Client sẽ timeout
Đây là lỗi cực phổ biến ngoài production.
Checklist Troubleshooting DHCP Thực Chiến
Khi DHCP lỗi, đi theo trình tự này: Nếu là DHCP Server issue:
Kiểm tra:
show ip interface brief
show ip dhcp pool
show ip dhcp binding
show ip dhcp server statistics
show ip sockets
Đừng quên:
service dhcp
Nếu là DHCP Relay issue:
Kiểm tra:
show run interface
show ip interface
show ip dhcp server statistics
show ip route
Debug:
debug ip dhcp server packet
debug ip packet
Xác minh:
- ip helper-address đúng chưa
- Return route có chưa
- ACL có chặn UDP 67/68 không
- Firewall có drop broadcast relay không
Bonus thực chiến (CCNP/CCIE)
Trong enterprise thật, DHCP failure còn có thể do:
- DHCP Snooping trust sai
- Option 82 relay insertion lỗi
- HSRP virtual IP dùng sai làm helper trỏ sai next-hop
- VRF-aware DHCP relay cấu hình thiếu ip helper-address vrf
- ACL chặn BOOTP (UDP 67/68)
- CoPP chặn DHCP broadcast rate cao
Đây là những lỗi rất hay xuất hiện trong đề lab CCIE và production.
Lesson Learned
Hai bài học cực đắt giá:
Nếu mọi thứ có vẻ đúng, hãy kiểm tra DHCP service có thực sự đang listen trên UDP 67 không.
và
Nếu dùng ip helper-address, DHCP server phải biết đường quay về subnet client.
Chỉ cần nhớ hai điều này, bạn tránh được rất nhiều giờ troubleshoot vô ích.