网络实验复杂组网

 网络  MPLS  VPN 󰈭 6269字

实验内容

本实验将模拟一个全国范围的银行主干网络, 采用总行数据中心、省行和地市行的三级架构,业务接入基于MPLS VPN体系结构进行部署。充分考虑网络的安全性和可靠性规划网络拓扑结构,根据业务接入需求统一规划VPN、IP地址和子网,采用设备备份、链路备份、路由备份等技术保证网络的可靠性。

实验分析

体系架构

实验的主干网将分为4个自治系统, 所有的业务均采用VPN方式接入骨干网, 网络拓扑结构如下所示:

其中AS100与AS200为南北两个数据中心, 连接重要的服务器, AS300与AS400则代表省行和地市行网络.

跨域方案选择

本实验主要使用BGP/MPLS VPN跨域技术, 在多个不同的自治域中实现各类VPN业务. 在RFC2547bis提出的三种跨域方案中, 由于MULTIHOP-EBGP(Option C)方案更加符合MPLS VPN体系架构的特点, ASBR不保存VPN路由, VPN路由仅在PE设备间保存和发布, R设备仅负责数据转发, 使得网络结构清晰, 易于维护, 不仅减轻了ASBR的工作负担, 又提高了网络的安全性和拓展性. 基于以上的考虑, 在本实验中自然将Option C作为MPLS VPN跨域方案的选择.

VPN划分

VPN的划分采用先纵后横划分方式, 先业务后地域. VPN业务接入网采用172网段的私网地址, 每个VPN划分16个子网, 每个子网最多14台主机, 具体的划分如下所示:

 1|------|---------------|
 2| VPN  | IP地址        |
 3|------|---------------|
 4| VPN1 | 172.21.*.0/28 |
 5| VPN2 | 172.22.*.0/28 |
 6| VPN3 | 172.23.*.0/28 |
 7| VPN4 | 172.24.*.0/28 |
 8| VPN5 | 172.25.*.0/28 |
 9| VPN6 | 172.26.*.0/28 |
10| VPN7 | 172.27.*.0/28 |
11|------|---------------|

其中:

  • VPN1,2为地市行下各接入用户的网络

  • VPN3用于VOIP网络电话, 连接AS300与AS400

  • VPN4为视频播放服务器, 为接入用户提供视频服务

  • VPN5为RADIOS认证服务器, 为了平衡整体网络流量将其连接到AS300

  • VPN6将提供Web, 电子邮件, 数据中心等服务的服务器以及Internet出口组成的局域网连接到AS100, 并需要配置NAT以使得内外网互通.

  • VPN7连接网络管理设备, 应当与主干网所有的设备进行通信.

实验步骤

本实验注重于BGP与MPLS VPN的配置, 因而有关于端口IP以及OSPF的配置就不予详细介绍了.

拓扑结构

首先给出四个子系统的拓扑结构图以供参考.

AS100:

AS200:

AS300:

AS400:

其中, 橙黄色的IP地址为各个路由器设备的环回口地址, 绿色的IP地址主要出现在VPN域内, 为相应设备的端口接口IP, 紫色的VPN域以及蓝色的圆圈标注出了VPN的作用范围. 全域的设备名称均为AS号+设备类型(如PE,RR,ASBR等)

AS100配置

在AS100内部配置端口IP以及OSPF, 使得自治域内部互联互通.

5台ASBR路由器的环回地址分别为130.1.0.1-130.1.0.5, 两台反射路由器的环回地址为130.1.0.11-130.1.0.12.

首先配置5台ASBR的全局mpls, 并在所有的端口使能, 以ASBR1为例:

 1#
 2mpls lsr-id 130.1.0.1
 3mpls
 4 lsp-trigger all 
 5#
 6mpls ldp
 7
 8#
 9interface GigabitEthernet0/0/0
10 ip address 130.1.1.1 255.255.255.0 
11 mpls
12 mpls ldp
13#
14interface GigabitEthernet0/0/1
15 ip address 130.1.2.1 255.255.255.0 
16 mpls
17 mpls ldp
18#
19interface GigabitEthernet0/0/2
20 ip address 130.0.0.253 255.255.255.0 
21 mpls
22 mpls ldp

随后配置BGP, 对于ASBR来说只需要配置普通的IPv4 BGP即可.

