栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

strongswan ipsec环境搭建及swanctl.conf配置含ca证书配置(tunnel模式,ah封装,rsa认证)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

strongswan ipsec环境搭建及swanctl.conf配置含ca证书配置(tunnel模式,ah封装,rsa认证)

vm1:192.168.182.144 host1:192.168.182.254 9.94.189.225 host2:9.94.189.226 192.168.152.254 vm2:192.168.152.132
环境如图所示,两台物理机充当网关,分别启动一台虚拟机组成局域网。

一、虚拟机启动

使用qume脚本启动,关键信息:

    -enable-kvm -display none -cpu host 
    -smp 4 
    -m 4096 
    -kernel $vm_workdir/bzImage_$vm_id 
    -device virtio-scsi-pci 
    -net nic,model=virtio,macaddr=$mac -net bridge,br=$vm_br 
    -drive file=$vm_workdir/rootfs.gz_$vm_id,if=none,cache=none,id=root 
    -device virtio-blk,drive=root,id=d_root 
    $cfg_new 
    -append "console=ttyS0 IP=${vm_ip} root=/dev/vda1 rw kmemleak=on oops=panic panic_on_oops=1" 
    -qmp tcp:localhost:$port,server,nowait 
    -monitor unix:qemu-monitor-socket,server,nowait 
    -serial file:$serial_log/vm.log 
    -daemonize
二、路由配置

VM1:
添加路由:route add -net 192.168.152.0/24 gw 192.168.182.254 dev ens3
查看路由信息:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.182.1   0.0.0.0         UG    0      0        0 ens3
192.168.152.0   192.168.182.254 255.255.255.0   UG    0      0        0 ens3
192.168.182.0   0.0.0.0         255.255.255.0   U     0      0        0 ens3

HOST1:
添加路由:

route add -net 192.168.152.0/24 gw 9.94.189.225 dev enp2s0f0

查看路由:

 route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         9.94.0.1        0.0.0.0         UG    0      0        0 enp2s0f0
9.94.0.0        0.0.0.0         255.255.0.0     U     102    0        0 enp2s0f0
192.168.152.0   9.94.189.225    255.255.255.0   UG    0      0        0 enp2s0f0
192.168.182.0   0.0.0.0         255.255.255.0   U     0      0        0 br10

HOST2:
添加路由:

route add -net 192.168.182.0/24 gw 9.94.189.226 dev enp2s0f0

查看路由:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         9.94.0.1        0.0.0.0         UG    0      0        0 enp2s0f0
9.94.0.0        0.0.0.0         255.255.0.0     U     102    0        0 enp2s0f0
192.168.152.0   0.0.0.0         255.255.255.0   U     0      0        0 br10
192.168.182.0   9.94.189.226    255.255.255.0   UG    0      0        0 enp2s0f0

VM2:
添加路由:route add -net 192.168.182.0/24 gw 192.168.152.254 dev ens3
查看路由:

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.152.1   0.0.0.0         UG    0      0        0 ens3
192.168.152.0   0.0.0.0         255.255.255.0   U     0      0        0 ens3
192.168.182.0   192.168.152.254 255.255.255.0   UG    0      0        0 ens3
三、网关配置

1、host1和host2分别执行

vim /etc/sysctl.conf

添加:

net.ipv4.ip_forward = 1 
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0

2、之后分别执行:

sysctl -a | egrep "ipv4.*(accept|send)_redirects" | awk -F "=" '{print$1"= 0"}' >> /etc/sysctl.conf
/sbin/sysctl -p
四、strongwan安装

1、host1和host2分别源码安装:https://download.strongswan.org/ 源码下载
我是4.4内核,担心不能适配高版本所以下载的5.6.2版本,5.10内核可以下载更高版本

tar -xvzf  Openswan-2.6.52.tar.gz
./configure --sysconfdir=/etc  --enable-eap-identity --enable-eap-md5 --enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap  --enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap  --enable-xauth-pam  --enable-dhcp  --enable-openssl  --enable-addrblock --enable-unity  --enable-certexpire --enable-radattr --enable-swanctl --enable-openssl --disable-gmp
make && make install

安装完成

五、strongswan配置

ipsec.conf和ipsec.secrets配置方法即将被淘汰,可能遇到一些问题,所以采用swanctl.conf配置方法
host1执行:

vim  /etc/swanctl/swanctl.conf 

改为:

