☰
思科企业网出口实战:DHCP、NAT、ACL协同配置与故障排查
2026/10/14 3:58:25 网站建设 项目流程

1. 企业网出口三件套:为什么DHCP、NAT、ACL总是被放在一起讲

刚入行做网络运维那会儿,我师傅扔给我一台二手思科路由器,说"把这仨配通了,你就算入门了"。当时我还不服气,觉得不就是分个IP、做个地址转换、写个过滤规则吗,能有多难。结果真上手才发现,这三个技术单独拎出来都不复杂,但一旦放在同一台设备、同一个出口链路上协同工作,坑就全冒出来了——地址池和NAT池打架、ACL顺序写反导致全网断、DHCP中继指错接口……这些我都亲身踩过。

所以这篇内容,我想把思科设备上的DHCP、NAT、ACL这三块从原理到配置彻底捋一遍。不是照搬手册那种干巴巴的命令罗列,而是按照一个真实企业网出口的场景,把"为什么这么配""配错了会怎样""怎么排查"讲清楚。适合刚接触思科设备、准备考认证、或者正在搭建中小型企业出口网络的同行参考。哪怕你之前只敲过几条静态路由,跟着思路走也能把整套逻辑理顺。

先说清楚这三个技术各自的定位,不然后面容易混。DHCP解决的是"终端怎么自动拿到IP地址"的问题,属于自动化分配;NAT解决的是"内网私有地址怎么访问公网"的问题,属于地址转换;ACL解决的是"哪些流量能过、哪些不能过"的问题,属于访问控制。三者一个管分配、一个管转换、一个管过滤,恰好覆盖了数据包从内网终端出发到离开出口设备的完整生命周期。这也是为什么几乎所有企业出口配置里,这三者都绑在一起出现。

理解了这个定位,再看它们之间的依赖关系就顺了:终端先通过DHCP拿到地址和网关,数据包到达出口路由器后先被ACL检查(决定放行还是丢弃),放行的流量再做NAT转换(把私网源地址换成公网地址),最后才发往外部网络。顺序错了,比如NAT在ACL之前做,那ACL匹配的就是转换后的地址,规则就全乱了。这个执行顺序是后面所有配置的逻辑基础,务必先记牢。

2. 三个技术的核心原理拆解与选型考量

2.1 DHCP的工作机制与地址池设计逻辑

DHCP本质是一个"租借"协议。终端开机后广播一个发现报文,DHCP服务器回应一个提供报文,终端再发请求报文确认,服务器最后发确认报文完成绑定。整个过程四个报文,业内叫DORA(Discover、Offer、Request、Acknowledge)。听起来简单,但真正设计地址池的时候,要考虑的东西不少。

首先是地址池范围。假设一个办公网段是192.168.10.0/24,可用地址254个。你不能把整个段都丢给DHCP,因为网关、服务器、打印机、AP这些设备通常要固定IP。我的习惯是预留前50个地址(192.168.10.1到192.168.10.50)给静态设备,DHCP池从51开始到250,留几个做扩展。这样后期加设备不会和动态分配冲突。

其次是租期。租期太短,终端频繁续租,增加广播流量;租期太长,地址回收慢,IP不够用。办公网一般设8小时到1天比较合适,会议室、访客网络这种流动性大的可以设2到4小时。我见过有人图省事设成无限期,结果IP池很快耗尽,新来的设备拿不到地址,排查半天才发现是租期问题。

再就是排除地址。思科设备上用ip dhcp excluded-address命令,把不想动态分配的地址段排除掉。这个和上面说的预留是一个意思,但配置层面必须显式写出来,否则DHCP服务器不知道你要留哪些。

注意:DHCP地址池的网段必须和接口所在网段一致,或者通过中继指向正确的服务器。如果池子建在路由器上但接口网段对不上,终端永远拿不到地址,而且不会有明显报错,只能靠抓包看DORA流程卡在哪一步。

2.2 NAT的三种模式与场景匹配

NAT分三种:静态NAT、动态NAT、PAT(端口地址转换,也叫NAT重载)。很多人一上来就用PAT,其实选哪种要看场景。

静态NAT是一对一固定映射,内网某个私有地址永远对应某个公网地址。适合什么场景?内网有台服务器要对外提供服务,外部用户需要主动访问它,这时候必须用静态NAT,因为映射关系固定,外部才知道往哪个公网地址发请求。

动态NAT是从一个公网地址池里动态分配,内网主机访问外网时临时占用一个公网地址,用完释放。它的问题在于:公网地址池有多大,同时上网的主机就只能有多少台。一个C类公网段也就254个地址,内网几百台设备根本不够用,所以现在纯动态NAT已经很少见了。

