[ipsec][strongswan] 使用VTI配置基于路由的ipsec
之前写的一个:[dev][ipsec] 基于路由的VPrivateN
一
我们默认用strongswan的时候基于策略的. 也就是policy. 基于策略的ipsec中, policy承担了两部分功能
一是访问权限的控制功能, 另一个是路由的功能. linux kernel做完路由之后会在查询policy,从而确定要将包转发给哪一个SA.
二
基于一中的描述, 我们现在要做基于路由的ipsec, 也就是说将路由功能从policy中去除出来, 在路由表中使用路由条目来做.
于是在这里需要解决的就是路由指向下一条的问题, 而这个下一条就是Ipsec SA.
三
现在引入一个概念叫做VTI(Vitual Tunnel Interface), VTI是内核中的一种设备. 使用如下命令添加:
ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
我们看见, 创建vti时指定了一个key, 这个key便是与SA之间的关联. 见下面的例子如何完成这样一个关联:
# ip link add name vti1 type vti key VTI_KEY local LOCAL_IPv4_ADDR remote REMOTE_IPv4_ADDR
# ip link set vti1 up
# ip addr add LOCAL_VIRTUAL_ADDR/ dev vti1 # ip xfrm state add src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR spi SPI PROTO ALGR mode tunnel
# ip xfrm state add src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR spi SPI PROTO ALGR mode tunnel
# ip xfrm policy add dir in tmpl src REMOTE_IPv4_ADDR dst LOCAL_IPv4_ADDR PROTO mode tunnel mark VTI_KEY
# ip xfrm policy add dir out tmpl src LOCAL_IPv4_ADDR dst REMOTE_IPv4_ADDR PROTO mode tunnel mark VTI_KEY
这样呢. 这个新增的VTI就等价于SA, 我们只有正常的配置路由, 将流量路由到这个VTI上, 便等于完成了基于路由的IPsec.
四
三里边我们使用iproute工具做的配置, strongsan里同样如此. 在配置的时候, 比如有一个mark的配置项,用来关联SA
mark_in = mark_out =
五
基于一中的分析. 我们在基于路由的场景下将police的功能进行了分离. 所以policy的原有的策略控制功能和定义并没有发生变化.
双端还是可以自由的协商出需要的安全策略.
六
VTI是有很多局限性的, 最新的kernel里新增了类型名叫做xfrm的interface, 作为VTI的下一代. 见:
https://lwn.net/Articles/757391/
七
基于二, 我们解决这个问题的方法有很多, 只要能达成路由到SA的包转发.
处理VTI, XFRM, 还可以用GRE.
见:https://wiki.strongswan.org/projects/strongswan/wiki/RouteBasedVPN
八
所有问题的关键,都在于将作为工具的interface将SA进行关联.
VTI用了 key/mark (mark_in = mark_out = 42)
XFRM用了 interface Id (if_id_in|out in swanctl.conf)
GRE在strongswan中使用这样一个配置: (local|remote_ts=dynamic[gre] in swanctl.conf)
另外, 如果你使用strongswan的话, 需要改一下这个, 因为基于策略时他会在路由表里加东西: charon.install_routes=0
[ipsec][strongswan] 使用VTI配置基于路由的ipsec的更多相关文章
- [dev][ipsec] 基于路由的VPrivateN
VPrivateN的配置分两个模式 1. 基于策略的VPrivateN ( policy based) 2. 基于路由的VPrivateN (route based) 以strongswan为例, 在 ...
- [ipsec][strongswan]strongswan源码分析--(零)引子
目录 strongswan sa 资料 编译 启动 进程信息 结构 架构图与插件 配置运行 传统配置方法 新的配置方法 其他配置方法 详细的配置文档 配置示例 用法 加密库 libgmp libcry ...
- [ipsec][strongswan] strongswan源码分析--(一)SA整体分析
strongswan SA分析(一) 1 概念 下面主要介绍两个本文将要阐述的核心概念.他们是SA和SP.注意,这不是一篇不需要背景知识的文章.作者认为你适合阅读接下来内容的的前提是,你已经具备了一下 ...
- [ipsec][strongswan] strongswan源码分析--(五)plugin的配置文件的添加方法与管理架构解析
前言 我们知道,strongswan是基于插件式管理的.不同的插件有不同的配置文件,在这下面, 我们以netlink的插件为例:etc/strongswan.d/charon/kernel-netli ...
- 阿里云容器服务--配置自定义路由服务应对DDOS攻击
阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...
- H3C路由器配置——静态路由
一.网络畅通条件及排错思路 1.网络畅通的条件 网络畅通的条件:数据包能去能回,也是我们排除网络故障的理论依据. 2.网络不畅通示列 ①.目标主机不可达 原因分析:可能是数据包没有到达目的地,在中途就 ...
- 两种交换机配置模式,以配置基于端口划分的VLAN为例
关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...
- Web API配置自定义路由
默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...
- SharePoint 2013 配置基于表单的身份认证
前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...
随机推荐
- sudo passwd root:没有相关指令
在linux里如果想要修改密码,就输入这个指令,但是会出现没找到这个指令,是因为环境变量里没有passwd. 解决:查找passwd的位置,sudo find / -name passwd 然后进入p ...
- 西门子PLC1200内使用SCL实现简化版PID算法
西门子自带的PID效果很好,但是会比较吃性能,使用次数有限,很多地方需要PID但不需要这么精准的PID,所以网上找个简单的算法自己调用. 新建数据类型 前三个就是PID三个参数 新建FC块: #PID ...
- RAID磁盘阵列结构
RAID磁盘阵列结构原理其实很简单,就是每块硬盘不插在主板的硬盘接口上了,而是全插在RAID卡上,然后RAID卡再插到主板上,由RAID卡统一管理硬盘,做各种RAID磁盘策略(RAID0,RAID1, ...
- consul ACL 配置范例
service "dashboard" { policy = "write" } service "dashboard-sidecar-proxy&q ...
- hexo 博客如何更换电脑
如何在更换电脑后继续使用Hexo部署博客 重要目录 _config.yml package.json scaffolds/ source/ themes/ 在新电脑上配置hexo环境:安装node.j ...
- Python之 time 模块
时间模块的转换关系与方式: #!/usr/bin/env python # -*- coding:utf8 -*- import time # 时间戳 print('\ntime.time() --& ...
- vue封装一个简单的div框选时间的组件
记录一下我前段时间封装的一个vue组件吧.技术需要积累,有时间我把我之前写的还不错的组件都开源出来.并尝试vue和react 两种方式的组件封装.今天简单写下鼠标框选div选中效果的封装吧. div框 ...
- MySQL 总结篇 [在Oracle基础上学习的MySQL]
一.学习环境 MySQL 5.7社区版 Navicat for MySQL 百度网盘下载链接:https://pan.baidu.com/s/1yGnznwoZ8CaMgrCsDBhKAQ 二.MyS ...
- Xshell连接虚拟机文档教程
1打开VirtualBox 2 找到导入的虚拟机 3右键虚拟机 启动 4 等待加载 5 加载的时候,打开xshell 6 7 填写框住的内容 名称: 自己取 主机: 127.0.0.1 固定内容 端 ...
- js获取项目名称
//获取路径 var pathName=window.document.location.pathname; //截取,得到项目名称 var projectName=pathName.substrin ...