前面我们强调过 GRE 不可以穿越 NAT,这里其实我们变换一下思路,把 GRE 的源与目的 IP 修改为两端的 Loopback 口 IP,即两端设备的内网 IP,通过总部与分支机构的内网 IP 建立 GRE 隧道,利用 IPsec 的穿越 NAT 特性统一接入不同网络场景,再通过动态路由协议 OSPF、BGP 统一控制路由层面,即可满足我们之前提到的所有需求,并且可以统一公网对接模式.
在横向扩展方面,我的思路是通过大量低端的设备完成,将 VPN 链路分散开来,某一台设备故障只会影响一小部分 VPN 链路,通过路由协议来维持全网的统一性.买十台低端路由器用以下方案组网,永远比你买一台高端设备睡得踏实.
实验配置
手边现有几台华为设备,以此配置举例,其他厂商的配置思路一模一样.
规划需求
我们将配置分为几个阶段:基础配置、IPsec 配置、GRE 配置、BGP 配置
演示拓扑如下:
基础接口配置部分
目标:实现分支能够访问到总部的公网固定 IP,分支可以是公网固定 IP,也可以是内网 IP 通过其他 NAT 设备访问总部,创建 Loopback 10 接口用于后面建立 IPsec VPN 使用.
总部:
sysname Hub
# 配置 WAN 口 IP
interface GigabitEthernet0/0/0
ip address 200.1.1.100 255.255.255.0
# 配置用于建立 GRE Tunnel 的 Loopback 口 IP
interface LoopBack10
ip address 172.20.1.1 255.255.255.255
分支:
sysname Spoke
# 配置 WAN 口 IP,如处于内网
interface GigabitEthernet0/0/0
ip address 192.168.1.100 255.255.255.0
# 配置用于建立 GRE Tunnel 的 Loopback 口 IP
interface LoopBack10
ip address 172.20.1.2 255.255.255.255
分支防火墙:
确保 192.168.1.100 可以经过 SNAT 访问 200.1.1.100
公网:
确保总部出口 200.1.1.100 可以和分支机构公网出口 IP 通
基础路由配置部分
目标:确保两端经过 IPsec 加密流量从物理接口出去
总部:
ip route-static 172.20.1.2 255.255.255.255 GigabitEthernet0/0/0 200.1.1.1 description REMOTE-LOOPBACK10
分支:
ip route-static 172.20.1.1 255.255.255.255 GigabitEthernet0/0/0 192.168.1.1 description REMOTE-LOOPBACK10
IPsec 配置部分:
目标:总部实现一个 IPsec 配置模板,对接不同网络场景的分支机构,随着分支机构的增加不需要额外的 IPsec 配置.
总部采用 Template 模板方式,ESP 协议,开启野蛮模式、NAT 穿越. 分支采用 IPsec 策略配置一条或多条 IPsec 隧道,开启野蛮模式、NAT 穿越,指向总部的公网 IP,并且匹配 ACL,ACL 匹配的源 IP 与目的 IP 是双方的 Loopback 10 接口 IP 地址.注意:实验中只有分支机构需要指定 remote-address.
两端都采用 IKE 协商方式对接 IPsec.这里不采用 ike v2 的模式,因为 v2 不支持野蛮模式,无法传递给总部感兴趣 ACL(security ACL).
这里放上一张主模式与野蛮模式的协商过程对照图:
贴一段华为产品手册里总结的话:
- 如果发起方的 IP 地址不固定或者无法预知,而双方都希望采用预共享密钥验证方法来创建 IKE SA,则只能采用野蛮模式.
- 如果发起方已知响应方的策略,或者对响应者的策略有全面的了解,采用野蛮模式能够更快地创建 IKE SA.
总部:
# 创建 IPsec 安全提议
ipsec proposal PROPOSAL
esp authentication-algorithm sha2-256
esp encryption-algorithm aes-128
# 创建 IKE 安全提议
ike proposal 5
encryption-algorithm aes-cbc-128
dh group2
authentication-algorithm sha2-256
prf hmac-sha2-256
# 配置 ipsec 对等体
ike peer REMOTE v1
exchange-mode aggressive #野蛮模式
pre-shared-key cipher test123 #两端 PSK 密码需要保持一致
ike-proposal 5 #关联 ike 安全提议
nat traversal #两端即使都为公网 IP,也可以开启 nat 穿越功能,不影响 IPsec VPN 建立.
# 注意:这里不指定 remote-name 和 remote-address,总部需要同时与多个分支建立多条 IPsec VPN.
# 创建 ipsec 策略模板,关联 ike 对等体和 IPsec 安全提议
ipsec policy-template TEMP 10
ike-peer REMOTE
proposal PROPOSAL
#注意:由于每条 VPN 加密数据流源目的均不同,这里不需要关联感兴趣数据流(security ACL),由分支机构负责传递 ACL 过来.
# 关联 IPsec 模板与 IPsec Policy,只能关联一个模板
ipsec policy POLICY 10 isakmp template TEMP
# 应用 IPsec 策略到接口上
interface GigabitEthernet0/0/0
ipsec policy POLICY
分支:
# 创建 IPsec 安全提议
ipsec proposal PROPOSAL
esp authentication-algorithm sha2-256
esp encryption-algorithm aes-128
# 创建 IKE 安全提议
ike proposal 5
encryption-algorithm aes-cbc-128
dh group2
authentication-algorithm sha2-256
prf hmac-sha2-256
# 配置 ipsec 对等体
ike peer REMOTE v1
exchange-mode aggressive
pre-shared-key cipher test123 #两端 PSK 密码需要保持一致
ike-proposal 5 #关联 ike 安全提议
nat traversal
remote-address 200.1.1.100 #只有分支这里需要指定总部的公网 IP
# 注意:作为分支需要指定总部的 remote-address,不需要修改验证类型为 name.
acl number 3000 ?
# 匹配感兴趣数据流,源为分支设备的 Loopback 10 IP,目的为总部设备的 Loopback 10 IP
rule 5 permit ip source 172.20.1.2 0 destination 172.20.1.1 0
# 创建 ipsec 策略,关联 ike 对等体和 IPsec 安全提议,关联感兴趣数据流(security ACL)
ipsec policy POLICY 10 isakmp
security acl 3000
ike-peer REMOTE
proposal PROPOSAL
# 注意:如果分支同时与多个总部建立 IPsec VPN,在此创建多个 Policy 节点,例如:"ipsec policy POLICY 20 isakmp"
# 应用 IPsec 策略到接口上
interface GigabitEthernet0/0/0
ipsec policy POLICY
GRE 配置部分:
目标:通过两端内网 Loopback 口建立起 GRE Tunnel,用于以后运行动态路由协议,开启 keepalive 功能.
(编辑:ASP站长网)
|