在全局视图中:

  • 为AS1-ASBR配置反射路由器AS-RR为IBGP邻居, AS200的对端的AS2-ASBR为EBGP邻居. 为了方便, 可以设置BGP组管理多个反射路由器, RR组中包含两个反射路由器, ex组中包含对端的ASBR路由器.

  • 配置peer connect-interface指定环回口作为BGP邻居连接的端口, 这样在物理接口出现问题时BGP连接仍然可以成功建立.

在unicast视图中:

  • 向BGP中注入两台反射路由器的IP地址, 这样该路由信息就会传递到其他AS中以保证RR之间联通.

  • 再为RR和ex组开启路由策略, 使得在路由策略中能够分配MPLS标签给公网路由, 并开启label-route-capability以使能标签路由的传递能力.

  • 此外, 由于ASBR为边界路由器, 因而该ASBR在通告其他AS内部的路由规则给其IBGP对等体时可能会出现路由黑洞的情况, 所以对RR路由组还需要单独配置next-hop-local以使得路由畅通.

综合上面的配置, AS100中ASBR的配置大致如下, 以ASBR1为例:

 1bgp 100
 2 group RR internal
 3 peer RR connect-interface LoopBack1
 4 peer 130.1.0.11 as-number 100 
 5 peer 130.1.0.11 group RR 
 6 peer 130.1.0.12 as-number 100 
 7 peer 130.1.0.12 group RR 
 8 group ex external
 9 peer ex as-number 200 
10 peer 130.0.0.254 as-number 200 
11 peer 130.0.0.254 group ex 
12 #
13 ipv4-family unicast
14  undo synchronization
15  network 130.1.0.11 255.255.255.255 
16  network 130.1.0.12 255.255.255.255 
17  peer RR enable
18  peer RR route-policy rr export
19  peer RR next-hop-local 
20  peer RR label-route-capability
21  peer 130.1.0.11 enable
22  peer 130.1.0.11 group RR 
23  peer 130.1.0.12 enable
24  peer 130.1.0.12 group RR 
25  peer ex enable
26  peer ex route-policy asbr export
27  peer ex label-route-capability
28  peer 130.0.0.254 enable
29  peer 130.0.0.254 group ex 
30
31#
32route-policy rr permit node 0 
33 if-match mpls-label 
34 apply mpls-label
35#
36route-policy rr permit node 1 
37#
38route-policy asbr permit node 0 
39 apply mpls-label
40#
41route-policy asbr permit node 1 
42#
43user-interface con 0
44 authentication-mode password
45user-interface vty 0 4
46user-interface vty 16 20

随后配置反射路由器, 类似地首先配置全局MPLS, lsr-id以及对端口使能MPLS与ldp.

对于AS100中的反射路由器, 其不仅与AS100域内的ASBR路由器建立起通常的IBGP邻居, 还需要与AS200与AS300内的反射路由器建立起多跳的MP-EBGP邻居.

对于本自治域内的ASBR路由器来说, 使用BGP组即可轻松的管理与建立IGBP对等体关系. 与前述的ASBR中的BGP配置类似, 需要在unicast视图下开启标签路由传递使能.

下面展示RR的BGP配置信息中与ASBR相关的内容:

 1bgp 100
 2 group ASBR internal
 3 peer ASBR connect-interface LoopBack1
 4 peer 130.1.0.1 as-number 100 
 5 peer 130.1.0.1 group ASBR 
 6 peer 130.1.0.2 as-number 100 
 7 peer 130.1.0.2 group ASBR 
 8 peer 130.1.0.3 as-number 100 
 9 peer 130.1.0.3 group ASBR 
10 peer 130.1.0.4 as-number 100 
11 peer 130.1.0.4 group ASBR 
12 peer 130.1.0.5 as-number 100 
13 peer 130.1.0.5 group ASBR 
14 #
15 ipv4-family unicast
16  undo synchronization
17  peer ASBR enable
18  peer ASBR label-route-capability
19  peer 130.1.0.1 enable
20  peer 130.1.0.1 group ASBR 
21  peer 130.1.0.2 enable
22  peer 130.1.0.2 group ASBR 
23  peer 130.1.0.3 enable
24  peer 130.1.0.3 group ASBR 
25  peer 130.1.0.4 enable
26  peer 130.1.0.4 group ASBR 
27  peer 130.1.0.5 enable
28  peer 130.1.0.5 group ASBR 

