
情况
我必须在网络上的两个站点之间建立一个VPN连接。服务器机房似乎已经安装了C-Terra网关4.2版安全网关。该方案很简单。供应商甚至发布了推荐的配置脚本。但是...供应商脚本使用三个网络接口,而我的网关只有两个。
我冲泡咖啡,记住我的CCNA并尝试使用我拥有的-管理型交换机中的免费端口。
我的网络
我的网络是在一个广播域中两个地理位置分开的站点。地址空间:10.10.205.0/24:

在两个安全网关手上,带有C-Terra L2软件包的C-Terra网关版本4.2。
关于C-Terra L2
软件包该软件包使您可以将一个或多个网关接口切换为PROMISC模式。PROMISC接口截取数据链接帧,C-Terra L2将其封装在UDP中。
然后对UDP数据包进行加密(封装在ESP中)。这将创建L2-over-L3 VPN连接。C-Terra L2已预安装在所有安全网关上,并通过单独的许可证激活。
在推荐的方案中,安全网关位于网络的边缘,并为管理分配了单独的接口:

为了更加清楚,我将描述这些接口:
- Gi0 / 0-PROMISC接口;
- Gi0 / 1-L3 WAN接口;
- Gi0 / 2-专用管理界面。我知道我必须通过VPN隧道来管理第二个安全网关。
决断
当我在Habré上阅读有关802.1Q的内容时,第一杯咖啡结束了-我记得CCNA。切换设备时,第二个杯子已经冷却(我将用微波炉加热),如图所示:

我区分三种流量:
- R1和R2设备之间的主要流量。我将其指定为BULK DATA,并将其放入VLAN 205中。在站点之间传输之前,必须对BULK DATA进行加密;
- 网关管理流量-MGMT。我将其带到VLAN10。必须对到远程站点网关的MGMT通信进行加密。
- 加密后的BULK DATA和MGMT我将指定为ESP DATA并将其放入VLAN 100中。
根据我的估计,网络上的BULK DATA / ESP DATA传输将如下所示(绿线代表未加密的流量,红色-加密):

用于本地站点网关控制的MGMT传输:

用于远程站点网关控制的MGMT / ESP DATA传输:

5个设定步骤
步骤1.处理BULK DATA
为BULK DATA选择一个单独的VLAN 205,为此,我将SW1和SW2设备的Gi0 / 2接口设置为使用VLAN 205的访问模式:
sw1(config)#
interface gi0/2
description BULK_TO_R1
switchport access vlan 205
no shutdown
sw2(config)#
interface gi0/2
description BULK_TO_R2
switchport access vlan 205
no shutdown
我设置网关GW1和GW2 PROMISC接口的接口Gi0 / 0。要将大容量数据传递到PROMISC接口,我将中继配置为PROMISC接口:
sw1(config)#
interface gi0/0
description LINK_TO_PROMISC_GW1
switchport mode trunk
switchport trunk allowed vlan 205
switchport trunk encapsulation dot1q
no shutdown
sw2(config)#
interface gi0/0
description LINK_TO_PROMISC_GW2
switchport mode trunk
switchport trunk allowed vlan 205
switchport trunk encapsulation dot1q
no shutdown

步骤2.处理本地MGMT
根据计划,MGMT流量正在承载VLAN10。VLAN10的地址空间为10.76.76.128/28。
在SW1和SW2设备上,我创建vlan10虚拟接口:
sw1(config)#
interface vlan10
ip address 10.76.76.129 255.255.255.240
no shutdown
sw2(config)#
interface vlan10
ip address 10.76.76.142 255.255.255.240
no shutdown
我将VLAN 10设为本机VLAN,以免在网关上配置802.1Q接口:
sw1(config)#
interface gi0/1
description LINK_TO_WAN_GW1
switchport mode trunk
switchport trunk allowed vlan 10
switchport trunk native vlan 10
switchport trunk encapsulation dot1q
no shutdown
sw2(config)#
interface gi0/1
description LINK_TO_WAN_GW2
switchport mode trunk
switchport trunk allowed vlan 10
switchport trunk native vlan 10
switchport trunk encapsulation dot1q
no shutdown

