野蛮模式/network-id 适用场景
野蛮模式/network-id 适用场景
关于主模式中的 Peer ID 问题
在主模式中,第 3、4 个包交互之后(DH 公钥和随机数交换),需要使用到 Pre-shared key(管理员配置的预共享密钥)值用于生成 SHEYID(预共享密钥方式认证:SKEYID = hash (pre-shared key ,Ni | Nr) ),此时是无法通过 Peer-ID 查找到,因为 Peer-ID 参数在第 5、6 个包中,而且还是被加密的,解密需要使用到 SHEYID 为材料生成的密钥 SHEYID_e,因此这个时候只能通过对方发起 IKE 协商的公网 IP 地址去查找 Peer 的 Pre-shared key 以确认其身份。
如此将引出一个问题,在对方(分部)为 PPPoE/DHCP 等动态 IP 场景中时,总部无法配置明确的对方 IP 和 Pre-shared key,而只能配置动态拨号方式的 IPsec VPN,如果我们选择第一阶段为主模式,因为 Peer-ID 在第 5、6 包携带,并且是加密的,因此 Hub 在主模式中是无法提前获知到 Peer-ID 信息的,也没办法根据 Peer-ID 信息去查找到底用哪一个 Pre-shared key,一般动态 IP 场景中主模式使用较少,而且就算使用主模式的话的 Peer-ID 配置为 any 的较多。
IKEv1 主模式拨号连接的匹配条件顺序(所有匹配条件都一致时,Spoke 发起的连接匹配 Hub 配置顺序的第一个拨号连接):
- local-gw:默认为拨号连接使用的接口 Primary IP,可以手动更改为设备上其他接口的 IP。
- IKEv1 Main mode + PSK。
- Proposal + DH group。
什么时候需要野蛮模式
Hub 端同一个接口 IP 上存在多条动态拨号的 IKEv1 主模式 IPsec VPN,且使用的算法、预共享密钥、DH 组一致。此时由于拨号 VPN 的目的 IP 都是 any(0.0.0.0),此时根本无法区分这两条 IPsec VPN 隧道,不知道拨号用户到底是匹配 Dia_VPN1 还是匹配 Dia_VPN2(FGT 的处理是优先匹配靠前的拨号 VPN),因此为了区分本地的多条动态拨号 VPN,则需要配置 Peer ID 参数,以便区分这本地的多条动态 IPsec VPN 隧道,例如:
- Dia_VPN1(动态拨号 VPN 野蛮模式):
Local ID:BJ
Peer ID:South-FGT
Dia_VPN2(动态拨号 VPN 野蛮模式):
- Local ID:BJ
- Peer ID:North-FGT
- Dia_VPN1(动态拨号 VPN 野蛮模式):
如果对方拨号用户 1 填写的 Local ID 是 South-FGT 则连接到 Dia_VPN1,如果对方拨号用户 2 填写的 Local ID 是 North-FGT 则连接到 Dia_VPN2。这样就可以将不通的拨号用户进行区分和分离,方便进行独立的 VPN 隧道、独立的策略进行控制。在这种需求的情况下:首先需要舍弃掉主模式,用野蛮模式,同时使用不同的 Peer-ID 来区分不同的动态 VPN 隧道。
IKEv1 野蛮模式拨号连接的匹配条件顺序(所有匹配条件都一致时,Spoke 发起的连接匹配 Hub 配置顺序的第一个拨号连接):
- local-gw:默认为拨号连接使用的接口 Primary IP,可以手动更改为设备上其他接口的 IP。
- IKEv1 Main mode + PSK。
- Proposal + DH group。
- Peer ID(开启客户端用户认证时使用 user.local.name)。
什么时候需要 network-id
在 IKEv2 的协商报文中,ID 信息包含在 IKE_AUTH 报文中,且被加密。所以会出现和 IKEv1 主模式一样的问题(同一个接口 IP 上存在多条动态拨号的 IKEv1 主模式 IPsec VPN,且使用的算法、预共享密钥、DH 组一致)。
Fortinet 使用 network-id 属性来解决此问题,该字段包含在 IKEv2 协商的第 1、2 个报文(IKE_SA_INIT)中,没有被加密,。
Hub: config vpn ipsec phase1-interface edit "Hub_1" set ike-version 2 set network-overlay enable set network-id 1 next end config vpn ipsec phase1-interface edit "Spoke1" set ike-version 2 set network-overlay enable set network-id 1 next endHub 在同一个接口 IP 上存在多条动态拨号的 IKEv2 IPsec VPN,且使用的算法、预共享密钥、DH 组一致,可以配置不同的 network-id 来区分不同的 Spoke 拨入连接。
config vpn ipsec phase1-interface edit "Hub_1" set type dynamic set interface "wan1" set ike-version 2 set network-overlay enable set network-id 1 next set type dynamic edit "Hub_2" set interface "wan1" set ike-version 2 set network-overlay enable set network-id 2 next end每个 Spoke 配置不同的 network-id 来连接 Hub 上对应的拨号连接。
Spoke1: config vpn ipsec phase1-interface edit "Spoke1" set interface "port2" set ike-version 2 set network-overlay enable set network-id 1 next end Spoke2: config vpn ipsec phase1-interface edit "Spoke1" set interface "port2" set ike-version 2 set network-overlay enable set network-id 2 next endIKEv2 拨号连接的匹配条件顺序(所有匹配条件都一致时,Spoke 发起的连接匹配 Hub 配置顺序的第一个拨号连接):
- local-gw:默认为拨号连接使用的接口 Primary IP,可以手动更改为设备上其他接口的 IP。
- IKEv1 Main mode + PSK。
- Proposal + DH group。
- network-id。
ADVPN 下的 network-id 或野蛮模式 ID
在 ADVPN 部署模式下,如果每个 Spoke 与 Hub 建立两条 IPSec 隧道,Spoke 与 Spoke 创建 shortcut 隧道前,需要注意配置 IKEv2 的 network-id 或野蛮模式 ID。如下举例的 ADVPN 环境,所有 IPSec 连接使用 IKEv2 建立。
ADVPN 部署,B1 和 B2 只有一条运营商线路接入,Hub 有两条运营商线路。
B1 和 B2 的单线路与 Hub 的两个线路接口分别创建 overlay IPSec 隧道 advpn1 和 advpn2。

