0x01 安装

====> CentOS

RPM安装 下载:https://pkgs.org/download/strongswan
wget http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/strongswan-5.7.2-1.el7.x86_64.rpm
rpm -ivh strongswan-*.rpm

或者是

yum -y install epel-release
yum -y install openssl-devel strongswan
查找相关插件 yum search swan
其它插件无需安装,尤其是strongswan-libipsec ,貌似与高于2.6的内核有冲突,导致无法连接服务器
libipsec用于创建ipsec0网卡和UDP封装,高版本使用kernel-netlink

====> Ubuntu

apt -y install openssl libssl-dev strongswan libstrongswan

0x02 服务器端

====> ipsec.conf

# EAP(Extensible Authentication Portocol) 可扩展身份认证协议
# IKE/ESP 密钥交换协议和数据验证加密
# right 是 remote 服务器端
# left 是 local 本地端

config setup
charondebug="cfg 2" # log 提议
uniqueids=never # 多个客户连接同一用户

conn %default
ike=aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024!
esp=aes128gcm16-ecp256,aes256gcm16-ecp384,aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024,aes128gcm16,aes256gcm16,aes128-sha256,aes128-sha1,aes256-sha384,aes256-sha256,aes256-sha1!
keyingtries=1

conn myvpn
keyexchange=ikev2
# ike=aes256-aes192-aes128-sha384-sha256-sha1-modp3072-modp2048-modp1536-modp1024!
# esp=aes256-aes192-aes128-sha384-sha256-sha1!
rekey=no
compress=no

left=%any
# leftid=%domain.ltd
# leftfirewall=no
leftupdown=/etc/strongswan/strongswan.d/proxyndp.updown
leftsubnet=0.0.0.0/0,::/0
leftauth=pubkey
leftsendcert=always
leftcert=server.cert.pem

right=%any
# rightid=%hostname
rightsourceip=10.10.2.1/24,2001:db8::/96
rightdns=8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844
rightsendcert=never
rightauth=eap-mschapv2

# tfc=%mtu
eap_identity=%any
dpdaction=clear
dpddelay=2400s
fragmentation=yes
auto=add

====> ipsec.secrets

# 取决于ipsec.conf 中的 leftauth的这两行之一
: RSA <private_key.file> "私约加密密码"
<username> : EAP "password"

====> 防火墙和路由转发

iptables -t nat -A POSTROUTING -s {IPv4}/24 -o eth0 -j MASQUERADE
ip6tables -t nat -A POSTROUTING -s {IPv6}/112 -o eth0 -j MASQUERADE

在 /etc/sysctl.conf 中追加如下三行

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.proxy_ndp=1

执行 sysctl -p

====> 启动/停止

ipsec/strongswan restart

0x03 客户端

====> ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration

config setup
# strictcrlpolicy=yes
uniqueids = never

# Add connections here.
conn client
keyexchange=ikev2
# ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
# esp=aes256-sha256,3des-sha1,aes256-sha1!
right=pub.6tu.me
rightid=%pub.6tu.me
rightsubnet=0.0.0.0/0,::/0
rightauth=pubkey

leftsourceip=%config,%config6
# leftauth=eap-mschapv2
leftauth=eap
eap_identity=user
type=tunnel
auto=add

#配置LAN访问不走IPsec通道
conn exempt
right=127.0.0.1
leftsubnet=192.168.0.0/24
rightsubnet=192.168.0.0/24
type=passthrough
auto=route

====> ipsec.secrets

# 取决于ipsec.conf 中的 leftauth的这两行之一
: RSA <private_key.file> "私约加密密码"
<username> : EAP "password"

====> 防火墙和路由转发

用 ip -6 route 或者 ip route 查看当前路由
ip route 或者 ip route show table 220命令来查看

ip rule add from {IPv4}/24 table main prio 1
ip -6 rule add from {IPv6}/64 table main prio 1

====> 启动/停止

# systemctl restart network
ipsec/strongswan restart
ipsec/strongswan up/down ccc

0x04 其它事项

====> 证书认证(非必须)

yum/apt -y install ca-certificates

cp ca.pem /etc/pki/ca-trust/source/anchors/
cp ca.pem /etc/pki/tls/certs/

update-ca-trust extract

====> 参考资料

https://oogami.name/1467/
https://wiki.strongswan.org/projects/strongswan/wiki/IKEv2ClientConfig
https://libreswan.org/wiki/Subnet_to_subnet_VPN
https://wiki.strongswan.org/projects/strongswan/wiki/VirtualIp
Linux开源VPN之strongSwan
https://www.jianshu.com/p/ce6c545efd8a
https://www.cnblogs.com/Su-per-man/p/9952292.html
https://blog.csdn.net/puppylpg/article/details/64918562

0x05 注意事项

====> 配置选项

# leftauth=pubkey or eap, 取决于所选的网关配置
# leftcert=certificate, 仅当 leftauth=pubkey (e.g. peerCert.der)
# eap_identity=username, 仅当 leftauth=eap (e.g. peer)
# leftprotoport = 17/1701 需要注释掉
# rightprotoport = 17/%any 需要注释掉
type=passthrough
type=transport
auto=route

keyingtries=%forever
dpdaction=restart
closeaction=restart
====> 错误调试

