【网络协议安全】IPSec+VPN实验

网络协议安全实验三,建立点对点IP隧道然后在隧道上使用IPSec

这个实验三跟揍了我两天一样,实验书是看不懂一点的,接口是总是放反的,IP和网关是永远忘记配的,问题根源是永远找不到的

但是可能是我最理解的一个,因为没法照搬书上的,果然书烂催人理解

顺便记一下字体设置

image-20251107114243070

环境配置

参照

网络物理结构:

image-20251107105902763

网络逻辑结构:

image-20251107105919328

放置和连接

路由器需要添加接口。点击电源(关闭),然后选择NM-2FE2W,拖到左边的黑框里

The NM-2FE2W Module provides two Fast-Ethernet interfaces for use with copper media

image-20251107132334543

然后再点一次电源(开机),就有了四个接口

image-20251107132510653

然后连接

image-20251107133723139

配路由器的ip和子网掩码

根据这个图来配

image-20251107140702605每个路由器的每个连了线的接口都要配一下IP,路由器的接口对应关系和书上不太一样,我这里是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Router0:
Fa0/0:192.168.1.1
Fa0/1:192.1.1.1

Router1:
Fa0/0:192.168.2.1
Fa0/1:192.1.2.1

Router2:
Fa0/0:192.168.3.1
Fa0/1:192.1.3.1

Router3:
Fa0/0:192.1.1.2
Fa0/1:192.1.6.1
Fa1/0:192.1.4.1

Router5:
Fa0/1:192.1.6.2
Fa0/0:192.1.3.1
Fa1/0:192.1.5.2

Router4:
Fa0/0:192.1.2.2
Fa1/0:192.1.4.2
Fa0/1:192.1.5.1

建立点对点IP隧道

分配OSPF区域

命令解析

OSPF:Open Shortest Path First(开放式最短路径优先)

OSPF路由用于创建边缘路由器连接公共网络接口之间的传输路径

基本命令:

1
2
router ospf 1 // 启用 OSPF 进程
network 192.1.1.0 0.0.0.255 area 0 // 宣告网络(将接口加入 OSPF 区域 0)

router ospf 01这个1是OSPF进程号,只在本地有效,可以随便写。

192.168.1.0 是接口所在的网络地址,0.0.0.255 是通配符掩码(不是子网掩码)。这里的意思是匹配从 192.1.1.0192.1.1.255 的所有IP地址。

area 0 是主干区域。

这个命令的作用是,让路由器检查自己的所有接口,如果满足匹配条件,就在该接口上启动OSPF进程,将这个接口划入OSPF区域。

分配区域

将公网的三台路由器所有接口,以及边缘路由器连接公网的接口,都分配到同一个OSPF区域area 1。其实就是在每个路由器上都执行一遍命令,覆盖到所有接触公网的接口就行了。

image-20251107144310172

提示说得有一个up的接口才能运行OSPF进程。

查看接口状态

1
show ip interface brief

image-20251107145010899

结果都是administratively down啊,怎么是默认关闭的!回去把接口都打开再回来

点这个port status后面的on(所以原来前面很多线红的是因为没打开啊…)

image-20251107150501026

继续配。比如Router3:

image-20251107155955399

按照这个步骤完成剩下所有路由器的配置。

image-20251107161454757

检查

查看OSPF链路状态数据库,包含区域内所有路由器通告的链路状态信息

1
show ip ospf database	

看不太懂但是反正1-6都在,应该是没问题

image-20251107162636245

叫ai解析一下:

  1. Router Link States
    列出所有在 Area 1 内产生 Type-1 LSA 的路由器(每台路由器一行)。
    • Link ID = 产生该 LSA 的路由器 RID(通常是回环口地址)。
    • ADV Router = 同样就是 RID。
    • Age/Seq#/Checksum 用于新旧比对与校验。
    • Link count = 这台路由器在 Area 1 里通告的链路数量(接口/邻居)。
      说明:Area 1 当前有 6 台路由器,其中 192.1.5.1、192.1.6.x 三台各连了 3 条链路,其余只连 1 条。
  2. Net Link States
    列出 Area 1 内所有 Type-2 LSA(DR 产生的网络 LSA)。
    • Link ID = DR 在该广播网段接口的 IP 地址(不是 RID)。
    • ADV Router = 哪台路由器当 DR 就由谁通告(通常是 RID)。
      说明:Area 1 里存在 6 个广播/NBMA 网段,已经选出 DR,且 DR 都在正常发布网络 LSA。