初始状态下,B1 访问 B2 的流量将经过 B1 → advpn1 → Hub → advpn1 → B2。然后 Hub 将通过 advpn1 协助 B1 和 B2 之间协商建立 Shortcut 隧道。

- B1 和 B2 之间建立基于 advpn1 上的 Shortcut。
- 随后从 B1 访问 B2 的流量将经过 Shortcut _advpn1。
如果 Hub 的 port1 线路出现故障。

- Hub(port1)和 B1 之间的父隧道将关闭,Hub(port1) 和 B2 之间也会发生同样的情况。
- 同时,B1 和 B2 之间创建的 Shortcut_advpn1 会维持建立状态,因为 ADVPN Shortcut 的 lifetime 与其父隧道(advpn1)的 lifetime 无关。
- B1↔Hub 和 B2↔Hub 通过 advpn1 隧道建立的 BGP 邻居中断。
之后 B1 和 B2 之间的 BGP 路由通过 Hub 的 advpn2 收敛。从 B1 主动访问 B2 的流量会先经过 Hub 转发,因为 B1 和 B2 之间还没有通过 advpn2 创建 Shortcut。

Hub 将尝试通过 Advpn2 在 B1 和 B2 之间建立 Shortcut 隧道。
-**如果 B1 上的两条 IPSec 隧道配置了不同的 Network-id:**将在 Advpn2 上的 B1 和 B2 之间建立 advpn2 上的 Shortcut。

- advpn2 和 advpn1 上的 Shortcut 隧道都建立在相同 Underlay 线路 IP 上:B1 (port1) ↔ B2 (port1)。
- 这两个相同 Underlay 源目 IP 的 Shortcut 隧道可以同时建立,因为每个 Overlay IPSec 隧道都配置了不同的 network-id,B2 可以根据不同的 network-id 来区分隧道并与之建立。
- BGP 路由收敛后,B1 访问 B2 的流量流经 advpn2 上的 Shortcut 传输。
-如果 B1 上的两条 IPSec 隧道没有配置 Network-id:B2 忽略 B1 在 advpn2 上的 Shortcut 隧道建立请求。

- 因为在相同的 Underlay IP 地址 B1 (port1) ↔ B2 (port1) 上已经存在 Shortcut 隧道(基于 advpn1)。如果不为每个 Overlay 隧道配置不同的 Network-id,则 B2 无法区分两个 advpn 上的 Shortcut 并同时建立两个相同 Underlay 的 Shortcut 隧道。
- 只要 B1 对 B2 Advpn1 上的 Shortcut 隧道建立后,B1 通过 Advpn2 向 B2 发送任何流量,都会通过 Hub 进行转发,因为此时 advpn2 上的 Shortcut 隧道无法建立。
在 Hub 和 Spoke 上都要配置 network-id,且每个线路上 Hub 和 Spoke 的 network-id 保持一致。
Hub: config vpn ipsec phase1-interface edit "advpn1" set type dynamic set interface "port1" set ike-version 2 set network-overlay enable set network-id 1 ... next edit "advpn2" set type dynamic set interface "port2" set ike-version 2 set network-overlay enable set network-id 2 ... next end B1&B2: config vpn ipsec phase1-interface edit "advpn1" set ike-version 2 set interface "port1" set remote-gw x.x.x.x set network-overlay enable set network-id 1 ... next edit "advpn2" set ike-version 2 set interface "port1" set remote-gw y.y.y.y set network-overlay enable set network-id 2 ... next end对于 IKEv1,IKEv1 并不支持 network-id。但也可以通过如下两种方式部署上述的 ADVPN 场景:
ADVPN 隧道可以部署为 IKEv1 的野蛮模式,Spoke 之间相同 Underlay IP 的 Shortcut 可以通过配置不同的野蛮模式 ID 来进行区分。
使用 IKEv1 的主模式/野蛮模式,并不配置 ID。通过开启 Shortcut 隧道与父隧道的绑定关系,当 Shortcut 隧道的父隧道中断后,所有关联的 Shortcut 隧道会一起关闭。这样就不会出现上述 Spoke 之间同时存在两个 Shortcut 需要建立的情况,这个配置需要在 Spoke 上的 IPSec 一阶段配置(
set auto-discovery-shortcuts dependent):config vpn ipsec phase1-interface edit "advpn1" set ike-version 1 set interface "port1" set remote-gw x.x.x.x set auto-discovery-receiver enable set auto-discovery-shortcuts dependent //Shortcut隧道状态依赖父隧道状态,默认为independent// ... next edit "advpn2" set ike-version 1 set interface "port1" set remote-gw y.y.y.y set auto-discovery-receiver enable set auto-discovery-shortcuts dependent //Shortcut隧道状态依赖父隧道状态,默认为independent// ... next end