|

楼主 |
发表于 2018-5-12 05:49
|
显示全部楼层
#先更改镜像源的地址 不然默认的不带
rpm -Uvh https://dl.fedoraproject.org/pub ... latest-7.noarch.rpm
yum install strongswan
mkdir install_ikev2
cd install_ikev2
vps_ip="192.168.11.21" #这个是服务器IP 即客户端连接的时候要填写的,建议使用域名,万一服务器IP被屏蔽了,只需要换个IP,域名重新解析一下就行了
my_cert_c="com" #这3个变量是下面生成证书要用到的 可以自定义
my_cert_o="myvpn"
my_cert_cn="VPN CA"
#这几个命令生成的是随机的数据,每次执行生成的结果都不一样 所以一定要保管好这些文件
#生成CA证书的私钥
strongswan pki --gen --outform pem > ca.pem
#使用私钥,签名CA证书
strongswan pki --self --in ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=${my_cert_cn}" --ca --outform pem >ca.cert.pem
#生成服务器证书的私钥
strongswan pki --gen --outform pem > server.pem
#使用私钥 同时用CA证书的私钥和CA证书 签名服务器证书 【时间选填,时间是天数,如果这个参数不要的话,默认就是证书能用的最长时间,好像是5年还是10年】 这里C、O的值要跟第一步的一致 CN可随便填写 --san参数是ID,IOS客户端连接的时候ID就填这个参数,但是WIN10客户端是没有的这个选项的,估计WIN10应该是直接用服务器IP当这个参数了,所以为了减少不必要的麻烦,这个参数建议就和服务器IP一样就行了
strongswan pki --pub --in server.pem | strongswan pki --issue 【--lifetime 1200】 --cacert ca.cert.pem --cakey ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=${vps_ip}" --san="${vps_ip}" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem
#生成客户端证书的私钥
strongswan pki --gen --outform pem > client.pem
#使用私钥 同时用CA证书的私钥和CA证书 签名客户端证书 这里C、O的值要跟第一步的一致 CN可随便填写
strongswan pki --pub --in client.pem | strongswan pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=${my_cert_c}, O=${my_cert_o}, CN=VPN Client" --outform pem > client.cert.pem
#生成供安卓客户端使用的证书(需要安装yum install openssl)(这一步可以不做,安卓可以使用另外一种不用证书的方式登录)
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "${my_cert_cn}" -out client.cert.p12
#把证书复制到strongswan目录下
cp -f ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -f server.cert.pem /etc/strongswan/ipsec.d/certs/
cp -f server.pem /etc/strongswan/ipsec.d/private/
cp -f client.cert.pem /etc/strongswan/ipsec.d/certs/
cp -f client.pem /etc/strongswan/ipsec.d/private/
echo "Cert copy completed"
#配置Strongswan 这一段是我自己实验过的,用2台linux系统安装了strongswan以后全部用证书和密钥连接VPN,然后还有一些说明,我研究了半天最后放弃了 反正2台linux之间建立VPN成功了,但是我死活不知道怎么弄路由表让客户端访问国外IP的时候走VPN
#vi /etc/strongswan/ipsec.conf
config setup
uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2 #最新版的stgrongswan 建议默认用这个 除非特别老的客户端可以另外设置
#这个提供给IOS 9和WIN10和CENTOS7客户端使用
conn IPSec-IKEv2
leftfirewall=yes #这个参数应该是防火墙相关的,我正在研究有什么用 之前不填都没问题 不填的话应该是有一个默认值的
left=%any #服务器端标识,一般填IP,%any表示客户端可以连接所有的网卡,如果服务器端有多张网卡并且都是固定IP并且需要同时有连接的话就用%any 如果服务器就只有一张网卡需要链接并且这个网卡还是固定的IP地址,那建议还是填写IP地址
leftsubnet=0.0.0.0/0 #服务器端内部网段, 0.0.0.0/0表示通配 一般情况下建议就这样填 除非你确定你的路由器后面就一个网段,那么可以填内部的网段
leftca=ca.cert.pem #服务器端 CA 证书 这个参数只有服务器端才有
leftauth=pubkey #服务端是使用的认证方式是证书认证
leftcert=server.cert.pem #服务器端证书,这个证书和客户端的证书是对应的
leftid=ikev2.ryzl.com.cn #这个参数主要是用于ios客户端填写
right=%any #客户端的标识,一般填IP,但是如果这台服务器可能会连接多个客户端,那么这里还是用%any吧
#rightsubnet=10.1.0.0/16 #这个参数在服务器端慎用,填了这个参数,如果VPN连接上了,那么这台服务器就会添加一个路由表,比如这个的意思就是访问10.1.0.0/16的时候是走VPN的 如果你填的是0.0.0.0/0的话,呵呵,你试试
rightsourceip=10.31.2.0/24 #分配给客户端的虚拟ip段 如果填%config则可以由客户端自己指定leftsourceip 参考这个例子 https://www.strongswan.org/testi ... rtual-ip/index.html
rightauth=pubkey #客户端的验证方式为pubkey,即使用证书 使用的证书应该是生成的p12格式的
rightcert=client.cert.pem #客户端需要使用的证书 例如IOS11.3,使用证书认证的时候就需要把这个证书导入到手机里面 WIN10也可以选用证书 【安卓6.0连接的时候选IPSec Xauth RSA也可以使用这个证书,但是不知道是否能用IKEV2】【另外linux客户端应该是也需要证书的】
auto=add #add表示启动以后等待客户端连接
#根据这个服务器端,另外一台strongswan客户端连接的时候配置文件应该如下
#【
#vi /etc/strongswan/ipsec.conf
config setup
uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2 #最新版的stgrongswan 建议默认用这个 除非特别老的客户端可以另外设置
conn myikev2
right = ikev2.ryzl.com.cn #服务端的标识,由于上面服务端的标识是%any 这里就可以任意填写 一般都还是填能区分的
rightca = ca.cert.pem #连接服务端用的ca,在/etc/strongswan/ipsec.d/cacerts/
rightid = ikev2.ryzl.com.cn #连接服务端时使用的ID,一定要和上面服务端的leftid对应
rightsubnet = 192.168.11.0/24 #这个参数是连接上以后用作路由的,如果VPN连接上了,那么这台服务器就会添加一个路由表,比如这个的意思就是访问192.168.11.0/24的时候是走VPN的 如果你填的是0.0.0.0/0的话这台设备就ping不通内网的电脑了
left = %any #本机标识,一般填IP,也可以填别的,用%any也可以
leftsourceip = %config #本机IP,%config表示从服务端的rightsourceip获取
#leftsubnet=192.168.11.0/24 #本机的内部网段,连接上以后服务器那边就可以直接ping通本机的内部网段了 如果本机下面有多个网段,就用逗号隔开 有这个参数测leftsourceip失效 有了这个参数就相当于是直接用网线把2台路由器连接在一起了
leftauth = pubkey #本机认证方式 使用证书
leftcert=client.cert.pem #本机使用的证书 在/etc/strongswan/ipsec.d/certs/
auto = start #start表示启动以后立刻连接
#然后把这2个证书和1个密钥文件复制下来
cp -f ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -f client.pem /etc/strongswan/ipsec.d/private/
cp -f client.cert.pem /etc/strongswan/ipsec.d/certs/
#vi /etc/strongswan/ipsec.secrets 由于客户端是用客户端文件认证的,只需要填这一个就行了
: RSA client.pem
#】
#配置Strongswan 【这下面的配置是我最开始大概学习的时候弄的,实测都可以用,服务端是linux,客户端是linux WIN10 安卓6.0 IOS11.3都可以连接上】
#设备/操作系统使用的 ike 版本
#Linux: 命令行客户端就是 strongswan 本身,因此完美兼容,支持 ikev1/ikev2 和所有加密方法的连接。
#Android: 只支持 ikev1。
#iOS/Mac OS X: IPsec 客户端为自己修改的racoon。它只支持 ikev1 最新的IOS 9 Mac OS X 支持ikev2.
#Windows: 只在 Windows 7 以后支持ikev2, XP需要另外的l2tp方式。 WIN10还需要设置一下
#vi /etc/strongswan/ipsec.conf
config setup
uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
#所有项目共用的配置项
conn %default
keyexchange=ike #ikev1 或 ikev2 都用这个
left=%any #服务器端标识,%any表示任意
leftsubnet=0.0.0.0/0 #服务器端虚拟ip, 0.0.0.0/0表示通配.
right=%any #
conn IKE-BASE
leftca=ca.cert.pem #服务器端 CA 证书
leftcert=server.cert.pem #服务器端证书
rightsourceip=10.31.2.0/24 #分配给客户端的虚拟 ip 段 如果填%config则可以由客户端自己指定 参考这个例子 https://www.strongswan.org/testi ... rtual-ip/index.html
#供 ios 使用, 使用客户端证书
conn IPSec-IKEv1
also=IKE-BASE
keyexchange=ikev1
fragmentation=yes #开启对 iOS 拆包的重组支持
ike=aes256-sha1-modp1024
leftauth=pubkey
rightauth=pubkey
rightauth2=xauth
rightcert=client.cert.pem
auto=add
#供 ios 使用, 使用 PSK 预设密钥
conn IPSec-IKEv1-PSK
also=IKE-BASE
keyexchange=ikev1
fragmentation=yes
leftauth=psk
rightauth=psk
rightauth2=xauth
auto=add
#供 android, linux, os x 使用
conn IPSec-IKEv2
also=IKE-BASE
keyexchange=ikev2
leftauth=pubkey
rightauth=pubkey
rightcert=client.cert.pem
auto=add
#供 windows 7+ 使用, win7 以下版本需使用第三方 ipsec vpn 客户端连接
conn IPSec-IKEv2-EAP
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha1-modp1024! #第一阶段加密方式
rekey=no #服务器对 Windows 发出 rekey 请求会断开连接
leftauth=pubkey
rightauth=eap-mschapv2
rightsendcert=never #服务器不要向客户端请求证书
eap_identity=%any
auto=add
conn IKEV2-RSA
also=IKE-BASE
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
leftfirewall=yes
auto=add
#这个是我搭建的教程里面独有的,应该这个才是给ios的
conn ios_ikev2
also=IKE-BASE
keyexchange=ikev2
ike=aes256-sha256-modp2048,3des-sha1-modp2048,aes256-sha1-modp2048!
esp=aes256-sha256,3des-sha1,aes256-sha1!
rekey=no
#leftid=${vps_ip} #注意这里要根据上面的变量来填
leftid=192.168.11.21
leftsendcert=always
leftsubnet=0.0.0.0/0 #这里应该填0,表示通配 即有多个客户端连接以后自动适应
rightauth=eap-mschapv2
rightsendcert=never
eap_identity=%any
dpdaction=clear
fragmentation=yes
auto=add
#说明:
#auto=add表示只添加 auto=start表示立刻开始连接,如果是客户端的话用这个
#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
dns2 = 8.8.4.4
# for Windows only
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf
# configure the ipsec.secrets 密码认证文件
#vi /etc/strongswan/ipsec.secrets
: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
myUserName %any : EAP "myUserPass"
wp设备名称\myUserName2 : EAP "myUserPass2" #仅对windowsphone8.1设备,设备名称在`设置-关于-手机信息` 中查看
#编辑转发,这样重启以后也是自动开启转发的
#vi /etc/sysctl.d/10-ipsec.conf
net.ipv4.ip_forward=1
#开启转发
sysctl --system
#防火墙设置,这里针对iptagbles,如果是firewall需要另外设置
interface="eth0" #这个是网卡
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24 -j ACCEPT
iptables -A INPUT -i $interface -p esp -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i $interface -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i $interface -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i $interface -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o $interface -j MASQUERADE
service iptables save
#启动
strongswan start
#到这里IKE服务端就搭建好了
#下面是各种客户端的访问方式
#WIN10默认不支持AES-256-CBC和MODP-2048 需要添加注册表
#添加一个DWORD键 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256 键值设置为1
#0 禁用AES-256-CBC和MODP-2048
#1 启用AES-256-CBC和MODP-2048
#2 强制使用AES-256-CBC和MODP-2048
#然后把ca.cert.pem导入到受信任的根证书颁发机构,然后添加IKEV2的VPN就行了
#IOS用户访问的话需要把ca.cert.pem导入到描述文件,然后添加IKEV2的VPN就行了
#安卓用户 这种方式有个缺点,安卓客户端断开连接以后服务端里面查看状态连接没有断开,状态会变为REKEYED然后会在上面配置ikelifetime达到的时间以后消失
#方式IPSec Xauth PSK
#IPSec 预共享密钥:写 ipsec.secrets 里 PSK 后面的那个密码 展开高级设置,dns服务器填写8.8.8.8 转发路线填服务端rightsourceip的值例如上面的设置的话这里就填10.31.0.0/24
#安卓用户访问方式2 IPSec Xauth RSA
#IPSec用户证书使用上面生成的p12证书,在安卓安全设置里面添加证书就行 IPSec CA证书用上面生成的ca.sert.pem可以不用,不用的话会分配一个ip,但是又ping不通,用了的话不会分配IP,但是vpn是能用的
#linux用户,我用的centos7
#安装strongSwan客户端yum install strongswan
#把ca.cert.pem复制到/etc/strongswan/ipsec.d/cacerts/这个目录
#编辑/etc/ipsec.conf,设定名为myikev2的连接:
config setup
uniqueids=never #允许多个客户端使用同一个证书,多设备同时在线
conn myikev2
keyexchange = ikev2
right = 填服务端那边的$vps_ip变量
rightca = ca.cert.pem
rightid = 参考服务端那边的ios_ikev2的leftid
rightsubnet = 10.31.2.0/24 #这里应该填服务端提供的rightsourceip的指 不能填0,不然的话客户端连接上以后客户端内网其他用户就ping不通客户端了
left = %any
leftsourceip = %config
leftauth = eap-mschapv2
eap_identity = client #这个参数必须填client
auto = start
#编辑/etc/ipsec.secrets,这个文件的内容要和服务端的一模一样
#然后使用命令strongswan start开启连接 连接以后用命令strongswan status查看状态
#这个方法成功的连接上了我香港的服务器的ios_ikev2,但是有个缺点,网络还是走的本地,而且我也不知道要怎么添加默认路由让网络走IKEv2
#到这里就差不多了,写点后记吧
#VPN的作用是连接2个网络,但是IKEV2这种方式我觉得不怎么方便
#最方便的还是PPTP
#PPTP就相当于直接在系统里面添加了一块网卡,你可以自由选择数据包怎么走,我感觉这才是VPN应该有的样子
#但是PPTP不安全,完全可以用封包加密的方式加密PPTP的传输,好像L2TP就是这样的,我去研究L2TP了
#继续学习
https://zh.opensuse.org/index.ph ... mp;variant=zh#Linux #这里是一个很全的使用 Strongswan 架设 Ipsec VPN的教程
https://wiki.strongswan.org/proj ... /wiki/RouteBasedVPN #可能是设置route
#strongswan的官网可以搜索的,善用搜索功能
|
|