GNS3 多 NAT 多路由器实验:两个私网经 ISP 骨干互通(MikroTik CHR 实战)

现实网络中,两个使用 NAT 的内网(如两个公司/家庭局域网)默认无法直接互访——对端只有公网地址,私网路由不可达。本文在 GNS3 中用两台 MikroTik CHR 路由器搭建"多 NAT + 多公网"环境,演示如何通过运营商骨干段让两个 NAT 内网双向互通,同时各自正常访问互联网。

实验目标与拓扑

  • 多路由器:R1、R2 两台 MikroTik CHR 7.20.2(官方免费镜像)
  • 多 NAT:两台路由器各自对出 WAN 的流量做 masquerade
  • 多公网:① 真实公网段(GNS3 NAT 云桥接宿主机网卡,可上 Internet);② 模拟 ISP 骨干段(100.64.0.0/24,两台路由器互联)
  • 核心目标:内网 A(10.10.1.0/24)与内网 B(10.10.2.0/24)的主机直接互 ping,且双方都能上公网
                    NAT1 云(桥接物理网卡 → 真实 Internet)
                        │   192.168.110.0/24
                      SW-WAN
              ┌─────────┴──────────┐
    ether1 .110.48           ether1 .110.49
   ┌─ R1 (CHR, NAT masquerade) ─┐  ┌─ R2 (CHR, NAT masquerade) ─┐
   │ ether2 10.10.1.1           │  │           10.10.2.1 ether2 │
   │ ether3 100.64.0.1 ─SW-ISP─ │  │ ─ 100.64.0.2 ether3        │
   └─── SW1 ── PC1 10.10.1.10   │  │   PC2 10.10.2.10 ── SW2 ───┘

一、准备 MikroTik CHR 镜像

CHR(Cloud Hosted Router)是 MikroTik 官方免费的 RouterOS 虚拟镜像,是 GNS3 里最合法易得的真实路由器系统。

# 下载并解压到 GNS3 images 目录
Invoke-WebRequest -Uri "https://download.mikrotik.com/routeros/7.20.2/chr-7.20.2.img.zip" -OutFile chr.zip
Expand-Archive chr.zip -DestinationPath "C:\Users\Administrator\GNS3\images\QEMU"

在 GNS3 中创建 QEMU 模板(关键参数):

参数
QEMU 二进制qemu-system-x86_64.exe
内存256 MB
磁盘chr-7.20.2.img(hda, ide)
网卡3 × e1000
控制台telnet

坑:HAXM acceleration support is not installed。GNS3 默认要求硬件加速,未装 HAXM 的主机会拒绝启动 QEMU 节点。解决方法:在 gns3_server.ini 增加 [Qemu] 段关闭强制加速(改用 TCG 纯软件模拟,代价是 ping 延迟 30-100ms):

[Qemu]
enable_hardware_acceleration = False
require_hardware_acceleration = False

二、搭建拓扑

共 9 个节点:R1、R2(CHR)+ SW-WAN、SW-ISP、SW1、SW2(4 台内置交换机)+ NAT1(云)+ PC1、PC2(VPCS)。

连线:

  • NAT1 → SW-WAN;R1.ether1、R2.ether1 → SW-WAN(公网段 192.168.110.0/24)
  • R1.ether3、R2.ether3 → SW-ISP(骨干段 100.64.0.0/24)
  • R1.ether2 → SW1 → PC1(内网 A);R2.ether2 → SW2 → PC2(内网 B)

三、配置路由器(重点)

CHR 首次启动登录 admin 空密码,RouterOS 7 会强制修改密码并询问是否查看 license(输 n + q 跳过)。注意 telnet 控制台每条命令只能发 \r,发 \r\n 会被当成两次回车。

R1 配置(R2 对称替换网段):

/system identity set name=R1

# 内网口 + 骨干口地址(ether1 的 WAN 地址由真实网络 DHCP 自动分配)
/ip address add address=10.10.1.1/24 interface=ether2
/ip address add address=100.64.0.1/24 interface=ether3

# 关键①:到对端内网的静态路由,下一跳是骨干段对端地址
/ip route add dst-address=10.10.2.0/24 gateway=100.64.0.2

# 关键②:NAT 只作用于出 WAN(ether1) 的流量
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade

# 可选:给内网主机发 DHCP
/ip pool add name=dhcp_pool1 ranges=10.10.1.100-10.10.1.200
/ip dhcp-server add interface=ether2 address-pool=dhcp_pool1 disabled=no
/ip dhcp-server network add address=10.10.1.0/24 gateway=10.10.1.1 dns-server=223.5.5.5

R2 对应为:10.10.2.1/24 + 100.64.0.2/24,静态路由 10.10.1.0/24 via 100.64.0.1

设计精髓在关键②out-interface=ether1 限定 masquerade 只匹配出 WAN 的流量。内网互访流量走 ether3 骨干时是纯路由转发、不做 NAT,因此对端能看到真实的私网源地址——这就是"多 NAT 下内网互联"的核心原理(类似现实中 MPLS VPN / 专线互联的简化模型)。

四、配置主机并验证

VPCS 与 RouterOS 的 DHCP 握手有兼容性问题,直接配静态 IP:

# PC1
ip 10.10.1.10/24 10.10.1.1
save

# PC2
ip 10.10.2.10/24 10.10.2.1
save

验证结果:

PC1> ping 10.10.2.10 -c 3
84 bytes from 10.10.2.10 icmp_seq=1 ttl=62 time=107 ms   # 跨 NAT 内网互通 ✓

PC1> ping 223.5.5.5 -c 3
84 bytes from 223.5.5.5 icmp_seq=1 ttl=52 time=135 ms    # 出公网 ✓

首次 ping 前 1-2 个包 timeout 是正常现象:跨网段通信要经过 PC→R1→R2→PC 多跳 ARP 解析,ARP 缓存建立后即恢复。

ttl=62 是证据:ICMP 默认 TTL=64,经过 R1、R2 两跳减 2,说明流量走的是骨干段纯路由(若经过 NAT 转换则看不到这个特征)。

数据包路径复盘

以 PC1 ping PC2 为例:

  1. PC1 判断 10.10.2.10 不在本网段 → 发给网关 R1(10.10.1.1)
  2. R1 命中静态路由 10.10.2.0/24 via 100.64.0.2 → 从 ether3 转发至骨干
  3. R2 收到后发现目标是自己 ether2 的直连网段 → 交付 PC2
  4. 回程对称:PC2 → R2 → 10.10.1.0/24 via 100.64.0.1 → R1 → PC1

而 PC1 访问 223.5.5.5 时,流量从 R1 ether1 出 WAN,源地址被 masquerade 成 192.168.110.48——两条路径 NAT 行为完全不同。

小结

  • MikroTik CHR 是 GNS3 中最容易合法获取的真实路由器镜像,功能完整(NAT/DHCP/OSPF/BGP 都支持)
  • 多 NAT 内网互联的关键:NAT 规则要绑定出接口,只伪装出公网的流量,私网互访走骨干纯路由
  • 无硬件加速时 QEMU 用 TCG 模式可正常跑 CHR,延迟略高但不影响实验
  • 静态路由适合小规模;多台路由器互联时可在骨干段跑 OSPF 自动学习内网路由,本实验可直接扩展

更多推荐