PAT是动态NAT的升级版,它不只转换IP,还转换端口号。多个内网主机可以共用同一个公网地址,靠不同的源端口区分会话。这是目前企业网出口最主流的方案,一个公网地址能撑起成百上千台内网设备上网。代价是外部无法主动访问内网主机(因为没有固定映射),需要对外服务的场景还得配合静态NAT的端口映射。

选型逻辑其实就一句话:要对外提供服务用静态NAT,纯内网出访用PAT,两者可以共存。实际配置里经常是PAT负责大部分终端的出访,静态NAT单独给几台服务器做端口映射。

2.3 ACL的分类与匹配规则

ACL是这三个技术里最容易配错、也最容易引发故障的。它分标准ACL和扩展ACL两大类。标准ACL只匹配源IP,编号范围1到99和1300到1999;扩展ACL能匹配源IP、目的IP、协议、端口,编号范围100到199和2000到2699。现在更推荐用命名ACL,可读性好,后期维护方便。

ACL的核心规则有三条必须刻在脑子里:

第一,从上到下逐条匹配,匹配到就执行,不再往下看。所以规则的顺序极其重要。你把permit any any写在第一条,后面所有deny规则全部失效,等于没配。

第二,末尾隐含一条deny any。也就是说,如果你写的ACL里没有任何一条匹配某个流量,这条流量默认被丢弃。很多人配完ACL发现某些正常流量不通了,就是因为忘了显式放行。

第三,ACL本身不生效,必须被应用到接口或某个功能上。比如应用到接口的ip access-group,或者被NAT、路由策略调用。光写ACL不应用,等于白写。

标准ACL因为只匹配源地址,通常要应用在靠近目的端的接口,否则会误伤。扩展ACL匹配精细,一般应用在靠近源端的接口,尽早过滤掉不需要的流量,节省带宽。这个"标准靠目的、扩展靠源"的口诀,是无数人踩坑总结出来的。

3. 出口路由器完整配置实操:从零到能上网

3.1 实验拓扑与地址规划

为了讲清楚,我搭一个典型的中小型企业出口场景。内网办公网段192.168.10.0/24,出口路由器一个内网接口连交换机,一个外网接口连运营商。外网接口假设拿到一个公网地址203.0.113.2/30,网关203.0.113.1。内网还有一台Web服务器192.168.10.100需要对外提供80端口访问。

地址规划如下表:

设备/接口地址说明
内网接口G0/0192.168.10.1/24内网网关
外网接口G0/1203.0.113.2/30运营商分配
DHCP池192.168.10.51-250动态分配范围
静态保留192.168.10.1-50网关及服务器
Web服务器192.168.10.100需对外映射

这个规划里,网关和服务器都在保留段,DHCP池避开它们,避免冲突。Web服务器虽然地址在保留段内,但它需要固定IP,所以不走DHCP。

3.2 DHCP服务端配置与验证

先配DHCP。思科路由器做DHCP服务器的配置分三步:建池、排除地址、指定网关和DNS。