完成分配后,各路由器应该都是互相可达的

定义和配置IP隧道

命令解析

1
2
3
4
interface tunnel 1 // 创建编号为1的IP隧道接口,进入该隧道接口的隧道接口配置模式。
ip address 192.168.4.1 255.255.255.0 // 为隧道接口配置私有IP地址192.168.4.1和子网掩码255.255.255.0
tunnel source FastEthernet0/1 // 指定隧道源端的全球IP地址
tunnel destination 192.1.2.1 // 指定隧道目的端的全球IP地址

source必须填本端路由器上的接口,destination填对端的可达地址

需要在隧道两端机器上都配置一遍

配置IP隧道

在三个边缘路由器(我这是012)上分别建两条隧道,通往另外两个

千万注意要看准接口…以及隧道两端给隧道的地址需要不一样,且在同一网段

在Router0:

image-20251107170526910

image-20251107170827279

这会发现Router2选错路由器了…回去重搞(设IP,加OSPF)

image-20251107191500282

检查

查看本机的隧道网络(其实是全部反正包含了)

1
show ip interface brief

image-20251108110530688

最后建立的隧道大概是这样:

image-20251107211520776

RIP路由

RIP(Routing Information Protocol)

命令:

1
2
Router(config)# router rip
Router(config-router)# network [直连网络地址]

我们要让三个内网以及刚刚建好的隧道网络都用RIP连起来,那么这些网络的网段都要用network命令添加一遍

只能添加本路由器接口所在网段,所以要在三个边缘路由器都加一遍(盯着隧道网络那张图加)

比如说Router0:

1
2
3
4
Router(config)#router rip
Router(config-router)#network 192.168.1.0
Router(config-router)#network 192.168.4.0
Router(config-router)#network 192.168.6.0

image-20251107212259023

image-20251107212531614

image-20251107212640756

检查:

查看通过RIP学习到的路由

1
show ip route rip

查看RIP路由数据库

image-20251107213936268

检查路由表

(此时此人又发现边缘路由器接内网那边的接口没配置IP,回去配了)

路由表解析

刚配置完成(或者有修改)的话可能需要等上一段时间,等RIP更新完表项

路由项类型(路由来源代码)很多,这里只出现了三类(都是以该路由器为标准):

1
2
3
C - connected: 通往或直接连接(包括隧道网络)
O - OSPF:没有直接连接的公共子网,由OSPF创建
R - RIP:没有直接连接的公共内部,由RIP创建

查看路由表命令:

1
Router#show ip route

后来问了同门gui的查看方法:点右侧工具栏的放大镜(Inspec),点路由器,选择routing table

image-20251108094101589

边缘路由器的路由表

直接相连(C)应该有四项,两个接口网段+两个隧道网段

O有五项,公网六个网段减去直接相连的一个

R有四项,内网两个(也是减去直接相连的之后)各一项+不直接相连的那个隧道网络有两项(因为可以走左边也可以走右边)

Router0:

image-20251107223009636

Router1:

image-20251107223318414

Router2:

image-20251107223248979

中间路由器的路由表

三个接口所以三个C

O有四项,公网六个网段减去直接相连的三个,共三个网段,其中有个有两项,因为走哪边跳数都一样

Router3:

image-20251107223451559

Router4:

image-20251107223543666

Router5:

image-20251107223615822

PC0 Ping Server2

排查问题

发包的时候提示:

image-20251108095342650

看了下感觉是因为,没给server配IP()回去配了下。然后fail了,发现PC0也没配IP()

继续fail,发现是得给server和PC0配网关()跨网段传输必须要网关的

Config → Global → Gateway,输入所在网段的路由器接口 IP。比如说这个server,就得配成Router2的Fa0/0接口的IP

image-20251108111629901

还是fail。从PC0往外一步步ping看看

Router0左右都没问题,到Router3左端就不通了。

image-20251108113054947

ai说是Router3不知道该怎么回包,没有去往192.168.1.0的路由。也是,没在中间路由器上搞路由来着。那就不走中间,直接去边缘路由器吧,走隧道

到Router2左右都是通的

image-20251108115038042

等一下怎么通了()

image-20251108115124680

模拟操作&查看报文

也是顺利到达了

image-20251108115309985

查看报文结构:选中一条,点右边的Info,弹出来窗口点inbound PDU details

看内网中报文,这里选switch到Router0的

image-20251108120156403

看公网中的报文,这里选Router3到Router5的。

