手动配置每台终端的 IP 地址在大型网络中既低效又易错。DHCP(动态主机配置协议)让终端开机自动获取 IP、网关、DNS;NAT(网络地址转换)则解决私网 IP 访问公网的问题。本文将两者结合,完成从自动分配到地址转换的完整实验。
一、DHCP 原理与 DORA 流程
DHCP 采用客户端/服务器模式,终端获取 IP 地址需经历四个步骤,称为 DORA 流程:
| 步骤 | 名称 | 方向 | 说明 |
|---|---|---|---|
| D | Discover(发现) | 客户端→服务器(广播) | 终端广播寻找 DHCP 服务器 |
| O | Offer(提供) | 服务器→客户端(单播/广播) | 服务器回应可分配的 IP 地址 |
| R | Request(请求) | 客户端→服务器(广播) | 终端正式请求使用该 IP |
| A | Acknowledge(确认) | 服务器→客户端(单播/广播) | 服务器确认分配,附带网关/DNS/租约 |
租约(Lease):DHCP 分配的 IP 不是永久的,默认租约 1 天。租约过半时终端会自动续租,无需重新走完整 DORA 流程。
二、实验拓扑
┌── PC1 (自动获取)
互联网 ── AR2220 ── SW1 ── PC2 (自动获取)
8.8.8.8 │ GE0/0/0 └── PC3 (自动获取)
200.1.1.1 │ 192.168.10.1
│
└── DHCP服务器 (192.168.10.2,也可由AR2220兼任)
GE0/0/1: 200.1.1.1/24 (公网侧)
需求:
① DHCP: AR2220 充当 DHCP 服务器,为 PC1~PC3 自动分配 192.168.10.x
② SNAT: 内网 PC 访问互联网,源 IP 转为 200.1.1.1
③ DNAT: 外网访问 200.1.1.1:80 → 内网 Web(192.168.10.100:80)
三、DHCP 配置实战
# 开启 DHCP 服务
[AR2220] dhcp enable
# 创建全局地址池
[AR2220] ip pool netlab-pool
[AR2220-ip-pool-netlab-pool] network 192.168.10.0 mask 255.255.255.0
[AR2220-ip-pool-netlab-pool] gateway-list 192.168.10.1
[AR2220-ip-pool-netlab-pool] dns-list 8.8.8.8 114.114.114.114
[AR2220-ip-pool-netlab-pool] lease day 1 hour 0 minute 0
# 排除固定地址(服务器/打印机等保留IP)
[AR2220-ip-pool-netlab-pool] excluded-ip-address 192.168.10.2 192.168.10.10
[AR2220-ip-pool-netlab-pool] excluded-ip-address 192.168.10.100
# 在接口上启用全局地址池分配
[AR2220] interface GigabitEthernet 0/0/0
[AR2220-GE0/0/0] dhcp select global
排除地址的意义:192.168.10.2~10 和 192.168.10.100 是留给服务器和固定设备的,DHCP 不会将这些地址分配给普通终端,避免 IP 冲突。
四、DHCP 验证
# PC1 终端自动获取 IP(VRP模拟终端)
PC1> dhcp enable
PC1> ipconfig
IPv4 Address: 192.168.10.11 ✅ 自动获取成功
Subnet Mask: 255.255.255.0
Gateway: 192.168.10.1
DNS: 8.8.8.8
# 路由器查看地址池状态
[AR2220] display ip pool name netlab-pool
Pool-name : netlab-pool
Pool-No : 0
Lease : 1 Days 0 Hours 0 Minutes
Network : 192.168.10.0 / 255.255.255.0
Gateway : 192.168.10.1
DNS : 8.8.8.8 114.114.114.114
excluded-ip : 192.168.10.2~192.168.10.10
192.168.10.100
IP-in-use : 192.168.10.11 (PC1)
192.168.10.12 (PC2)
192.168.10.13 (PC3)
IP-available : 240 ✅ 剩余可分配数量
五、NAT 配置——SNAT 与 DNAT
DHCP 解决了内网终端的 IP 分配,但私网 IP 无法直接访问互联网,需要 NAT 进行地址转换。
| NAT 类型 | 转换对象 | 应用场景 | 方向 |
|---|---|---|---|
| SNAT(源NAT) | 源IP:私网→公网 | 内网PC访问互联网 | 出方向 |
| DNAT(目的NAT) | 目的IP:公网→私网 | 外网访问内网服务器 | 入方向 |
# === SNAT: 内网PC上网(Easy IP方式) ===
[AR2220] acl 2000
[AR2220-acl-basic-2000] rule permit source 192.168.10.0 0.0.0.255
[AR2220] interface GigabitEthernet 0/0/1
[AR2220-GE0/0/1] nat outbound 2000 # 匹配ACL的流量做Easy IP
# === DNAT: 外网访问内网Web服务器 ===
[AR2220-GE0/0/1] nat server protocol tcp global 200.1.1.1 80 inside 192.168.10.100 80
Easy IP:最简单的 SNAT 方式——直接用接口公网 IP 做转换,无需额外地址池。适合只有一个公网 IP 的场景。
六、NAT 验证
# 内网PC ping 互联网(SNAT验证)
PC1> ping 8.8.8.8
Reply from 8.8.8.8: bytes=32 time=5ms ✅ 通
# 路由器查看NAT转换表
[AR2220] display nat session
ICMP VPN:public --> public
192.168.10.11:1024 --> 200.1.1.1:1024 --> 8.8.8.8:0
✅ 源IP已从192.168.10.11转为200.1.1.1
# 外网访问内网Web(DNAT验证)
外网PC> curl http://200.1.1.1
✅ 返回内网Web服务器页面
# 查看服务器映射表
[AR2220] display nat server
Server: 200.1.1.1:80 → 192.168.10.100:80 (TCP)
✅ 目的IP已从200.1.1.1转为192.168.10.100
七、排错思路
- 终端获取不到 IP? 检查 DHCP 是否 enable、接口是否 dhcp select global、地址池 network 网段是否与接口网段一致。
- 获取到 IP 但无法上网? 检查网关地址是否正确分配、路由器接口是否配置 NAT、ACL 是否匹配内网网段。
- SNAT 后上网不通? 确认 NAT 配置在公网侧接口(出接口),ACL 的 source 匹配内网网段。
- DNAT 访问不了? 检查 nat server 命令的公网/私网 IP 和端口、内网服务器网关是否指向路由器。
- 地址池耗尽? display ip pool 查看 IP-in-use,排查是否有终端长期占用未释放,调整 excluded-ip 范围或缩短租约。
DHCP 与 NAT 的配合:DHCP 分配的网关必须指向 NAT 设备的内网接口 IP,否则终端的流量无法到达 NAT 设备进行地址转换。两者是协作关系,不是替代关系。
八、小结
- DHCP 通过 DORA 四步流程自动分配 IP/网关/DNS,免去手动配置
- 排除地址保留固定 IP 给服务器,避免 IP 冲突
- SNAT 解决"内网访问外网"——Easy IP 最简单,直接用接口公网 IP
- DNAT 解决"外网访问内网"——nat server 映射公网端口到内网服务器
- DHCP 分配的网关必须指向 NAT 设备,两者协作才能实现端到端通信