【网络体系搭建】V7:VRF, NAT/PAT和ACL
1. VRF:一台设备中的多张独立路由表
正常情况下,一台路由器使用一张 Global Routing Table:
1 | Destination |
VRF(Virtual Routing and Forwarding)的核心作用:
在同一台物理设备中创建多个彼此独立的三层路由上下文。
例如:
1 | Router |
两个 VRF 可以存在完全相同的 Prefix:
1 | VRF A: |
不会冲突,因为它们属于不同 Routing Context。
因此:
1 | VRF |
VLAN 与 VRF 的区别
1 | VLAN |
可以组合:
1 | VLAN 10 |
2. 数据包如何选择 VRF
普通 VRF-Lite 中,数据包本身通常不会携带一个:
1 | VRF = A |
这样的 Header。
设备主要根据:
数据包从哪个 L3 Interface 进入,判断应该进入哪个 VRF Routing Context。
例如:
1 | interface GigabitEthernet0/1 |
数据包从 Gi0/1 进入:
1 | Packet |
因此:
1 | Ingress L3 Interface |
一个接口与 VRF 的关系
一个普通 L3 Interface / Subinterface:
1 | → 属于一个 VRF |
但:
1 | 一个 VRF |
3. VRF 配置、验证与 Inter-VRF
经典 IOS / IOS XE 示例:
1 | ip vrf A |
接口绑定:
1 | interface GigabitEthernet0/1 |
注意:
某些经典 IOS / IOS XE 平台上,把已有 IP 的接口绑定到 VRF 时,原来的 IP Address 可能会被移除,需要重新配置。
因此通常:
1 | interface GigabitEthernet0/1 |
查看路由表
Global:
1 | show ip route |
VRF A:
1 | show ip route vrf A |
查看接口:
1 | show ip interface brief |
不同 VRF 可以出现相同接口 IP:
1 | VRF A: |
因为:
1 | Packet enters Gi0/1 |
即使:
1 | SIP / DIP 完全相同 |
只要进入不同 VRF,最终路由结果也可以完全不同。
Inter-VRF
不同 VRF 默认隔离:
1 | VRF A |
如果需要互通,需要:
1 | Route Leaking |
并且必须考虑:
1 | Forward Reachability |
即:
不能只把 A → B 的路由泄露过去,还必须保证返回方向也存在正确路由。
4. NAT:改变报文中的地址身份
NAT 与 Tunnel 最大区别:
1 | NAT |
例如:
1 | Inside Host |
Static NAT:
1 | 192.168.1.10 |
Inside Local / Inside Global
1 | Inside Local |
例如:
1 | Inside Local: |
注意:
Inside Local 不一定严格等于 Private IP,Inside Global 也不一定严格等于 Public IP。
它们描述的是 NAT 视角下的地址角色。
5. Static NAT、Dynamic NAT 与 Static PAT
Static NAT
固定一对一:
1 | 192.168.1.10 |
配置:
1 | interface GigabitEthernet0/0 |
Static NAT:
1 | ip nat inside source static 192.168.1.10 203.0.113.10 |
Inside → Outside:
1 | Before NAT: |
Return:
1 | Before NAT: |
Dynamic NAT
Dynamic NAT 从地址池动态选择 Global Address:
1 | 192.168.1.10 |
特点:
1 | 一个 Inside Local |
仍然主要是一对一映射。
如果地址池耗尽:
1 | 新的 Host |
Static PAT / Port Forwarding
可以把:
1 | Public-IP:Port |
固定映射到:
1 | Private-IP:Port |
例如:
1 | 203.0.113.10:443 |
典型配置:
1 | ip nat inside source static tcp 192.168.1.10 443 203.0.113.10 443 |
这也是常见的:
1 | Port Forwarding |
6. PAT / NAT Overload
PAT 的核心:
多个 Inside Hosts 可以共享一个 Inside Global Address,通过 L4 Port 区分不同 Session。
例如:
1 | 192.168.1.10:50001 |
所以:
1 | Static / Dynamic NAT |
Cisco 常见配置:
1 | access-list 10 permit 192.168.1.0 0.0.0.255 |
其中:
1 | overload |
PAT Packet Walk
Inside Host:
1 | 192.168.1.10:50000 |
经过 PAT:
1 | 203.0.113.1:30001 |
返回:
1 | 8.8.8.8:443 |
NAT Device 查 Translation Table:
1 | 203.0.113.1:30001 |
最终:
1 | 8.8.8.8:443 |
查看 NAT / PAT
1 | show ip nat translations |
PAT 没有必须单独使用的:
1 | show pat ... |
PAT Translation 同样出现在:
1 | show ip nat translations |
7. Routing 与 NAT:解决的是两个不同问题
Routing 回答:
这个 Destination IP 应该从哪里转发?
即:
1 | DIP |
NAT 回答:
这个地址/端口在经过 NAT 边界时应该转换成什么身份?
因此:
1 | Routing |
一个数据包要成功通信,经常需要:
1 | 正确 Routing |
例如:
1 | 192.168.1.10 |
即使 NAT 配置正确:
1 | 192.168.1.10 |
如果设备根本没有:
1 | 0.0.0.0/0 |
或者正确的外部路由,Packet 仍然无法成功到达目的地。
因此排 NAT 问题不能只盯:
1 | show ip nat translations |
还必须同时看:
1 | show ip route |
8. Hairpin NAT
典型场景:
1 | Internal Client |
Internal Client 不使用:
1 | 192.168.1.10 |
而访问:
1 | 203.0.113.10 |
这就是典型的 Hairpin / NAT Loopback 场景。
流量可能需要:
1 | Internal Client |
某些设计中不仅需要:
1 | DNAT |
还可能需要:
1 | SNAT |
以确保 Return Traffic 重新经过 NAT Device,保持 Session 对称。
另一种常见解决思路是:
1 | Split DNS |
内部 DNS:
1 | server.example.com |
外部 DNS:
1 | server.example.com |
从而避免内部 Client 绕 Public NAT 地址访问内部 Server。
9. ACL:Standard、Extended 与方向
ACL 的核心:
根据 Packet Header 中的字段进行匹配,然后执行 Permit / Deny 等策略动作。
Standard ACL
主要匹配:
1 | Source IPv4 Address |
例如:
1 | access-list 10 permit 10.1.1.0 0.0.0.255 |
Extended ACL
可以匹配:
1 | Protocol |
例如:
1 | access-list 100 permit tcp 10.1.1.0 0.0.0.255 any eq 443 |
这里匹配的是:
1 | TCP |
它并不真正理解:
1 | HTTPS Application Content |
所以:
ACL 能匹配 TCP/443,不等于它拥有完整的 L7 HTTPS Application Awareness。
Wildcard Mask
1 | 0 |
例如:
1 | 10.1.1.0 0.0.0.255 |
表示:
1 | 前三个 Octet 必须匹配 |
即:
1 | 10.1.1.0/24 |
ACL In / Out
方向始终站在:
Router / L3 Interface 自己的视角
来看。
1 | Inbound: |
1 | Outbound: |
例如:
1 | interface GigabitEthernet0/1 |
表示:
从 Gi0/1 进入 Router 的 Packet 被 ACL 100 检查。
10. ACL 在不同功能中的“Permit / Deny”含义
这是非常重要的易错点。
Interface ACL
例如:
1 | interface GigabitEthernet0/1 |
此时:
1 | permit |
NAT ACL
例如:
1 | access-list 10 permit 192.168.1.0 0.0.0.255 |
这里 ACL 的作用不是直接过滤流量,而是:
选择哪些流量需要参与 NAT。
因此:
1 | permit |
deny 不一定意味着 Packet 被丢弃。
它只是表示:
1 | 这条 Packet |
Packet 是否最终被丢弃,还要看:
1 | Routing |
所以必须牢记:
ACL 的 Permit / Deny 到底意味着什么,要看 ACL 被哪个 Feature 调用。
11. VRF + NAT + ACL 综合 Packet Walk
假设:
1 | Host |
Host 访问:
1 | 8.8.8.8 |
整体逻辑:
1 | ① Packet 进入属于 VRF A 的 L3 Interface |
Return:
1 | Internet |
实际设备中 NAT、ACL、Routing 的内部处理顺序会受到平台、方向和具体 Feature 影响,因此排障时不要机械背一个适用于所有场景的固定内部 Pipeline。
更重要的是确认:
1 | VRF 对不对? |
12. Show、验证与排障
VRF
1 | show vrf |
需要从特定 VRF 测试时:
1 | ping vrf A <destination> |
注意:
Router 自己发出的
ping vrf,不一定能够完整模拟真实 Inside Host 穿越 NAT 的行为。
所以 NAT 排障最好同时使用真实业务流量验证。
NAT / PAT
1 | show ip nat translations |
重点检查:
1 | 有没有 Translation? |
ACL
1 | show access-lists |
重点观察:
1 | ACL 顺序 |
Routing
Global:
1 | show ip route |
VRF:
1 | show ip route vrf A |
V7 排障逻辑
遇到:
1 | Host 无法访问目标 |
不要一上来就改 NAT 或 ACL。
建议按照:
1 | 1. VRF |
1. VRF
1 | Ingress Interface 属于哪个 VRF? |
2. Routing
1 | 目标 Prefix 是否存在? |
3. NAT / PAT
1 | Inside / Outside 是否正确? |
4. ACL / Policy
1 | ACL 绑在哪个 Interface? |
5. Return Path
最终必须确认:
1 | Forward Path |
都成立。
核心总结
1 | VLAN |
1 | Ingress L3 Interface |
1 | NAT |
1 | Routing |
ACL 最重要的两个易错点:
1 | Interface ACL: |
1 | NAT ACL: |
最终排障抓住:
1 | VRF |
不要把 VRF、Routing、NAT、ACL 混成一个功能:
1 | VRF |



