写在前面

虽然有可能被block..
但因为折腾的过程太痛苦了…
所以还是要发布出来,顺便装x….
技术无罪 低调低调

环境

Debian 9.5
Linux strongSwan U5.6.3/K4.9.0-8-amd64
可信任机构颁发的SSL证书(DV即可)

使用可信任机构办法的SSL证书是为了使用体验 就可以在绝大多数设备上直接使用账号密码登陆验证,无需手动导入证书。

安装strongSwan

有两种安装方式

  • 源码编译安装
  • 包管理软件安装

更新索引

apt update
编译安装

安装编译环境(请确保有以下组件)

apt-get install libpam0g-dev libssl-dev make gcc

下载并解压代码

cd /tmp
# 此处进入到临时目录中 或者其他目录

wget http://download.strongswan.org/strongswan.tar.gz
# 下载源码 

tar -zxf strongswan.tar.gz
# 解压

cd strongswan-*
# 进入strongswan的目录 注意后面是版本号 不要直接复制粘贴

配置编译
Xen,KVM 使用以下参数

./configure  --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-tools --enable-openssl --disable-gmp

OpenVZ需额外增加一个 enable-kernel-libipsec

./configure  --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-tools --enable-openssl --disable-gmp --enable-kernel-lib

详情请参阅tips的其他文章这一不一一列举
大部分的云主机都是采用的KVM
请根据你的服务商提供的虚拟技术而使用不同的参数

编译

make
make install

验证是否安装成功 (查看版本)

ipsec version

以上就是编译安装 过程比较复杂 (本站使用的这个)


包管理软件安装(apt)

!!!请不要使用该方法!!!

debian的源一般都会老一些版本,第二配置文件的路径会变化很多,并且配置好了也不能连接。

apt install strongswan libcharon-extra-plugins

完成了 可以ipsec version验证安装 是不是非常简单….
该方法本站没有验证过


配置文件

SSL证书可以直接使用颁发给域名的证书(我这里是crt+key)

修改ipsec配置文件
cd /usr/local/etc
vim ipsec.conf
# 默认的配置文件位置

修改成以下内容

conn ikev2-eap
	left=%any
	leftsubnet=0.0.0.0/0
	right=%any
	rightsourceip=10.0.0.0/24
	dpdaction=clear

	keyexchange=ikev2
	ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
	esp=aes256-sha256,3des-sha1,aes256-sha1!
	rekey=no
	leftauth=pubkey                           # 服务器端使用公钥方式验证
	leftcert=/usr/local/etc/ssl/cert.crt  # 服务器公钥
	leftsendcert=always
	leftid=your_demain.com                  # 需要和申请CA签发证书中的域名一致
	rightauth=eap-mschapv2                    # 客户端使用eap方式认证
	rightsendcert=never
	eap_identity=%any
	fragmentation=yes
	auto=add

采用的是EAP认证方式

配置ipsec的账号密码

同目录下

vim ipsec.secrets

配置模板

: RSA /usr/local/etc/ssl/privkey.key  # 与证书对应的私钥文件(服务器私钥)
user1 : EAP "1234abcd"	# 用户名 : 验证方式 "密码明文"

配置内核转发

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1  #ipv6 可用可不用

使之生效

sysctl -p

配置防火墙规则

iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -s 10.0.0.0/24  -j ACCEPT

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens3 -m policy --dir out --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens3 -j MASQUERADE

注意最后两行 ens3 那个是你的网卡名称
你可以使用ip addr 或者 ifconfig来查看你的网卡名称 有些未必是ens3
iptables -A FORWARD -j REJECT 这句好像没用到 待我研究研究

最后

重启ipsec

ipsec restart

查看当前的链接可以使用ipsec status

防火墙规则不是永久生效的重启就会消失,用下面的命令永久生效.

service iptables save

tips

确定服务器使用的虚拟技术和安装Strongswan
Ci昵称Void 的一篇文章

这个文章用的是自颁发证书

靠谱的一个参考
fish2bird 的一篇文章