外层source是192.1.1.1,也就是Router0的公网接口ip;dest是192.1.3.1,Router2的公网接口ip。内层还是一样的

image-20251108120033877

IPSec VPN

在点对点IP隧道的基础上实现安全通信,双向身份鉴别+保证数据的完整性和保密性

还是用之前那个隧道,Router0到Router2

配置安全策略

隧道两端完成安全策略配置过程,指定建立安全传输通道使用的加密算法3DES、报文摘要算法MD5、共享密钥鉴别机制和DH组号DH-2。

在隧道两端,也就是Router0和Router2,分别配置:

1
2
3
4
5
6
7
8
Router(config)#crypto isakmp policy 1 // 定义编号和优先级为1的安全策略
Router(config-isakmp)#authentication pre-share // 使用共享密钥鉴别机制
Router(config-isakmp)#encryption 3des // 指定加密算法3DES
Router(config-isakmp)#hash md5 // 报文摘要算法MD5
Router(config-isakmp)#group 2 // 指定Diffle-Hellman组标识符 2
Router(config-isakmp)#lifetime 3600 // 安全传输通道的寿命
Router(config-isakmp)#exit
Router(config)#crypto isakmp key 1234 address 0.0.0.0 0.0.0.0 // 配置共享密钥1234,另一端任意

image-20251108161857976

image-20251108162259060

配置IP Sec变换集

隧道两端通过变换集确定IPSec使用的安全协议以及相关算法

tunnel是变换集名字,esp-3des esp-md5-hmac是选择ESP作为安全协议后,指定的加密算法和HMAC算法。

1
Router(config)#crypto ipsec transform-set tunnel esp-3des esp-md5-hmac

image-20251108162744257

image-20251108162808526

配置分组过滤器

建一个编号101的ACL,允许GRE协议的,src=192.1.1.1,dest=192.1.3.1的报文通过,剩下的IP报文全部deny

注意一下源和目的不要写反了

1
2
Router(config)#access-list 101 permit gre host 192.1.1.1 host 192.1.3.1
Router(config)#access-list 101 deny ip any any

image-20251108163513138

image-20251108163919402

配置加密映射

将IP Sec变换集和分组过滤器绑定在一起

1
2
3
4
5
6
Router(config)#crypto map tunnel 10 ipsec-isakmp // 创建ipsec-isakmp环境下的加密映射,名tunnel,序号10
Router(config-crypto-map)#set peer 192.1.3.1 // 指定安全关联的另一端的IP地址
Router(config-crypto-map)#set pfs group2 // 使用Diffle-Hellman,使用组标识符2对应的参数
Router(config-crypto-map)#set security-association lifetime seconds 900 // 安全关联寿命
Router(config-crypto-map)#set transform-set tunnel // 安全关联使用变换集tunnel指定的协议和算法
Router(config-crypto-map)#match address 101 // 指定101分组过滤器

image-20251108202559340

image-20251108203203497

作用加密映射

将刚刚定义的加密映射作用到某个接口上

比如Router0,去往Router2的接口是Fa0/1,那么就把刚刚定义的加密映射tunnel作用到接口Fa0/1

1
2
Router(config)#interface FastEthernet0/1
Router(config-if)#crypto map tunnel

image-20251108203541928

同理,Router2这边接口应该是Fa0/1

image-20251108203702600

检查

1
2
3
4
5
6
7
8
# 检查ISAKMP SA
Router# show crypto isakmp sa

# 检查IPSec SA
Router# show crypto ipsec sa

# 检查加密映射
Router# show crypto map

问题很大。IKE阶段1还没建起来

image-20251108210037936

检查两边的IKE策略

1
Router#show crypto isakmp policy

没问题,一模一样的

image-20251108212015517

image-20251108212043197

检查预共享密钥等等

1
show run

image-20251108213552856

啥都对啊,我决定尝试指定IKE的对端IP了

…发现ACL的src和dst写反了…Router0的应该从192.1.1.1到192.1.3.1。删掉重写

1
Router(config)# no access-list 101

image-20251108212908007

image-20251108212943820

然后重新挂接口。再检查,完全胜利

image-20251108215018116

查看报文

再次打开模拟操作模式,从PC0往server2发包,成功。从Info查看报文信息,这回看outbound

内层IP分组,没啥好说的,src和dst都是原始的

image-20251108204243614

外层IP分组

image-20251108215119527

外层IP分组封装成ESP

image-20251109232808990