【隧道篇 / IPsec】(5.2) ❀ 05. IPsec - 点对多星状拓扑 ❀ FortiGate 防火墙

         【简介】IPSec VPN 即指采用IPSec协议来实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,是由Internet Engineering Task Force (IETF) 定义的安全标准框架,用以提供公用和专用网络的端对端加密和验证服务。


  IPsec VPN 简介

        VPN作为一项成熟的技术,广泛应用于组织总部和分支机构之间的组网互联,其利用组织已有的互联网出口,虚拟出一条“专线”,将组织的分支机构和总部连接起来,组成一个大的局域网。

        很多企业有类似这种的需求,分支机构需要通过VPN连接公司总部,访问公司总部的内网服务器,为了方便管理,总部不想有太多的配置,总部只建立一条VPN隧道,实现所有分支机构和总部的通讯。

        绝大多数的情况下,总部条件好一些,会使用固定IP的宽带,分部条件差一些,则会使用ADSL拨号宽带。

        在建立IPsec VPN的时候,总部也就是响应方IP地址是固定的,而分部也就是发起方IP地址是动态的,每次拨号获得的IP地址都不同,发起方可以指定响应方的IP地址,可是响应方无法指定发起方的IP地址;发起方必须指定路由,而响应方的路由是与发起方相关的,因为无法指定发起方的IP,所以也无法指定路由。不过有个替代方法那就是响应方在协商过程中,动态识别发起方,并接受发起方的路由。这种方法可以简化响应方的设置,不需要为每个发起方制定IPsec策略。

        ① 这里我们的测试环境是:总部使用FortiGate 100D防火墙,外网为固定IP宽带,内网为192.168.2.0网段;

        ② 分部使用FortiGate 90D防火墙,外网为ADSL拨号宽带,内网为10.0.1.0网段。

  IPsec VPN 设置

        IPsec VPN分为接口模式和策略模式,默认为接口模式,接口模式除了VPN设置外,还需要建立两条策略和一条路由;

        ① 选择系统菜单【虚拟专网】-【IPsec】-【隧道】,点击【Create New】建立新的IPsec VPN隧道;

        ② 输入IPsec VPN隧道名称后,选择【自定义VPN隧道(无模板)】,点击【下一个】;

        ③ 为了更好的区分固定宽带和拨号宽带设置IPsec VPN隧道的不同之处,这里将总部与分部IPsec设置都放在一起,并用蓝色区分别设置的不同。总部由于不知道分部的IP地址,所以远程网关选择的是【拨号用户】,而分部输入的则是总部的静态地址;同样情况,第二阶段的本地地址和远程地址,总部设置的都是0.0.0.0默认地址,而分部设置的是则是各自的内部地址;

        除了蓝色标记的外,其它的设置两边必须完全相同,这里简单的介绍一下设置内容:

        (1) 预共享密码:双方可以使用预共享密码的方式对身份进行确认,预共享密码为自定义,两边要求填写一致;

        (2) 模式:分为主模式和野蛮模式,主模式一般采用IP地址方式标识对端设备;而野蛮模式可以采用IP地址方式或者域名方式标识对端设备。

        (3) 第一阶段加密:加密方案,由加密算法、认证算法、DH组三部分组成;

        (4) 密钥生成时间:阶段1的密钥使用周期,到期后从新生成;

        (5) 第二阶段加密:加密方案,由加密算法、认证算法、DH组三部分组成;

        (6) 自动密钥保持存活:IPsec SA秘钥过期后,即使当前IPsec通道中并未用任何的数据在传输,也在秘钥过期之前,生成新的SA。建议使用该方法来维护IPSEC通道的UP;

        (7) Auto-negotiate:防火墙每隔一段时间对IPsec通道进行检查,通过发送数据来触发IPsec SA的协商;

        (8) 密钥周期:阶段2的密钥使用周期,到期后从新生成。

  IPsec VPN 策略

        IPsec VPN设置完成后,还需要设置两端允许访问的策略。

        ① 首先是在总部的100D上建立策略,允许通过IPsec VPN接口的数据访问内网;因为分部发起方在IPsec VPN第二阶段已经指定好了源地址和目的地址,所以在这里的策略就不需要再做控制,源地址和目的地址都是选【all】;

        ② 同样在总部的100D上还要建立返回策略,允许内网通过IPsec VPN接口访问发起方;

        ③ 作为发起方的分部,也需要建立同样的策略,允许内网通过IPsec VPN隧道访问总部,也是由于在建隧道的第二阶段就已经指定了源地址和目标地址,所以在策略上,源地址和目标地址都是选【all】;

        ④ 分部也要建立策略,允许总部通过IPsec VPN接口访问分部。也就是总部和分部都要各建两条策略,一来一回。

  IPsec VPN 路由

        前面已经介绍过,总部是接收方,因为不知道发送方的IP,所以不设置路由,而分部发送方必须设置路由。

        分部90D设置的路由,当需要访问总部192.168.2.0网段时走IPsec VPN通道;如果需要访问总部多个网段,可以建立多条路由。

        在总部的100D防火墙上输入命令查看路由表,你会看到即然会有一条通过IPsec VPN隧道的路由,这条路由就是自动下发路由了。

  IPsec VPN 检测

        当设置完IPsec VPN隧道,建立策略和路由后,就可以通过IPsec VPN监视器查看是否连通了。

        ① 选择菜单【虚拟专网】-【监视器】-【IPsec监视器】,可以看到IPsec VPN隧道的当前状态,在隧道上点击鼠标右键,可以选择是断开还是启动隧道。

        ② 在分公司防火墙的CLI控制台上,定义源IP地址为90D的内网地址,Ping总部100D的内网地址,它们不在同一网段,能够Ping通,说明IPsec VPN建立成功,这是通过IPsec VPN隧道在访问;

        ③ 在总部100D防火墙的CLI控制台上,输入诊断VPN状态的命令,也可以看到IPsec VPN是建立成功的。

  增加 IPsec VPN 隧道

        很多时候分部和总部需要互访的不止一个网段,除了用子网掩码扩大互访IP的范围之外,还可以在IPsec VPN的第二阶段建立多少隧道。

        ① 增加隧道的方法就是在第二阶段,点击绿色的加号按钮;

        ② 在设置时除了原地址和目标地址可以和上一条隧道不同外,其它的设置都必须是一样的。

        ③ 由于增加了internal14接口的10.0.6.0网段访问总部,所以在90的策略里必须加上internal14接口;

        ④ 同样的进出策略都必须修改,由于访问总部的目标地址没有改变,所以分部可以不用增加路由,但是如果访问的是总部的多个网段,分部就要相应的增加路由了;现在问题来了,分部增加了访问隧道,总部也要相应的增加吗?不,不用,总部什么都不用做!

        ⑤ 可以看到有两条隧道成功的建立了;

        ⑥ 总部的100D防火墙IPsec VPN第二阶段虽然只有一条都是0.0.0.0,但是在IPsec监视器上也可以看到有二条,这就说明,以后只要在分部的防火墙上设置隧道,总部不需要做任何设置,这就简单多了。

        ⑦ 这次把源IP设置为新加入了internal14接口的10.0.6.1,直接访问总部内网接口下的服务器,可以连接成功,说明第二条隧道也是通的。 

  允许分部之间互相访问

        当有多个分部拨号连接到总部后,就已经搭建起星型拓扑网络了,如果需要分部之间能够互相访问,只要下面两步动作就可以了。

        ① 在总部的防火墙上新增策略,允许分部之间的 IPsec VPN 业务数据相互通信。

        ② 修改分部隧道的远程地址,使其范围包含其它分部的本地地址。例如分部2本地地址段192.168.3.0,分部3本地地址段192.168.4.0。

          【提示】 建议星状拓扑 IPsec VPN 各分部需要互相访问的,提前规划好各分部网段,使其只要修改子网掩码就可以全部包含在内。只有部分分部需要互访的,可以通过各自增加IPsec VPN隧道来实现。