connections {
  
   gw-gw {
      local_addrs  = 9.94.189.225
      remote_addrs = 9.94.189.226

      local {
         auth = pubkey
         certs = moonCert.der
         id = moonpeer
      }
      remote {
         auth = pubkey
         id = sunpeer
      }
      children {
         net-net {
            local_ts  = 192.168.182.0/24
            remote_ts = 192.168.152.0/24

            updown = /usr/local/libexec/ipsec/_updown iptables
            rekey_time = 5400
            rekey_bytes = 500000000
            rekey_packets = 1000000
            ah_proposals = sha256-sha384
         }
      }
      version = 1
      mobike = no
      reauth_time = 10800
      proposals = aes128-sha256-modp3072
   }
}

host2执行:

vim /etc/swanctl/swanctl.conf

改为:

connections {
  
   gw-gw {
      local_addrs  = 9.94.189.226
      remote_addrs = 9.94.189.225

      local {
         auth = pubkey
         certs = sunCert.der
         id = sunpeer
      }
      remote {
         auth = pubkey
         id = moonpeer
      }
      children {
         net-net {
            local_ts  = 192.168.152.0/24
            remote_ts = 192.168.182.0/24

            updown = /usr/local/libexec/ipsec/_updown iptables
            rekey_time = 5400
            rekey_bytes = 500000000
            rekey_packets = 1000000
            ah_proposals = sha256
         }
      }
      version = 1
      mobike = no
      reauth_time = 10800
      proposals = aes128-sha256-modp3072
   }
}
六、ca证书生成

host1执行:

pki --gen > mooncaKey.der
pki --self --in mooncaKey.der --dn "C=CH, O=strongSwan, CN=strongSwan CA" --ca > mooncaCert.der
pki --gen > moonKey.der
pki --issue --in moonKey.der --type priv --cacert mooncaCert.der --cakey mooncaKey.der --dn "C=CH, O=strongSwan, CN=moonpeer" --san moonpeer > moonCert.der

得到证书:

mooncaCert.der
mooncaKey.der
moonCert.der
moonKey.der

host2执行:

pki --gen > suncaKey.der
pki --self --in suncaKey.der --dn "C=CH, O=strongSwan, CN=strongSwan CA" --ca > suncaCert.der
pki --gen > sunKey.der
pki --issue --in sunKey.der --type priv --cacert suncaCert.der --cakey suncaKey.der --dn "C=CH, O=strongSwan, CN=sunpeer" --san sunpeer > sunCert.der

得到证书:
同上

七、将证书放到指定位置:
host1执行:

cp moonKey.der /etc/swanctl/rsa/
cp moonCert.der /etc/swanctl/x509/
cp mooncaCert.der /etc/swanctl/x509ca/
scp 9.94.189.226:/etc/swanctl/x509/sunCert.der /etc/swanctl/x509/
scp 9.94.189.226:/etc/swanctl/rsa/sunKey.der /etc/swanctl/rsa/

host2执行:

cp sunKey.der /etc/swanctl/rsa/
cp sunCert.der /etc/swanctl/x509/
cp suncaCert.der /etc/swanctl/x509ca/
scp 9.94.189.225:/etc/swanctl/x509/moonCert.der /etc/swanctl/x509/
scp 9.94.189.225:/etc/swanctl/rsa/moonKey.der /etc/swanctl/rsa/

八、启动ipsec:
host1和2分别执行:

systemctl start strongswan
swanctl --load-all
swanctl --initiate --child net-net
swanctl --list-sas --raw

之后

ip xfrm policy ls
ip xfrm state ls

可以看到规则
ipsec statusall 也可查看隧道状态
至此,ipsec隧道搭建完成
3、验证:
vm1 ping vm2,
host1抓包tcpdump -i enp2s0f0 ah可以看到ah报文
四、注意事项
1、网关关闭防火墙systemctl stop firewalld.service
2、依赖相关内核模块和config:

CONFIG_XFRM_USER   net/xfrm/xfrm_user.c

CONFIG_XFRM_ALGO   net/xfrm/xfrm_algo.c

CONFIG_XFRM_AH    对应代码XFRM_ALGO和CRYPTO相关    

CONFIG_XFRM_ESP   对应代码XFRM_ALGO和CRYPTO相关

CONFIG_INET_XFRM_MODE_TRANSPORT   net/ipv4/xfrm4_mode_transport.c

CONFIG_INET_XFRM_MODE_TUNNEL     net/ipv4/xfrm4_mode_tunnel.c

CONFIG_NET_KEY   net/key/af_key.c

CONFIG_INET_AH   net/ipv4/ah.c

CONFIG_INET_ESP   net/ipv4/esp.c

CONFIG_NETFILTER_XTABLES      net/netfilter/x_tables.c   xt_tcpudp.c

CONFIG_NETFILTER_XT_MATCH_POLICY   net/netfilter/xt_policy.c 

3、网关需要安装python2(python3不可)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679461.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号