我配置安全网关的Gi0 / 1接口:
GW1(config)#
interface gi0/1
ip address 10.76.76.137 255.255.255.240
no shutdown
GW2(config)#
interface gi0/1
ip address 10.76.76.138 255.255.255.240
no shutdown
现在,可以从SW1设备通过SSH使用GW1:
sw1#ssh –l root 10.76.76.137
Password:
S-Terra Gate 4.2.18201 (amd64)
root@GW1~#
同样,可以从SW2设备通过SSH访问GW2:
sw2#ssh –l root 10.76.76.138
Password:
S-Terra Gate 4.2.18201 (amd64)
root@GW2~#
不错,倒了另一杯咖啡。
步骤3.处理到远程站点网关的
MGMT必须加密到远程站点网关的MGMT通信。为此,我将通过VPN投掷VLAN 10。从PROMISC接口截获的所有流量都将进入VPN隧道。我将添加到PROMISC接口VLAN 10的中继:
sw1(config)#
interface gi0/0
description LINK_TO_PROMISC_GW1
switchport trunk allowed vlan 10, 205
sw2(config)#
interface gi0/0
description LINK_TO_PROMISC_GW1
switchport trunk allowed vlan 10, 205
不要浪费半小时进行故障排除!
PROMISC接口不应获取ESP数据,因此在以下选项中将VLAN 100从LINK_TO_PROMISC_GW1和LINK_TO_PROMISC_GW2中继中排除很重要:
switchport trunk allowed vlan 1-99,101-4096
步骤4.我到达ESP DATA
我在GW1和GW2网关的VLAN 100中选择了ESP DATA。VLAN 100的地址空间:192.168.10.0/30
为此,在网关GW1和GW2的WAN接口Gi0 / 1上,我创建了802.1Q接口Gi0 / 1.100。
来自此类接口的传出流量将属于VLAN 100:
GW1(config)#
interface gi0/1.100
ip address 192.168.10.1 255.255.255.252
no shutdown
GW2(config)#
interface gi0/1.100
ip address 192.168.10.2 255.255.255.252
no shutdown

