荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 4004|回复: 5

centos7搭建IKEV2服务端

[复制链接]

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
发表于 2018-2-28 15:05 | 显示全部楼层 |阅读模式
https://quericy.me/blog/699/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-2-28 18:43 | 显示全部楼层
https://github.com/quericy/one-key-ikev2-vpn

这里是原版,这里的比较详细

通过脚本搭建好以后默认是可以连接但是无法访问网络的,需要再操作一步
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-2-28 20:27 | 显示全部楼层
客户端连接方式:
IOS:把证书通过icloud同步到手机里面,然后安装
然后在设置里面连接VPN
远程ID就填服务器的IP或者域名

WINDOWS10
如下图:






输入用户名和密码就可以了

证书后缀名改为.crt
然后导入到“受信任的根证书颁发机构”  
我导入了当前用户的不行,后来又导入到了计算机就可以了
估计应该是需要导入到计算机


貌似默认是不通过VPN连接,可以在网络和共享中心里面设置默认走VPN

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-2-28 20:38 | 显示全部楼层
需要把所有的网卡的IPV4都设置为自动跃点,并禁用IPV6
这样才会让所有的流量都走VPN

否则就会像我我刚刚一样,出现一个bug,访问是走的vpn,但是解析DNS还是走的本地的网卡

回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 2018-3-13 03:19 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1326

主题

2373

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10267
 楼主| 发表于 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的官网可以搜索的,善用搜索功能

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-6-18 07:06 , Processed in 0.014932 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表