• [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/24 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.

    参考:https://developers.redhat.com/blog/2019/05/17/an-introduction-to-linux-virtual-interfaces-tunnels/#vti

    三里边我们使用iproute工具做的配置, strongsan里同样如此. 在配置的时候, 比如有一个mark的配置项,用来关联SA

     mark_in = mark_out = 42 

    基于一中的分析. 我们在基于路由的场景下将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

  • 相关阅读:
    CALayer 的一些重要属性
    [Google] Inorder Successor in Binary Search Tree, Solution
    [LeetCode] Container With Most Water, Solution
    [C++ Summary]
    [LeetCode] Count and Say, Solution
    [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal, Solution
    [LeetCode] Convert Sorted List to Binary Search Tree, Solution
    [FaceBook] Hanoi Moves, Solution
    逻辑题汇总
    [Facebook] Products of all elements
  • 原文地址:https://www.cnblogs.com/hugetong/p/11384814.html
Copyright © 2020-2023  润新知