我允许通过VLAN 100到中继LINK_TO_WAN_GW1和LINK_TO_WAN_GW2:
sw1(config)#
interface gi0/1
description LINK_TO_WAN_GW1
switchport trunk allowed vlan 10,100
sw2(config)#
interface gi0/1
description LINK_TO_WAN_GW2
switchport trunk allowed vlan 10,100
设备SW1和SW2之间的链路还必须传输标记的VLAN 100流量:
sw1(config)#
interface gi0/3
description LINK_TO_SW2
switchport mode trunk
switchport trunk allowed vlan 100
switchport trunk encapsulation dot1q
no shutdown
sw2(config)#
interface gi0/3
description LINK_TO_SW1
switchport mode trunk
switchport trunk allowed vlan 100
switchport trunk encapsulation dot1q
no shutdown
步骤5.使用GOST配置C-Terra L2和IPsec VPN
使用配置文件/opt/VPNagent/etc/l2.conf在操作系统中配置C-Terra L2。对于GW1:
vif tap0
bridge br0
capture eth0
remote 192.168.10.2
mssfix 1400
passtos
其中:
capture eth0-选择PROMISC接口,远程192.168.10.2-IPsec对等方的IP地址(GW2网关的Gi0 / 1.100接口)。
对于GW2:
vif tap0
bridge br0
capture eth0
remote 192.168.10.1
mssfix 1400
passtos
配置IKE / IPsec参数。对于GW1:
网关将使用主机名作为标识符,设置用于身份验证的预定义密钥(用于身份验证的规则需要使用数字证书,稍后将对其进行更改):
GW1(config)#
crypto isakmp identity hostname
ip host GW2 192.168.10.2
crypto isakmp key KEY hostname GW2
配置失效对等体检测(DPD)参数:
GW1(config)#
crypto isakmp keepalive 10 2
crypto isakmp keepalive retry-count 5
我设置了IPsec第一阶段参数:
GW1(config)#
crypto isakmp policy 1
encr gost
hash gost3411-256-tc26
auth pre-share
group vko2
我为IPsec阶段II设置了参数:
GW1(config)#
crypto ipsec transform-set TSET esp-gost28147-4m-imit
mode tunnel
由于PROMISC L2接口截获的帧都封装在UDP中,因此定义了加密流量的访问列表:
GW1(config)#
ip access-list extended LIST
permit udp host 192.168.10.1 host 192.168.10.2
我创建了一个加密映射并将其绑定到Gi0 / 1.100:
GW1(config)#
crypto map CMAP 1 ipsec-isakmp
match address LIST
set transform-set TSET
set peer 192.168.10.2
interface gi0/1.100
crypto map CMAP
我指定通过IPsec对等方的IP地址的默认路由:
GW1(config)#
ip route 0.0.0.0 0.0.0.0 192.168.10.2
GW2网关配置:
GW2(config)#
crypto isakmp identity hostname
ip host GW1 192.168.10.1
crypto isakmp key KEY hostname GW1
crypto isakmp keepalive 10 2
crypto isakmp keepalive retry-count 5
crypto isakmp policy 1
encr gost
hash gost3411-256-tc26
auth pre-share
group vko2
crypto ipsec transform-set TSET esp-gost28147-4m-imit
mode tunnel
ip access-list extended LIST
permit udp host 192.168.10.2 host 192.168.10.1
crypto map CMAP 1 ipsec-isakmp
match address LIST
set transform-set TSET
set peer 192.168.10.1
interface gi0/1.100
crypto map CMAP
ip route 0.0.0.0 0.0.0.0 192.168.10.1
发生了吗
从设备R1,我ping到R2:
R1#ping 10.10.205.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.205.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 2/2/3 ms</code>
R2 ICMP. ? ARP R1 R2:
<source>R1#show arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.205.1 - aabb.cc00.5020 ARPA GigabitEthernet0/2
Internet 10.10.205.2 54 aabb.cc00.6020 ARPA GigabitEthernet0/2
R2#show arp
Protocol Address Age (min) Hardware Addr Type Interface
Internet 10.10.205.1 52 aabb.cc00.5020 ARPA GigabitEthernet0/2
Internet 10.10.205.2 - aabb.cc00.6020 ARPA GigabitEthernet0/2
R1和R2设备假定它们在同一广播子网中。
SW1和SW2设备认为它们通过两条链路相互连接:
sw1#show cdp neighbors
Device ID Local Intrfce Holdtme Capability Platform Port ID
sw2 Gi0/0 146 R S I Linux Uni Gi0/0
sw2 Gi0/3 146 R S I Linux Uni Gi0/3
R1 Gi0/2 156 R B Linux Uni Gi0/2
sw2#show cdp neighbors
Device ID Local Intrfce Holdtme Capability Platform Port ID
sw1 Gi0/0 140 R S I Linux Uni Gi0/0
sw1 Gi0/3 140 R S I Linux Uni Gi0/3
R2 Gi0/2 156 R B Linux Uni Gi0/2
尝试从SW1设备通过SSH连接到GW2:
sw1#ssh –l root 10.76.76.138
Password:
S-Terra Gate 4.2.18201 (amd64)
root@GW2~#
结论:站点1和2透明链接到单个广播域。我将检查通道是否加密:
GW1设备上的IPsec隧道统计信息:
root@GW1:~# sa_mgr show
ISAKMP sessions: 0 initiated, 0 responded
ISAKMP connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) State Sent Rcvd
1 2 (192.168.10.1,500)-(192.168.10.2,500) active 31378 31502
IPsec connections:
Num Conn-id (Local Addr,Port)-(Remote Addr,Port) Protocol Action Type Sent Rcvd
1 2 (192.168.10.1,*)-(192.168.10.2,*) 17 ESP tunn 508224 27672
在192.168.10.1和192.168.10.2之间建立了IPsec隧道。
我检查了在SW1和SW2设备之间仅传输ESP流量,没有计算STP。这是来自SW1的gi0 / 3接口的流量转储:

最终
我喝了三杯咖啡-然后我整夜没有睡觉,但是我不必购买新硬件和更新。也许值得,供应商在4.3版本中想到了L2。我正在考虑采用4.3版进行测试。
匿名工程师
t.me/anonimous_engineer