启动后抛出如下错误,一般是内核不支持 IKE,隧道。尝试 modprobe af_key

no netkey IPsec stack detected
no KLIPS IPsec stack detected
no known IPsec stack detected, ignoring!

proxyndp.updown 脚本,在IPV6网络无效时使用

#!/bin/bash
IFACE=eth0 # configure me
ADDR=${PLUTO_PEER_CLIENT%/*}
case $PLUTO_VERB in
up-client-v6)
echo "Adding proxy NDP for $ADDR via $IFACE"
ip -6 neigh add proxy $ADDR dev $IFACE
;;
down-client-v6)
echo "Removing proxy NDP for $ADDR via $IFACE"
ip -6 neigh delete proxy $ADDR dev $IFACE
;;
up-client)
echo "Adding proxy ARP for $ADDR via $IFACE"
ip neigh add proxy $ADDR dev $IFACE
;;
down-client)
echo "Removing proxy ARP for $ADDR via $IFACE"
ip neigh delete proxy $ADDR dev $IFACE
;;
esac 2>&1 | logger -t proxyndp.updown

0x06 各个功能模块说明

charon :貌似管理 IKE(Internet Key Exchange) 守护进程

strongSwan IPsec client
charon-cmd charon-systemd

strongSwan IPsec client, pki 制作数字证书命令工具, SCEP(简单证书注册协议) client
strongswan-pki strongswan-scepclient

strongSwan IPsec client, swanctl command
strongswan-swanctl

IPsec VPN 主程序
strongswan

strongSwan 守护启动器和配置文件解析器
strongswan-starter

IKE(Internet Key Exchange) 守护进程
strongswan-charon strongswan-libcharon

strongSwan charon library
libcharon-standard-plugins libcharon-extra-plugins

strongSwan 实用和加密库
libstrongswan libstrongswan-standard-plugins libstrongswan-extra-plugins

网络管理框架插件 / 可与NetworkManager进行交互的插件
network-manager-strongswan strongswan-nm

TNC(Trusted Network Connect's ) 可信网络连接协议
IF-MAP(Interface for Metadata Access Point)
PDP(Packet Data Protoco)

base / client / server files
strongswan-tnc-base strongswan-tnc-client strongswan-tnc-server

TNC 的插件
strongswan-tnc-ifmap strongswan-tnc-pdp

strongsan基本用法的更多相关文章

  1. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  2. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  5. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  6. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  7. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  8. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

  9. 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)

    vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...

随机推荐

  1. 数据操作-apply函数族

    R 作为一种向量化的编程语言,一大特征便是以向量计算替代了循环计算,使效率大大提升.apply函数族正是为解决数据循环处理问题而生的 -- 面向不同数据类型,生成不同返回值的包含8个相关函数的函数族. ...

  2. (五)mybatis-spring的集成

    mybatis-spring的集成 源码下载(数据库使用derby,具体数据库结构参考这里) 在src下新建applicationContext.xml 配置内容:数据源.SqlSessionFact ...

  3. 猫头鹰的深夜翻译:核心JAVA并发一

    简介 从创建以来,JAVA就支持核心的并发概念如线程和锁.这篇文章会帮助从事多线程编程的JAVA开发人员理解核心的并发概念以及如何使用它们. (博主将在其中加上自己的理解以及自己想出的例子作为补充) ...

  4. fiddler 针对单个接口打断点

    在命令行输入相关指令: 以慕课网为例: 请求前设置断点:bpu 实例: bpu https://www.imooc.com/index/getstarlist 请求 https://www.imooc ...

  5. loadrunner通过odbc测mysql数据库语句

    #include "lrd.h" Action() { double trans_time;  //定义一个double型变量用来保存事务执行时间 static LRD_INIT_ ...

  6. Proto3使用指南

    这篇指南讲述如何使用Protocol Buffers来结构化你的Protocol Buffer数据,包括.proto文件语法以及如何从.proto文件生成你的访问类型.本文主要涵盖了proto3的语法 ...

  7. 从摔得稀碎、蓝屏再到黄牛拒绝加价:iPhone X究竟是怎么了

    X究竟是怎么了" title="从摔得稀碎.蓝屏再到黄牛拒绝加价:iPhone X究竟是怎么了"> ​近日,iPhone X终于迎来了正式出货的时间.作为十周年的创 ...

  8. 海洋深处的数据中心——微软Natick项目

    数据中心(data center)是云计算的支柱,云计算的蓬勃发展离不开数据中心在建造运营方面的不断创新.但云端数据中心的运行过程中会产生大量热量,冷却降温过程则意味着巨大的能源消耗,这意味着需要庞大 ...

  9. 在Linux上显示正在运行的进程的线程ID

    在Linux上显示正在运行的进程的线程ID 在上Linux," ps -T"可以显示正在运行的进程的线程信息: # ps -T 2739 PID SPID TTY STAT TIM ...

  10. OLE DB访问接口“MICROSOFT.JET.OLEDB.4.0”配置为在单线程单位模式下运行,所以该访问接口无法用于分布式

    OLE DB访问接口"MICROSOFT.JET.OLEDB.4.0"配置为在单线程单位模式下运行,所以该访问接口无法用于分布式 数据库操作excel时遇到的以上问题的解决方法 解 ...