美文网首页
ipsec,如何使strongswan支持net namespa

ipsec,如何使strongswan支持net namespa

作者: 苏苏林 | 来源:发表于2019-03-10 17:36 被阅读0次

            strongswan进程启动后只运行在一个namespace(网路ns)中,后面ike协商出来的所有sa都只存在于一个namespace,对于一个多用户的系统,不同用户的网络可能有重叠,使用namespace做用户隔离是常用手段,对于ipsec,如果使用strongswan做ike协商就有如果使其支持namespace的问题。

            开始通过修改strongswan的源码使其支持namespace,原理也比较简单,主要使strongswan于内核通讯(下policy,state表项)的netlink支持namespace即可,根据不同的conn名称,netlink在不同的namespace中创建,修改量不是很大,也运行过一段时间,但是可能是对源码的理解深度不够,除了几个bug,有些bug很难定位。

            最近突发发现,使用linux的vti虚拟接口可以使ipsec支持namespace,配置简单,不需要修改源码,当然linux自己的东西肯定比改吧改吧源码稳定。

            这里记录一下使用方法,ipsec的一侧(用户侧)基于policy触发协商,另一侧(网关侧)使用vti做用户隔离。

    网关侧:

    #创建vti接口

    ip tunnel add vti-to111 mode vti local 172.16.0.196 remote 172.16.1.111 key 12

    #创建namespace

    ip netns add test

    #设置vti接口的namespace

    ip link set netns test dev vti-to111

    #配置vti接口的ip地址,和相关路由

    ip netns exec test bash

    ip addr add 111.1.1.2/24 dev vti-to111

    ip link set up dev vti-to111

    ip addr add 12.1.1.1/24 dev lo

    ip link set up dev lo

    ip route add 11.1.1.0/24 via 111.1.1.1

    #设置相关系统参数

    sysctl -w net.ipv4.ip_forward=1

    sysctl -w net.ipv4.conf.ip_vti0.disable_policy=1

    sysctl -w net.ipv4.conf.vti-to111.disable_policy=1

    #退出namespace,配置strongswan

    exit

    #cat /etc/strongswan/ipsec.conf

    conn site1-site2

      leftid=172.16.0.196

      left=172.16.0.196

      #leftsubnet=0.0.0.0/0

      leftsubnet=12.1.1.0/24

      rightid=172.16.1.111

      right=172.16.1.111

      #rightsubnet=0.0.0.0/0

      rightsubnet=11.1.1.0/24

      authby=secret

      mark=12

      auto=route

      keyexchange=ikev2

      ike=aes-sha1-modp1024

      ikelifetime=86400s

      esp=aes-sha1-modp1024

      lifetime=86400s

      type=tunnel

    #cat /etc/strongswan/ipsec.secrets

    %any %any : PSK test

    #设置charon.conf配置文件下的两个参数

    #vim /etc/strongswan/strongswan.d/charon.conf

     install_routes = no

     install_virtual_ip = no

    #这两个参数配置之后就没有这条策略路由了,策略模式下才有

    #ip rule

    220: from all lookup 220

    # 重启strongswan

    strongswan restart

    用户侧:

    #配置strongswan

    #cat /etc/strongswan/ipsec.conf

    conn site1-site2

        leftid=172.16.1.111

        left=172.16.1.111

        #leftsubnet=0.0.0.0/0

        leftsubnet=11.1.1.0/24

        rightid=172.16.0.196

        right=172.16.0.196

        #rightsubnet=0.0.0.0/0

        rightsubnet=12.1.1.0/24

        authby=secret

        #mark=12

        auto=route

        keyexchange=ikev2

        ike=aes-sha1-modp1024

        ikelifetime=86400s

        esp=aes-sha1-modp1024

        lifetime=86400s

        type=tunnel

    #cat /etc/strongswan/ipsec.secrets

    %any %any : PSK test

    #配置ip地址

    ip addr add 11.1.1.1/24 dev lo

    #不需要配置路由,ipsec已经配置好了

    [root@sheng-111 /root]

    #ip rule

    0: from all lookup local

    220: from all lookup 220

    32766: from all lookup main

    32767: from all lookup default

    [root@sheng-111 /root]

    #ip route ls table 220

    12.1.1.0/24 via 172.16.1.199 dev eth1  proto static  src 11.1.1.1

    #重启strongswan

    strongswan restart

    验证:

    #两端sa建立成功:

    #strongswan status

    Routed Connections:

    site1-site2{1}:  ROUTED, TUNNEL, reqid 1

    site1-site2{1}:  11.1.1.0/24 === 12.1.1.0/24

    Security Associations (1 up, 0 connecting):

    site1-site2[1]: ESTABLISHED 38 minutes ago, 172.16.1.111[172.16.1.111]...172.16.0.196[172.16.0.196]

    site1-site2{2}:  INSTALLED, TUNNEL, reqid 1, ESP SPIs: c22598ea_i cf6ed9df_o

    site1-site2{2}:  11.1.1.0/24 === 12.1.1.0/24

    #从客户端ping测试

    #ping 12.1.1.1 -I 11.1.1.1

    PING 12.1.1.1 (12.1.1.1) from 11.1.1.1 : 56(84) bytes of data.

    64 bytes from 12.1.1.1: icmp_seq=1 ttl=64 time=0.674 ms

    64 bytes from 12.1.1.1: icmp_seq=2 ttl=64 time=0.692 ms

    #从网关侧抓包,可以发现用户数据报文(icmp)报文只会暴露在namespace中,原始namespace只能抓到esp包。

    最后,当然要撸一遍vti的代码,在 net/ipv4/ip_vti.c中实现了大部分的逻辑。

    相关文章

      网友评论

          本文标题:ipsec,如何使strongswan支持net namespa

          本文链接:https://www.haomeiwen.com/subject/azfppqtx.html