这个不用我说了吧,我在阿里云购买的香港的服务器。
yum -y install gpm-devel pam-devel openssl-devel make gcc epel-release strongswan
设置别名
alias ipsec='strongswan'
进入软件目录
cd /etc/strongswan
ipsec pki --gen --outform pem > ca.pem
ipsec pki --self --in ca.pem --dn "C=CN, O=VPN, CN=strongSwan CA" --ca --lifetime 3652 --outform pem > ca.cert.pem
这里C表示国家名,O表示组织名,CN为通用名。默认证书有效期为3年,这里配置3652天,即10年。
生成服务器私钥,然后从私钥中导出公钥,用CA证书签发服务器证书
ipsec pki命令可用来生成RSA密钥对,包含了私钥和公钥,公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。
ipsec pki --gen --outform pem > server.pem
ipsec pki --pub --in server.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn "C=CN, O=VPN, CN=*.*.*.*" --san="*.*.*.*" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
上述的“*.*.*.*”替换为你的服务器公网ip。IOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL 或 IP 地址。除了上述要求,Windows 7 还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证)--flag serverAuth。非 iOS 的 Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU)--flag ikdeIntermediate。Android 和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL 或 IP 地址,--san。所以这里C、O的值要跟第1步的一致,CN值及--san值是服务器公网地址或url,另外这里可以设置多个--san值。否则会出现错误 13801:IKE身份验证凭证不可接受。
ipsec pki --gen --outform pem > client.pem
ipsec pki --pub --in client.pem | ipsec pki --issue --lifetime 3652 --cacert ca.cert.pem --cakey ca.pem --dn "C=CN, O=VPN, CN=strongSwan Client" --outform pem > client.cert.pem
这里C、O的值要跟第1步的一致。
生成 pkcs12 证书,用来导入手机或电脑(输入一下命令会让你输入密码,两次输入一直即可,请记住这个密码,在客户端导入此证书时需输入该密码。)
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "strongSwan Client" -certfile ca.cert.pem -caname "strongSwan CA" -out client.cert.p12
安装证书,把刚才生成的私钥和证书文件复制到目录/etc/strongswan/ipsec.d/下的指定目录下即可。
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/ &&
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/ &&
cp -r server.pem /etc/strongswan/ipsec.d/private/ &&
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/ &&
cp -r client.pem /etc/strongswan/ipsec.d/private/
cacerts/目录下放置CA证书,certs/目录下放置服务器和客户端证书,private/目录下放置服务器和客户端私钥
strongSwan包含3个配置文件,在目录/etc/strongswan/下
strongswan.conf strongSwan各组件的通用配置
ipsec.conf IPsec相关的配置,定义IKE版本、验证方式、加密方式、连接属性等等
ipsec.secrets 定义各类密钥,例如:私钥、预共享密钥、用户账户和密码
(该配置文件可以直接覆盖原有文件)
vi /etc/strongswan/strongswan.conf
# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files
charon {
load_modular = yes
duplicheck{ #冗余检查关闭,以允许同时连接多个设备
enable = no
}
compress = yes #传输启用压缩
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8 #给远程端指定DNS服务器
dns2 = 8.8.4.4
nbns1 = 8.8.8.8 #指定Windows的WINS服务器
nbns2 = 8.8.4.4
filelog { #配置strongSwan日志级别和路径
/var/log/strongswanlog { #log前加.会报错
time_format = %b %e %T
default = 2
append = no
flush_line = yes
}
}
}
include strongswan.d/*.conf
(请注意该配置文件中包含公网ip配置请注意修改)
vi /etc/strongswan/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
config setup
uniqueids=never #关闭ID唯一性,即允许多个客户端使用同一个证书,多设备同时在线
conn %default #默认配置项,其他conn配置项都会调用此默认项
left=%any #left表示local,即本地端(服务器端)IP地址;%any是魔数字,表示任意地址
leftsubnet=0.0.0.0/0 #本地端网络,0.0.0.0/0为通配,表示所有IP网段
right=%any #right表示remote,即远程端(客户端)IP地址可为任意地址
rightsourceip=10.10.10.0/24 #分配给远程端的虚拟IP地址段,尽量避免使用常用私网地址段以免冲突
dpdaction=clear #dpd表示Dead Peer Detection,对端失效检测,clear表示对端失效时关闭连接
conn IKEv1-CERT-XAUTH #供老版本IOS使用。IKEv1,使用证书和XAUTH验证
keyexchange=ikev1 #密钥交换使用IKEv1
fragmentation=yes #允许分片
leftauth=pubkey #本地端使用公钥验证
leftcert=server.cert.pem #指定本地端证书
rightauth=pubkey #远程端使用公钥验证
rightauth2=xauth #远程端使用用户账号验证
rightcert=client.cert.pem #指定远程端证书
auto=add #auto定义strongSwan服务启动时该连接的行为,add是添加连接类型但不启动
conn IKEv1-PSK-XAUTH #供IOS, Android使用。IKEv1,使用预共享密钥和XAUTH验证
keyexchange=ikev1 #密钥交换使用IKEv1
leftauth=psk #本地端使用预共享密钥验证
rightauth=psk #远程端使用预共享密钥验证
rightauth2=xauth #远程端使用用户账号验证
auto=add #strongSwan启动时添加连接类型但不启动
conn IKEv2-CERT #供Windows 7+, Linux使用。IKEv2,使用证书验证
keyexchange=ikev2 #密钥交换使用IKEv2
leftauth=pubkey #本地端使用公钥验证
leftcert=server.cert.pem #指定本地端证书
rightauth=pubkey #远程端使用公钥验证
rightcert=client.cert.pem #指定远程端证书
auto=add #strongSwan启动时添加连接类型但不启动
conn IKEv2-EAP #供Windows 7+, IOS9+使用。IKEv2,EAP验证
keyexchange=ikev2 #密钥交换使用IKEv2
ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024! #第一阶段加密方式
esp=aes256-sha256,3des-sha1,aes256-sha1! #ESP的顺序与IKE一致
rekey=no #本地端对Windows远程端发出rekey请求会断开连接,所以需配置为no
leftauth=pubkey #本地端使用公钥验证
leftcert=server.cert.pem #指定本地端证书
leftsendcert=always #本地端总是发送证书
leftid=*.*.*.* #本地端标识,使用本地端公网IP地址作为标识,和生成服务器证书时的--san参数对应
rightauth=eap-mschapv2 #远程端使用eap-mschapv2验证
rightsendcert=never #不要求远程端发送证书
eap_identity=%any #指定EAP验证身份,任意账户
fragmentation=yes #允许分片
auto=add #strongSwan启动时添加连接类型但不启动
3、配置ipsec.secrets
(如果文件不存在就自己生成该文件)
vi /etc/strongswan/ipsec.secrets
: RSA server.pem #指定服务器的RSA私钥文件
: PSK "psktest" #配置预共享密钥为:psktest
test1 : XAUTH "123456" #配置XAUTH验证的用户名test1和密码123456,可配置多个用户账户
test2 : EAP "123456" #配置EAP验证的用户名test2和密码123456,可配置多个用户账户
sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
如果不成功就执行
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
执行
sysctl -p
看下加载情况
(配置文件中的ip与ipsec.conf配置文件中的ip要保持一致)
vi /etc/firewalld/zones/public.xml
"1.0" encoding="utf-8"?>
Public</short>
For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
"eth0"/>
"ssh"/>
"dhcpv6-client"/>
"ipsec"/>
"tcp" port="1723"/>
"tcp" port="47"/>
"tcp" port="1701"/>
"tcp" port="22"/>
/>
"ipv4">
3、启动软件
systemctl enable firewalld && systemctl start firewalld && systemctl enable strongswan && systemctl start strongswan
登录阿里云管理控制台- -> 云服务器ECS- ->网络和安全- ->安全组- ->添加安全组规则:
授权策略:允许
协议类型:自定义UDP
端口范围:500/500
授权类型:地址段访问
授权对象:0.0.0.0/0
优先级:100
描述:随便填
授权策略:允许
协议类型:自定义UDP
端口范围:4500/4500
授权类型:地址段访问
授权对象:0.0.0.0/0
优先级:100
描述:随便填
打开网络偏好设置
新建连接,选择
类型选择Cisco/IPSec
填写服务器地址,XAUTH类型的帐号的密码,
点击连接,测试成功。