飞塔技术-老梅子   QQ:57389522


  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
多星环绕是指多个星球绕着一个中心旋转的运动,下面是实现多星环绕的Python代码: ```python import pygame import math pygame.init() # 设置窗口大小 screen = pygame.display.set_mode((800, 600)) # 加载背景图片 background = pygame.image.load("background.jpg") # 加载星球图片 planet1 = pygame.image.load("planet1.png") planet2 = pygame.image.load("planet2.png") planet3 = pygame.image.load("planet3.png") # 获取星球图片的宽度和高度 planet_width = planet1.get_width() planet_height = planet1.get_height() # 设置星球的初始位置和半径 planet1_x = 400 planet1_y = 300 planet1_radius = 200 planet2_x = 400 planet2_y = 300 planet2_radius = 300 planet3_x = 400 planet3_y = 300 planet3_radius = 400 # 设置旋转速度 planet1_speed = 0.02 planet2_speed = 0.01 planet3_speed = 0.005 # 游戏循环 while True: # 处理退出事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 绘制背景图片 screen.blit(background, (0, 0)) # 计算星球的位置 planet1_x = 400 + planet1_radius * math.cos(planet1_speed) planet1_y = 300 + planet1_radius * math.sin(planet1_speed) planet2_x = 400 + planet2_radius * math.cos(planet2_speed) planet2_y = 300 + planet2_radius * math.sin(planet2_speed) planet3_x = 400 + planet3_radius * math.cos(planet3_speed) planet3_y = 300 + planet3_radius * math.sin(planet3_speed) # 绘制星球 screen.blit(planet1, (planet1_x - planet_width / 2, planet1_y - planet_height / 2)) screen.blit(planet2, (planet2_x - planet_width / 2, planet2_y - planet_height / 2)) screen.blit(planet3, (planet3_x - planet_width / 2, planet3_y - planet_height / 2)) # 更新旋转角度 planet1_speed += 0.02 planet2_speed += 0.01 planet3_speed += 0.005 # 更新屏幕 pygame.display.update() ``` 在这个代码中,我们使用了pygame库来实现多星环绕的效果。首先,我们加载了背景图片和三个星球的图片,并设置了它们的初始位置和半径。然后,在游戏循环中,我们计算了每个星球的位置,并绘制了它们。最后,我们更新了旋转角度,并更新了屏幕。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞塔老梅子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值