随后为RR配置IPv4 BGP和vpnv4 BGP邻居:

  • 在全局配置中: 为RR反射路由器配置EBPG邻居, 在全局视图下通过ebgp-max-hop配置多跳EBGP, 绑定环回口, 与AS200和AS300的反射路由器建立EBGP邻居.

  • 在unicast视图中: 注入RR1的IP地址以保证对RR1的路由联通.

  • 在vpnv4视图中:

    • 执行undo policy vpn-target, 以使得反射路由器不设置vpn-target的过滤措施, 这样RR上无需配置vpn实例信息, 当PE传来VPN路由信息后, RR也能正常保存该路由信息.

    • 在vpn隧道中与AS200的反射路由器(8.8.8.8)和AS300中的反射路由器(130.3.0.11)建立MP-EBGP邻居.

 1bgp 100
 2 group RR2 external
 3 peer RR2 as-number 200 
 4 peer RR2 ebgp-max-hop 255 
 5 peer RR2 connect-interface LoopBack1
 6 peer 8.8.8.8 as-number 200 
 7 peer 8.8.8.8 group RR2 
 8 group RR3 external
 9 peer RR3 as-number 300 
10 peer RR3 ebgp-max-hop 255 
11 peer RR3 connect-interface LoopBack1
12 peer 130.3.0.11 as-number 300 
13 peer 130.3.0.11 group RR3 
14 #
15 ipv4-family unicast
16  undo synchronization
17  network 130.1.0.11 255.255.255.255 
18  peer RR2 enable
19  peer 8.8.8.8 enable
20  peer 8.8.8.8 group RR2 
21  peer RR3 enable
22  peer 130.3.0.11 enable
23  peer 130.3.0.11 group RR3 
24 # 
25 ipv4-family vpnv4
26  undo policy vpn-target
27  peer RR2 enable
28  peer 8.8.8.8 enable
29  peer 8.8.8.8 group RR2 
30  peer RR3 enable
31  peer 130.3.0.11 enable
32  peer 130.3.0.11 group RR3 

最后再配置AS100中的CE设备.

由于启用NAT来使得公私网互通, 因而在CE设备上首先配置NAT. AS100内部的130.1.5.x没有被占用, 因而选用该网段作为可用的公网IP池. 全局配置NAT IP池后再在端口启用该NAT组即可, 这样以后, 当从G0/0/1端口的报文到达时就将自动与IP池的IP进行一一对应. 最后还需要配置一下默认的路由规则, 由于启用了IP地址池, 为了避免为所有的IP一个个配置路由规则, 这过于麻烦, 直接用0.0.0.0配置默认的路由下一跳即可.

1nat address-group 1 130.1.5.1 130.1.5.10
2
3#
4interface GigabitEthernet0/0/1
5 ip address 202.112.1.1 255.255.255.0 
6 nat outbound 2001 address-group 1 
7
8#
9ip route-static 0.0.0.0 0.0.0.0 202.112.1.2

再为CE设备配置BGP, 与对端的两台反射路由器建立普通的IBGP邻居关系.

 1#
 2bgp 65506
 3 peer 172.26.130.2 as-number 100 
 4 peer 172.26.130.3 as-number 100 
 5 #
 6 ipv4-family unicast
 7  undo synchronization
 8  network 202.112.1.0 
 9  peer 172.26.130.2 enable
10  peer 172.26.130.3 enable
11#

配置完成5台ASBR, 2台反射路由器, 一台CE设备, AS100的配置基本完成.

AS300配置

在AS300内部, 主要考虑BGP配置相关, 关于MPLS, MPLS LDP配置与使能以及端口IP或OSPF的内容就不予赘述了.

ASBR与AS100中的ASBR互相构成EBGP邻居, 同时其反射路由器又与AS100中的反射路由器构成EBGP邻居和MP-BGP邻居, 而PE设备负责管理VPN-Instance, 并与本自治域内的反射路由器构成IBGP邻居和MP-BGP邻居. 这样, 反射路由器不仅负责普通BGP的建立与连接, 还负责vpnv4地址簇相关的MP-BGP的建立与连接, PE的路由信息因此可以到达其他自治系统中.