Router(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.50 Router(config)# ip dhcp pool OFFICE Router(dhcp-config)# network 192.168.10.0 255.255.255.0 Router(dhcp-config)# default-router 192.168.10.1 Router(dhcp-config)# dns-server 114.114.114.114 8.8.8.8 Router(dhcp-config)# lease 0 8 0

逐条解释。excluded-address把1到50排除,这些地址不会被动态分配。network声明池子所属网段。default-router就是网关,终端拿到后会自动配默认路由。dns-server下发DNS,可以写多个。lease 0 8 0表示租期0天8小时0分,格式是天、小时、分钟。

配完在终端上ipconfig /renew(Windows)或dhclient(Linux)验证。如果拿不到地址,先在路由器上show ip dhcp binding看有没有绑定记录,再看show ip dhcp pool确认池子状态。常见问题是接口没配ip address或者接口被shutdown了,DHCP服务器不会往一个down的接口发地址。

实操心得:如果内网有多个网段,DHCP服务器在核心上,出口路由器只是转发,那就要配ip helper-address做DHCP中继。中继地址指向DHCP服务器,别指错成网关自己。我见过有人把helper-address指成接口自己的地址,结果请求绕了一圈又回来,永远拿不到地址。

3.3 NAT配置:PAT与静态映射并存

NAT配置的关键是先定义"哪些流量需要转换",再定义"转换成什么"。思科上用ACL来圈定需要NAT的内网流量,用ip nat inside source来指定转换方式。

先配PAT,让内网所有终端能上网:

Router(config)# access-list 10 permit 192.168.10.0 0.0.0.255 Router(config)# ip nat inside source list 10 interface GigabitEthernet0/1 overload

这里ACL 10匹配整个内网段,overload就是PAT的关键字,表示复用外网接口地址做端口转换。注意这里用的是标准ACL,只匹配源地址,因为NAT只关心"谁发出的流量要转换"。

再配静态NAT,把Web服务器映射出去:

Router(config)# ip nat inside source static tcp 192.168.10.100 80 203.0.113.2 80

这条命令的意思是:外部访问203.0.113.2的80端口时,转发到192.168.10.100的80端口。注意这里用的是外网接口地址做映射,如果运营商给了多个公网地址,也可以映射到其他地址。

最后别忘了在接口上标记inside和outside:

Router(config)# interface GigabitEthernet0/0 Router(config-if)# ip nat inside Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip nat outside

这两个标记是NAT生效的前提。inside接口是转换前的方向,outside是转换后的方向。如果标反了,NAT不工作,而且不会有明显报错。

验证用show ip nat translations看转换表,show ip nat statistics看命中次数。如果表里没记录,先确认接口标记对不对,再确认ACL有没有匹配到流量(用show access-lists看命中计数)。

3.4 ACL配置:放行与过滤的精细控制

ACL在这里有两个用途:一是给NAT圈流量(上面已经用了),二是做安全过滤。企业出口通常要限制内网某些流量出去,或者限制外部某些流量进来。

先做一个出方向的过滤,禁止内网访问某个不必要的外部网段,同时放行其他所有:

Router(config)# ip access-list extended OUTBOUND Router(config-ext-nacl)# deny ip 192.168.10.0 0.0.0.255 198.51.100.0 0.0.0.255 Router(config-ext-nacl)# permit ip 192.168.10.0 0.0.0.255 any Router(config-ext-nacl)# exit Router(config)# interface GigabitEthernet0/0 Router(config-if)# ip access-group OUTBOUND in

注意顺序:先deny再permit。如果反过来,permit any先匹配,deny就永远不生效。这就是前面说的"顺序决定一切"。

再做入方向的过滤,只允许外部访问Web服务器的80端口,其他入站流量一律拒绝:

Router(config)# ip access-list extended INBOUND Router(config-ext-nacl)# permit tcp any host 203.0.113.2 eq 80 Router(config-ext-nacl)# permit tcp any host 203.0.113.2 eq 443 Router(config-ext-nacl)# deny ip any any Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip access-group INBOUND in

这里显式写了deny ip any any,虽然ACL末尾隐含这条,但写出来可读性更好,也方便后期加规则时提醒自己。入方向ACL应用在outside接口的in方向,意思是"从外部进来的流量"。

注意:入方向ACL如果写得太严,可能把已经建立的会话的回包也挡掉。比如内网访问外部网站,回包是从outside进来的,如果INBOUND只放行80和443到Web服务器,那内网终端访问外部网站的返回流量就被挡了。解决办法是用扩展ACL匹配established状态,或者把入方向ACL设计得更宽松一些,只挡明确要挡的。这个坑我踩过,当时内网能发请求但收不到响应,排查了很久才发现是入方向ACL把回包拦了。

4. 三技术协同工作的执行顺序与典型故障排查

4.1 数据包在出口设备上的完整旅程

把三个技术串起来看,一个内网终端访问外部网站的完整流程是这样的:

终端通过DHCP拿到192.168.10.51、网关192.168.10.1、DNS。用户输入网址,终端发DNS查询,数据包源地址192.168.10.51,目的地址是DNS服务器。包到达路由器内网接口,先被入方向ACL检查(如果内网接口配了ACL),放行后查路由表,发现出接口是外网接口。出外网接口前,NAT规则匹配到这条流量(源地址在ACL 10范围内),做PAT转换,源地址变成203.0.113.2,源端口变成一个随机高端口。转换后的包发往外网。回包到达外网接口,NAT根据转换表反向还原目的地址和端口,再经过入方向ACL检查,最后发回内网终端。

这个流程里,ACL在NAT之前执行(出方向),NAT转换后的回包再经过入方向ACL。理解这个顺序,排查问题时就能快速定位是哪一环出了问题。

4.2 常见故障速查表

下面这张表是我这些年遇到的高频问题,按现象归类,方便对照排查:

现象可能原因排查命令
终端拿不到IPDHCP池网段不对/接口down/中继指错show ip dhcp pool、show ip interface brief
能拿IP但上不了网NAT未配/接口未标记inside/outsideshow ip nat statistics、show run interface
部分网站打不开ACL顺序错/入方向ACL挡回包show access-lists、show ip nat translations
外网访问不了内网服务器静态NAT未配/入方向ACL未放行show ip nat translations、show access-lists
NAT表为空ACL未匹配到流量/接口标记反了show access-lists、show ip nat statistics
上网时通时断地址池耗尽/租期太短/端口耗尽show ip dhcp binding、show ip nat translations

这张表建议收藏,出问题时从上往下对照,基本能覆盖八成场景。

4.3 几个容易忽略的细节与避坑经验

第一个坑是NAT和ACL的ACL复用冲突。给NAT圈流量的ACL和做过滤的ACL是两回事,不要混用同一个ACL。我见过有人把NAT用的ACL又应用到接口做过滤,结果NAT匹配的流量被过滤规则挡了,上网全断。记住:NAT的ACL只服务于NAT,过滤的ACL单独建。

第二个坑是PAT端口耗尽。一个公网地址做PAT,理论上能支撑约6万个并发会话(端口号范围)。普通办公网够用,但如果有大量P2P下载或者爬虫类应用,端口可能被占满,新连接建立不了。表现是"上网时通时断"。解决办法是增加公网地址做地址池,或者限制单IP的并发连接数。

第三个坑是DHCP snooping与信任端口。如果内网交换机开了DHCP snooping防私接DHCP服务器,那连接合法DHCP服务器的端口必须配成trust,否则DHCP回应报文被丢弃,终端拿不到地址。这个在接入层交换机上配,出口路由器本身不受影响,但排查时要想到这一层。

第四个坑是ACL的通配符掩码。思科ACL用的是反掩码(通配符掩码),不是子网掩码。192.168.10.0/24对应的反掩码是0.0.0.255,不是255.255.255.0。写反了匹配范围就完全错了。这个新手特别容易搞混,记住"0表示必须匹配,1表示忽略"就行。

第五个坑是静态NAT和PAT的优先级。当一条流量同时匹配静态NAT和PAT时,静态NAT优先。所以给服务器做端口映射时,不用担心被PAT规则抢走。但反过来,如果静态NAT写错了地址,可能导致本该走PAT的流量被错误映射,这个要仔细核对。

5. 配置备份、验证与日常维护建议

5.1 配置验证的完整清单

配完不是能上网就完事了,要逐项验证。我习惯按这个清单过一遍:

  • DHCP:show ip dhcp binding看有没有活跃绑定,show ip dhcp pool看池子使用率
  • NAT:show ip nat translations看转换表,show ip nat statistics看inside/outside接口标记和命中数
  • ACL:show access-lists看每条规则的命中计数,确认deny和permit都按预期工作
  • 路由:show ip route确认默认路由指向外网网关
  • 接口:show ip interface brief确认所有接口up且地址正确

这个清单过完,基本能保证配置完整。特别是ACL的命中计数,如果某条deny规则计数为0,说明根本没流量匹配到它,要么规则写错了,要么流量走了别的路径。

5.2 配置备份与版本管理

思科的配置备份很简单,show running-config看当前配置,copy running-config startup-config保存。但真正做运维,建议把配置导出到外部保存,每次变更前先备份。

Router# copy running-config flash:backup-20250101.cfg

导出到flash或者TFTP服务器都行。我习惯每次大变更前备份一份,命名带日期。出问题可以快速回滚。思科还支持配置归档和回滚(archive和configure replace),进阶用户可以用,但基础运维手动备份就够了。

5.3 日常维护的几个习惯

第一,定期看NAT转换表大小。如果转换表条目持续增长不释放,可能是会话老化时间太长或者有异常流量。默认TCP会话老化24小时,UDP 5分钟,可以按需调整。

第二,监控DHCP池使用率。池子用到80%以上就要考虑扩容或者缩短租期。别等耗尽了才发现。

第三,ACL变更要谨慎。改ACL前先想清楚顺序,改完立即验证。最好在业务低峰期操作,避免影响面太大。

第四,日志要开。logging buffered把日志存到缓冲区,出问题时show logging能看到ACL拒绝、NAT失败等记录,比盲目排查快得多。

这套DHCP加NAT加ACL的组合,说白了就是企业网出口的基本功。配通不难,难的是配得稳、排得快。我自己的经验是,每次配完都按验证清单过一遍,把常见故障表贴在工位上,遇到问题先对照再动手,能省下大量瞎折腾的时间。后面如果要做更复杂的策略路由、QoS或者双出口负载,也是在这套基础上叠加,底子打牢了,往上加东西就顺了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询