做网络这块最头疼的其实不是设备怎么配,而是“需求到底要表达什么”。像“WiFi段仅能访问外网,和内网隔离”这句话,初看很简单,实际动手前你得先想清楚几个层次:是访客WiFi不能碰内网,还是自己手机连WiFi也不能碰内网?内网有哪些网段?出口在哪里?三层设备是哪台?这些不梳理明白,配置命令背得再熟也是白搭。
这篇文章就围绕这个场景走一遍完整方案:用一台锐捷三层交换机,通过VLAN把WiFi用户隔离到一个独立网段,再配合ACL做单向访问控制——WiFi段只能去外网,不能访问内网。文章里给的是能直接抄的配置思路和命令示例,同时也把难点和容易踩的坑都点出来。
1. 需求拆解与整体方案设计
1.1 先搞清楚“隔离”到底是什么
很多人一说“隔离”就想着用防火墙,其实在中小企业场景里,大部分情况根本没有独立防火墙,出口就是一台宽带路由器加一台核心交换机。这时候只要核心交换机是三层设备,完全可以用VLAN加ACL实现大部分隔离需求。
“WiFi段仅能访问外网,与内网隔离”这个需求拆开来看,包含三层意思:
- WiFi用户之间可以互通(或者干脆也不互通,看现场要求)。
- WiFi用户可以访问互联网(外网)。
- WiFi用户不能访问内网任何服务器、办公电脑、打印机、摄像头等资源。
注意,这里有个方向容易被忽略:需求只是限制“WiFi访问内网”,并没有要求“内网不能访问WiFi”。如果运营者希望内网用户远程管理一下WiFi设备,或者用手机连WiFi后还要访问内网群晖、NAS,那ACL策略方向就要反过来设计。所以做配置前,先跟业务方确认清楚到底隔离是单向还是双向,我见过太多人把双向隔离做上了,结果老板在办公室连WiFi访问不了内网打印机,回过头来还得重新改。
1.2 为什么推荐“VLAN + ACL”而不是换防火墙
我在这个项目里的选型逻辑其实很简单:现场已经有了一台锐捷三层交换机,预算控制得比较紧,再上防火墙无论成本还是时间都不现实。VLAN负责把广播域切开,ACL负责在三层路由时做访问控制,这两个技术是交换机自带的,不需要额外费用,配置也不算复杂。
选用三层交换机做网关有一个先天优势:VLAN间路由默认就通。也就是说,如果没有ACL,VLAN 10的内网和VLAN 20的WiFi之间,只要路由可达,双方互相就能ping通。我们要做的,就是在路由的同时插入一道“检查关卡”,告诉交换机:来自WiFi网段的流量,凡是目的地址是内网网段的,一律丢弃;只有去外网的才放行。这道关卡就是ACL。
对比一下几种常见方案的优劣:
| 方案 | 优点 | 缺点 |
|---|---|---|
| 二层交换机 + 路由器VLAN子接口 | 成本低,配置简单 | ACL和流量过滤能力弱,性能取决于路由器 |
| 三层交换机VLAN + ACL | 性能高,扩展性好,成本可控 | 需要懂CLI,ACL顺序容易配错 |
| 独立防火墙 + VLAN | 策略管理直观,日志审计强 | 成本高,部署周期长 |
| 无线AP自带访客网络隔离 | 配置最省事 | 只隔离无线端,无法覆盖所有接入场景 |
结论很明确:在没有新建防火墙预算的前提下,锐捷三层交换机的VLAN加ACL,是性价比最高、最稳妥的落地方式。
1.3 规划一个最小可用的网络架构
我在项目里用的是一台锐捷RG-S5750系列交换机,出口接的是一条运营商宽带,路由器在内网侧负责NAT和拨号,交换机负责VLAN间路由。规划如下:
- VLAN 10:办公内网,网段 192.168.10.0/24,网关 192.168.10.1(交换机SVI地址)。
- VLAN 20:WiFi网段,网段 192.168.20.0/24,网关 192.168.20.1(交换机SVI地址)。
- 出口路由器:接在交换机VLAN 10的端口上,接口地址 192.168.10.254,做源NAT和上网拨号。
- 无线AP:接入交换机的一个Access口,放VLAN 20,SSID对应VLAN 20。
交换机需要有一条默认路由指向出口路由器,否则WiFi段的流量即使出了网关,也不知道下一步往哪走。
这套架构就是一个非常典型的“单臂路由加VLAN隔离”模型,核心点就是三层交换机既是内网网关,也是WiFi网关,同时通过ACL把WiFi到内网的路径切断。
2. 配置前准备与必备命令储备
2.1 登录交换机并确认设备信息
动手配置前,建议先用Console线或SSH登录交换机,把当前状态摸清楚。尤其是这台设备如果之前已经被别人配过,贸然敲配置容易冲突。我一般先跑几组基础查看命令:
enable show version show vlan show ip interface brief show running-config这几条命令分别看设备型号版本、现有VLAN表、三层接口地址、当前完整配置。如果你是第一次接管这台设备,运维交接又不完整,show running-config 基本是救命稻草,先看看有没有已存在的ACL、NAT或者管理VLAN,避免新配置和旧配置互相覆盖。
2.2 锐捷交换机常用命令速记
锐捷的CLI整体风格偏向Cisco系,但也融合了一些自身习惯。比如进入全局配置模式用的是configure terminal,给接口配IP用的是interface vlan 10这种SVI写法,创建ACL支持命名ACL。我在下边整理了一份高频命令表,新手上手够用了:
| 操作目的 | 命令示例 |
|---|---|
| 进入特权模式 | enable |
| 进入全局配置模式 | configure terminal |
| 创建VLAN | vlan 20 |
| 给VLAN起名称 | name WIFI_GUEST |
| 进入物理接口 | interface GigabitEthernet 0/1 |
| 切换Access口 | switchport mode access |
| 分配Access VLAN | switchport access vlan 20 |
| 批量进入接口 | interface range GigabitEthernet 0/2-24 |
| 创建VLAN三层接口 | interface vlan 20 |
| 配IP地址 | ip address 192.168.20.1 255.255.255.0 |
| 配置静态路由 | ip route 0.0.0.0 0.0.0.0 192.168.10.254 |
| 保存配置 | write memory |
注意,不同型号和软件版本的锐捷在接口编号上存在差异,有些是GigabitEthernet 0/1,有些是GigabitEthernet 1/0/1,输入命令时按Tab补全即可,不必死记硬背。
2.3 网络地址规划表是配置之前必须做的功课
很多入门工程师拿到需求就开始敲命令,结果敲到一半发现网段冲突、网关填错、ACL掩码写反,再回头改,效率反而低。我建议先把规划表做出来,照着表写配置:
| 项目 | 规划值 | 说明 |
|---|---|---|
| 内网VLAN ID | 10 | 办公网原有VLAN |
| 内网网段 | 192.168.10.0/24 | 服务器、PC、打印机 |
| 内网网关 | 192.168.10.1 | 配置在交换机VLAN 10上 |
| WiFi VLAN ID | 20 | 新增访客/无线专用VLAN |
| WiFi网段 | 192.168.20.0/24 | 无线终端获取地址段 |
| WiFi网关 | 192.168.20.1 | 配置在交换机VLAN 20上 |
| 出口路由器接口 | 192.168.10.254 | 与交换机VLAN 10互通 |
| 交换机默认路由 | 0.0.0.0/0 -> 192.168.10.254 | 提供外网下一跳 |
这里有一个很容易踩的坑:有些人觉得WiFi网段用192.168.0.0这类C类地址就行,但如果出口路由器本身也用192.168.0.1做内网管理地址,WiFi网段一上来就冲突,后面各种奇怪故障都会冒出来。规划地址前,务必先检查现有所有网段,确保新VLAN不会和任何现网网段重叠。
3. 核心实操:VLAN划分、三层网关与默认路由
3.1 创建VLAN并规划端口归属
下面这段配置直接对应前面的规划表。假设交换机有24个电口,1号口接出口路由器,2号口接内网核心服务器,3-10号口给无线AP用。那么VLAN划分命令如下:
configure terminal vlan 10 name NEIWAI_SERVER exit vlan 20 name WIFI_GUEST exit创建完VLAN后,需要把物理端口划分到对应VLAN里。接内网服务器的2号口配置成Access口放VLAN 10,接无线AP的3-10号口放VLAN 20,顺手写上description,方便以后排障时看端口用途:
interface GigabitEthernet 0/2 description TO_SERVER switchport mode access switchport access vlan 10 exit interface range GigabitEthernet 0/3-10 description TO_WIFI_AP switchport mode access switchport access vlan 20 exit这里有一个容易被忽略的点:无线AP本身可以支持多SSID多VLAN。如果你给访客WiFi和内网办公WiFi用的是同一台AP,AP上联口就不能是单纯的Access口,而应该是Trunk口,把所有需要的VLAN都放行。比如AP需要上线管理VLAN 10,同时下发VLAN 20给访客SSID,那上联口配置应为:
interface GigabitEthernet 0/10 switchport mode trunk switchport trunk allowed vlan 10,203.2 配置三层VLAN网关接口
VLAN创建完只是完成了二层隔离,不同的VLAN之间要路由,必须给每个VLAN配置一个三层接口,也就是SVI(Switch Virtual Interface)。这是三层交换机最关键的步骤。
interface vlan 10 ip address 192.168.10.1 255.255.255.0 no shutdown exit interface vlan 20 ip address 192.168.20.1 255.255.255.0 no shutdown exit配完之后,VLAN 10和VLAN 20之间默认就能路由互访了,但此时WiFi网段依然可以访问内网,距离我们的目标还差一步。这里我先验证一下三层配置是否生效:
show ip interface brief如果看到两个VLAN接口都是UP状态,并且IP地址正确,说明三层部分通了。此时拿一台WiFi终端手动配192.168.20.66这种地址,再ping 192.168.10.1,理论上应该通,因为还没有加ACL。
3.3 配置默认路由让WiFi流量能找到出口
三层交换机要访问外网,必须知道自己这个“网段”之外的世界怎么走。当前出口路由器在下行侧接口是192.168.10.254,所以交换机要写一条默认路由指过去:
ip route 0.0.0.0 0.0.0.0 192.168.10.254这条路由写完之后,WiFi用户理论上已经可以上网了,因为路由器会做NAT把私网地址转换成公网地址。但此时WiFi用户依然能访问192.168.10.0/24,所以ACL配置就成了整个项目里真正决定成败的一步。
4. ACL配置:亲手把“仅能访问外网”落到实处
4.1 ACL的顺序和执行逻辑,先说透
ACL(Access Control List)本质是一串自上而下逐条匹配的规则。交换机拿到一个数据包后,会从第一条规则开始往下比,一旦匹配就执行对应动作,后面的规则不再检查。如果所有规则都不匹配,末尾还有一个隐含的deny all。
这个“顺序优先”的特点,决定了ACL条目的摆放顺序不能乱。很多刚上手的朋友喜欢把permit ip 192.168.20.0/24 any写在第一条,然后又加一条deny去封内网,结果deny永远不会生效,因为permit已经把流量全部放行了。正确思路是把“需要禁止的”放在前面,“需要放行的”放在后面。
同时要注意ACL里写的是反掩码。因为锐捷沿用的是Cisco的wildcard mask写法,/24网段对应的是0.0.0.255,不是255.255.255.0,这个概念错了整个ACL全废。我用表格对比一下:
| 子网掩码 | 反掩码 |
|---|---|
| 255.255.255.0 | 0.0.0.255 |
| 255.255.0.0 | 0.0.255.0 |
| 255.0.0.0 | 0.255.255.255 |
4.2 锐捷交换机配置ACL的两种风格
锐捷交换机创建ACL有编号和命名两种方式。编号方式类似Cisco经典写法,命名方式更直观,排障时一眼就能看出这条ACL是干嘛的。我推荐用命名ACL。
下面这段配置的逻辑是:
- 拒绝WiFi网段访问内网VLAN 10网段。
- 拒绝WiFi网段访问其他内网保留网段(比如未来新增的服务器段)。
- 放行WiFi网段访问所有外网。
ip access-list extended WIFI_ONLY_WAN deny ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255 deny ip 192.168.20.0 0.0.0.255 10.0.0.0 0.255.255.255 deny ip 192.168.20.0 0.0.0.255 172.16.0.0 0.15.255.255 deny ip 192.168.20.0 0.0.0.255 192.168.0.0 0.0.255.255 permit ip 192.168.20.0 0.0.0.255 any exit注意,最后一条permit ip 192.168.20.0 0.0.0.255 any放行的是所有目的地址,包括去公网的流量。但由于前面已经deny了所有私网段,所以实际效果就是“只能去公网”。如果你的内网地址是192.168.50.0/24,请在deny规则里替换成192.168.50.0 0.0.0.255,千万不要把整个192.168.0.0/16无脑封掉,因为有些WiFi终端需要通过私网地址访问AP管理界面,或者路由器管理页也在私网段里。
我还想提醒一点:这几条deny规则顺序敏感。把deny ip ... 192.168.0.0 0.0.255.255写在permit之前,顺序是对的;如果把permit写在前面,所有的deny就都白写了。ACL配置完成后务必用show命令检查一下顺序。
4.3 在VLAN 20接口上应用ACL
ACL建好不应用就是一张废纸。这里要把ACL绑定到VLAN 20的三层接口上,指定入方向,也就是从WiFi终端进入交换机的流量先过一遍ACL:
interface vlan 20 ip access-group WIFI_ONLY_WAN in exit这个“in”方向非常关键。它控制的是从VLAN 20里的终端发出来的流量,在交换机做路由之前先被检查。如果配成out方向,语义就完全不同了,排障时容易把自己搞晕。
应用完成后验证:
show ip access-group show access-lists WIFI_ONLY_WAN正常情况下,第一条ACL的匹配计数器会随着WiFi流量访问内网而增长。如果dDeny计数持续增长,说明确实在拦截访问内网的流量。
4.4 双向隔离or单向隔离?按需求补一条反向ACL
在前面我特别提到要确认隔离方向。我们当前方案只限制了“WiFi访问内网”,内网访问WiFi段在默认路由下仍然是通的。如果你想做得更彻底,让内网也不能访问WiFi,可以再建一条ACL,绑到VLAN 10接口的in方向,或者VLAN 20接口的out方向。
我个人建议如果不是敏感场景,内网访问WiFi端这一段保持放开,因为运维人员排查问题、管理AP时往往需要从内网侧访问WiFi设备。彻底双向隔离听着安全,但会给日常维护添不少麻烦。
4.5 无线AP自带的访客隔离还需要保留吗
这里有一层容易被忽略的二层问题:ACL是在三层路由器上生效的,同一VLAN内的二层互访,三层ACL管不到。举个例子,两台手机连上同一个SSID,都拿到了192.168.20.x的地址,它们之间的通信不经过三层接口,ACL拦截不到。
如果现场要求“WiFi终端之间也不能互相访问”,就需要在二层做隔离。通常有几种办法:无线控制器/AP开启Client Isolation(客户端隔离)、交换机端口开启端口隔离特性,或者干脆每个SSID对应一个独立VLAN,再通过ACL限制VLAN间互访。
很多办公访客WiFi场景,“WiFi用户之间互访”其实是可以禁止的,能有效防止同一无线网段内的ARP欺骗和恶意扫描。具体用什么命令要看设备型号,锐捷部分交换机支持端口保护模式,配置前查官方手册或在线帮助最稳妥。
5. DHCP服务配置与上网最后的“临门一脚”
5.1 在交换机上直接开DHCP
WiFi终端要拿到IP地址才能上网,最简单的方式是让交换机本身提供DHCP服务,省去单独架设DHCP服务器的成本和麻烦。锐捷交换机支持基础DHCP服务器功能,配置如下:
service dhcp ip dhcp pool WIFI_GUEST network 192.168.20.0 255.255.255.0 default-router 192.168.20.1 dns-server 223.5.5.5 114.114.114.114 lease 0 4 exit这里default-router必须指到VLAN 20的网关地址192.168.20.1,不能写192.168.10.1,否则终端拿到的网关不对,直接断网。dns-server建议用公网DNS,不建议使用内网DNS或路由器地址,否则WiFi用户可能通过DNS服务器地址反向嗅探到内网网络结构。公网DNS选择看地区,阿里223.5.5.5和腾讯119.29.29.29都是比较稳的选择。
lease 0 4表示租期4小时,访客网络设短一点比较合理,避免地址长期被占用导致地址池耗尽。
5.2 如果公司已有Windows/Linux DHCP服务器
如果公司内网已经存在企业级DHCP服务器,可以不在交换机上开DHCP,而是通过DHCP中继把VLAN 20的请求转发给内网DHCP服务器。锐捷配置中继的命令思路是:
interface vlan 20 ip helper-address 192.168.10.50 exit不过要注意,DHCP服务器上需要建好对应作用域,地址池范围是192.168.20.0/24,网关选项填192.168.20.1,DNS选项填公网DNS。使用独立DHCP服务器的好处是集中管理、日志可查,适合多VLAN环境。
5.3 检查DHCP分配结果
配置完DHCP之后,可以让手机连上WiFi实际测试一下。也可以通过交换机的命令查看地址分配情况:
show ip dhcp binding如果看到192.168.20.1到192.168.20.254范围内陆续出现绑定记录,说明DHCP工作正常;如果一张表空空的,优先检查交换机到DHCP服务器的路由是否可达,或者有没有配置了地址冲突导致接口起不来。
5.4 上外网的最后一步:出口路由器的回程路由和NAT
WiFi用户拿到的地址是192.168.20.x,这个网段是从三层交换机上分出来的。出口路由器默认只知道192.168.10.0/24这个网段,如果路由器没有配置到192.168.20.0/24的回程路由,或者没有开启“从接口进来的流量做源NAT”,那么WiFi用户发出的数据包到了路由器,路由器一看目的地址是公网,会把包转发出去,但返回的流量到达路由器后,路由器不知道192.168.20.x这个网段往哪里送,数据包就丢了。
所以,出口路由器的NAT规则需要覆盖192.168.20.0/24网段。如果路由器支持“源接口NAT”或“源地址池NAT”,记得把VLAN 20的网段加进去。这一步是整个项目里最容易漏的一个环节,也是“WiFi能连上但死活打不开网页”的高发原因。
6. 常见问题与故障排查实录
6.1 WiFi能上外网,却仍然能访问内网资源
这是ACL没有生效的典型表现。排查步骤如下:
show ip access-group确认ACL是否已经绑定到VLAN 20接口,方向是否为in。show access-lists WIFI_ONLY_WAN查看ACL内容,确认deny规则排在permit规则之前。- 核对反掩码是否写错。192.168.10.0/24写成了255.255.255.0的话,ACL根本匹配不上。
- 如果ACL绑在VLAN 10接口而不是VLAN 20接口,规则匹配方向可能完全反了。建议统一绑在WiFi侧接口上。
6.2 WiFi无法获取IP地址
优先查看DHCP配置和交换机接口状态:
show ip dhcp binding看是否有地址分配记录。show interfaces status看AP上联口是否有物理链接。如果AP上联口划错VLAN,或者状态是down,终端自然拿不到地址。- 确认交换机没有开启DHCP Snooping的非法DHCP拦截,有些安全特性会自动丢弃非信任接口上的DHCP报文,导致终端拿不到地址。
6.3 WiFi能ping通网关,但外网全部不通
这时先别怀疑ACL,ACL封的是内网,不会拦外网。优先排查两条:
- 交换机上有没有默认路由:
show ip route,看有没有S* 0.0.0.0/0 [1/0] via 192.168.10.254这样的路由条目。 - 出口路由器是否做了NAT,以及NAT是否包含192.168.20.0/24网段。很多人只NAT了192.168.10.0/24,结果WiFi上不了网,路由器日志里一堆NAT转换失败的记录。
6.4 WiFi能打开网页,但某些App提示网络异常
网页能打开通常说明基本连通没问题,App异常大概率是DNS解析或特定端口被拦截。先检查交换机ACL有没有限制协议端口。如果ACL是按IP段写的,没有动端口,那问题多半在出口路由器或者运营商侧。如果DNS用了内网地址且故障持续,把DHCP里的dns-server改成公网DNS再测试。
6.5 无线漫游掉线、切换VLAN后获取不到原网段地址
这个问题在办公网多AP场景经常出现。无线终端的地址是DHCP分配的,漫游时如果切换了AP,新AP上联口如果VLAN配置不一致,终端会发现网关变了,导致短暂断网。解决办法是统一所有AP上联口Trunk放行VLAN,并确保无线控制器里SSID到VLAN的映射全局一致。如果现场有多台AP采用本地转发模式,各AP上联口务必要做统一规划。
6.6 排障时的几条救命命令
排障过程中我觉得最有用的几个命令是:
show running-config interface vlan 20 show access-lists WIFI_ONLY_WAN show log debug ip packet其中debug ip packet可以看到交换机实时收到的数据包和匹配结果,信息量很大,但生产环境慎用,优先级高且会刷屏。用完之后立刻undebug all关闭,避免影响设备性能。
再补充一个经验:在排查ACL的时候,可以用终端从WiFi侧主动ping内网服务器IP,同时开着show access-lists WIFI_ONLY_WAN观察deny计数是否增长。如果计数不增长,说明流量根本没有走到三层ACL这一步,或者ACL绑错了接口方向。如果计数增长,说明ACL确实在干活,那问题就出在ACL规则顺序或掩码上了。
7. 踩坑总结与个人心得
这个项目做完之后,我对VLAN隔离这件事最大的体会是:配置命令真不难,难的是在动手之前把需求、网段规划、流量方向和回程路由全部想清楚。ACL规则顺序、反掩码、接口方向,任何一环错了,结果都是“看似隔离了,实际漏得一塌糊涂”或者“该通的也不通了”。
最后分享一个我自己的习惯:每次配完ACL,我都会用一台手机连WiFi,分别测三个动作——ping一下内网服务器(预期不通)、ping一下公网IP(预期通)、打开一个网页(预期通)。这三个动作能覆盖整个链路的关键环节,比你在电脑前面看十分钟配置都管用。
再补一条小技巧:配置过程中建议每隔几步就执行一次write memory,把配置保存下来。我曾经遇到客户在调试中途突然断电,没保存的配置全部丢失,花了半天时间重新排查重配,那种感觉很糟糕。改前备份,改后保存,网络工程师的手不要懒。