首先看到ASBR的BGP配置:

  • 对外与AS100的ASBR构成EBGP邻居, 对内与本自治系统中的RR构成IBGP邻居.

  • 在unicast视图下, 类似的需要将4台PE设备和2台RR设备的路由进行注入, 以使得其他自治系统可以获得其路由情况; 同时也需要使能路由策略和标签路由的传递能力, 并对RR对等体执行next-hop-local, 这与AS100内部的配置类似, 便不予赘述.

其配置如下:

 1#
 2bgp 300
 3 group RR internal
 4 peer RR connect-interface LoopBack1
 5 peer 130.3.0.11 as-number 300 
 6 peer 130.3.0.11 group RR 
 7 group ex external
 8 peer ex as-number 100 
 9 peer 130.0.0.245 as-number 100 
10 peer 130.0.0.245 group ex 
11 #
12 ipv4-family unicast
13  undo synchronization
14  network 130.3.0.1 255.255.255.255 
15  network 130.3.0.2 255.255.255.255 
16  network 130.3.0.3 255.255.255.255 
17  network 130.3.0.11 255.255.255.255 
18  network 130.3.0.12 255.255.255.255 
19  network 130.3.0.21 255.255.255.255 
20  network 130.3.0.22 255.255.255.255 
21  network 130.3.0.23 255.255.255.255 
22  network 130.3.0.24 255.255.255.255 
23  peer RR enable
24  peer RR route-policy rr export
25  peer RR next-hop-local 
26  peer RR label-route-capability
27  peer 130.3.0.11 enable
28  peer 130.3.0.11 group RR 
29  peer ex enable
30  peer ex route-policy asbr export
31  peer ex label-route-capability
32  peer 130.0.0.245 enable
33  peer 130.0.0.245 group ex 

接着看反射路由器的情况. 该自治域中反射路由器的任务要比AS100中的反射路由器任务多一些, AS100中的RR仅仅需要建立BGP与MP-BGP的邻居关系, 而AS300中的RR还需要管理PE设备作为其反射客户端.

由于AS300中的RR与本端ASBR和对端RR的BGP连接与AS100的配置十分相似, 便不予说明了, 仅仅给出相关的BGP配置:

 1#
 2bgp 300
 3 group ASBR internal
 4 peer ASBR connect-interface LoopBack1
 5 peer 130.3.0.1 as-number 300 
 6 peer 130.3.0.1 group ASBR 
 7 peer 130.3.0.2 as-number 300 
 8 peer 130.3.0.2 group ASBR 
 9 peer 130.3.0.3 as-number 300 
10 peer 130.3.0.3 group ASBR 
11 group RR external
12 peer RR as-number 100 
13 peer RR ebgp-max-hop 255 
14 peer RR connect-interface LoopBack1
15 peer 130.1.0.11 as-number 100 
16 peer 130.1.0.11 group RR 
17 #
18 ipv4-family unicast
19  undo synchronization
20  peer ASBR enable
21  peer ASBR label-route-capability
22  peer 130.3.0.1 enable
23  peer 130.3.0.1 group ASBR 
24  peer 130.3.0.2 enable
25  peer 130.3.0.2 group ASBR 
26  peer 130.3.0.3 enable
27  peer 130.3.0.3 group ASBR 
28  peer RR enable
29  peer 130.1.0.11 enable
30  peer 130.1.0.11 group RR 
31 # 
32 ipv4-family vpnv4
33  peer RR enable
34  peer 130.1.0.11 enable
35  peer 130.1.0.11 group RR 

相较于AS100, AS300中反射路由器配置不同的地方在于PE设备的管理, 不同之处如下:

  • 在unicast和vpnv4视图下启用PE作为反射客户peer PE reflect-client.

  • 在unicast视图下通过peer PE advertise-community来允许将团体属性发布给对等体, 这应该是用来允许发布vpn-target信息的.

下面是RR有关于PE设备管理的BGP配置:

 1#
 2bgp 300
 3 group PE internal
 4 peer PE connect-interface LoopBack1
 5 peer 130.3.0.21 as-number 300 
 6 peer 130.3.0.21 group PE 
 7 peer 130.3.0.22 as-number 300 
 8 peer 130.3.0.22 group PE 
 9 peer 130.3.0.23 as-number 300 
10 peer 130.3.0.23 group PE 
11 peer 130.3.0.24 as-number 300 
12 peer 130.3.0.24 group PE 
13 #
14 ipv4-family unicast
15  peer PE enable
16  peer PE reflect-client
17  peer PE label-route-capability
18  peer PE advertise-community
19  peer 130.3.0.21 enable
20  peer 130.3.0.21 group PE 
21  peer 130.3.0.22 enable
22  peer 130.3.0.22 group PE 
23  peer 130.3.0.23 enable
24  peer 130.3.0.23 group PE 
25  peer 130.3.0.24 enable
26  peer 130.3.0.24 group PE 
27 # 
28 ipv4-family vpnv4
29  undo policy vpn-target
30  peer PE enable
31  peer PE reflect-client
32  peer 130.3.0.21 enable
33  peer 130.3.0.21 group PE 
34  peer 130.3.0.22 enable
35  peer 130.3.0.22 group PE 
36  peer 130.3.0.23 enable
37  peer 130.3.0.23 group PE 
38  peer 130.3.0.24 enable
39  peer 130.3.0.24 group PE 

随后是PE设备, PE设备有关于BGP的配置也比较简单, 与本自治域的反射路由器建立IBGP和MP-IBGP邻居即可:

 1#
 2bgp 300
 3 group RR internal
 4 peer RR connect-interface LoopBack1
 5 peer 130.3.0.11 as-number 300 
 6 peer 130.3.0.11 group RR 
 7 #
 8 ipv4-family unicast
 9  undo synchronization
10  network 130.3.0.21 255.255.255.255 
11  peer RR enable
12  peer RR label-route-capability
13  peer 130.3.0.11 enable
14  peer 130.3.0.11 group RR 
15 # 
16 ipv4-family vpnv4
17  policy vpn-target
18  peer RR enable
19  peer 130.3.0.11 enable
20  peer 130.3.0.11 group RR 

CE设备的配置与AS100中的类似, 配置普通的BGP邻居即可.

VPN-Instance管理

上面的几个小节说明了BGP邻居的建立过程, 下面统一说明对VPN-Instance的管理.

根据组网要求, 各个VPN的出入口vpn-target如下所示:

 1|----------|----------------|-------------------------------|
 2| VPN      | RD & Export RT | Import RT                     |
 3|----------|----------------|-------------------------------|
 4| AS1-VPN6 | 100:6          | 300:1,300:2,400:1,400:2,200:7 |
 5|----------|----------------|-------------------------------|
 6| AS2-VPN7 | 200:7          | 300:1,300:2,400:1,400:2,100:6 |
 7|----------|----------------|-------------------------------|
 8| AS3-VPN1 | 300:1          | 300:1,300:5,400:1,100:6,200:7 |
 9| AS3-VPN2 | 300:2          | 300:2,300:5,400:2,100:6,200:7 |
10| AS3-VPN3 | 300:3          | 300:3,400:3                   |
11| AS3-VPN5 | 300:5          | 300:1,300:2,400:1,400:2       |
12|----------|----------------|-------------------------------|
13| AS4-VPN1 | 400:1          | 300:1,300:5,400:1,100:6,200:7 |
14| AS4-VPN2 | 400:2          | 300:2,300:5,400:2,100:6,200:7 |
15| AS4-VPN3 | 400:3          | 300:3,400:3                   |
16| AS4-VPN4 | 400:4          | 400:1,400:2                   |
17|----------|----------------|-------------------------------|

VPN-Instance的建立过程其实大同小异, 我们以AS300中反射路由器与AS3-VPN5的连接为例进行说明.

从功能结构上来说, VPN5的CE设备对应的PE设备为AS3内部的反射路由器, 因而该路由器在反射路由器的同时, 还负责绑定vpn5实例以及该vpn路由信息的发布.

在AS3-RR1上, 首先应当在全局配置vpn-instance, 根据组网要求配置RT, 出入口vpn-target:

1#
2ip vpn-instance vpn5
3 ipv4-family
4  route-distinguisher 300:5
5  vpn-target 300:5 export-extcommunity
6  vpn-target 300:1 300:2 400:1 400:2 import-extcommunity

然后在与VPN5的CE设备直连的端口上绑定vpn实例:

1#
2interface GigabitEthernet4/0/3
3 ip binding vpn-instance vpn5
4 ip address 172.25.130.1 255.255.255.240 

最后需要在BGP中配置该实例:

1bgp 300
2 #
3 ipv4-family vpn-instance vpn5 
4  import-route direct
5  group ex65505 external
6  peer ex65505 as-number 65505 
7  peer 172.25.130.2 as-number 65505 
8  peer 172.25.130.2 group ex65505 

经过这三步, PE上面的vpn实例信息就算配置完成了. 随后只需要等待之前已经建立好的MP-BGP隧道分发该VPN路由信息, 任何入口vpn-target包含vpn5的出口vpn-target(300:5)的vpn实例均能获得对vpn5的路由信息.

类似的, 其他的所有vpn均通过这三步即可在PE设备上进行配置, 需要修改的只是各个VPN不同的RT和出入口vpn-target罢了.

通过vpn-target的配置, 即可实现精细的访问控制, 不被允许的vpn之间无法通信.

AS200以及AS400

AS200以及AS400的主要配置由另一位同学负责, 其主要配置也集中在BGP上, 包括普通BGP邻居和MP-BGP邻居的建立. 基本上可以说AS200,AS400的配置与AS100,AS300的配置十分接近, 因而不做过多的说明了.

路径优选

复杂组网要求实现vpn3在通信时实现路径优选.

我们组分配到的是5条优先路径:

  • AS3-PE3 <-> AS3-RR1

  • AS3-ASBR2 <-> AS1-ASBR4

  • AS1-ASBR2 <-> AS2-ASBR2

  • AS2-ASBR3 <-> AS4-ASBR1

  • AS4-RR2 <-> AS4-PE4

不过由于vpn3之间如果希望通信, 能够实际选路的只有跨AS时选择哪个ASBR, 而AS内部好像有且仅有一条路能够通向外部, 因而在本实验中仅仅实现了跨AS时的路径优选, 即上述的第2,3,4条路径, 第1,5条由于并不存在其余可选项因而并未配置.

为了实现BGP跨域时的路径优选, 决定使用local-preference和med这两个属性. 不过MED是用来指示进入AS的优先路径, 而preference是用来指示出口的优先路径. 同时设置两个属性当然可以完成上述需求, 不过有些过于麻烦了, 因而在本实验中我们仅仅设置local-preference即可.

在优选路径2,3,4中6台相关的ASBR BGP unicast视图中配置default local-preference 500即可, 因而默认的优先级为100, 而对该属性而言数值越大优先级越高, 配置为500后该ASBR就会成为优先出口的路由器, 从而实现路由优选.

实验结果

所有配置完成后, 主要需要测试的就是VPN业务的实现结果.

VPN1,2

VPN1,2主要测试连通性和隔离性.

从ip routing中可以看到, 仅有规定的vpn1,5,6,7, 并且能ping通另一侧处于vpn1的ce设备:

而由于路由表中根本不存在172.22.xxx.xxx, 那么肯定也无法ping通vpn2的设备.

类似的, 处于vpn2的设备中也没有172.21.xxx.xxx的ip路由:

因而容易说明vpn1,2的连通性和隔离性.

VPN3路径优选

ensp通过主机执行tracert好像显示的不太全面, 因而通过vpn3的ce设备进行tracert测试:

可以看到, 在跨AS时各个ASBR的选择均正确.

VPN6公私网互通

由VPN1,2中CE设备的路由表可知, VPN6的路由已经被发布到VPN1,2中了, 因而VPN1,2自然可以访问到VPN6对应的内网:

VPN7网管系统

VPN7所对应的网管系统根据前述的vpn-target确实获得了VPN1,2,6的路由信息, 但在组网要求中又看到有说vpn7的网管系统应该能够访问所有的VPN, 这可能是组网要求说的不够详细; 不过哪怕是需要访问所有的VPN, 仅仅需要在vpn-instance的import vpn-target中将对应的标识符加入即可, 这样该CE设备就会保存通往其余VPN的路由信息.

嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核, 后端开发, Python, Rust 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改记录:
  • 2023-05-29 23:05:14大幅重构了python脚本的目录结构,实现了若干操作博客内容、sqlite的助手函数;修改原本的文本数 据库(ok)为sqlite数据库,通过嵌入front-matter的page_id将源文件与网页文件相关联
  • 2023-05-08 21:44:36博客架构修改升级
  • 2023-01-14 01:51:41更新了复杂组网, 修改了前几个网络实验的标题
网络实验复杂组网