strongswan 配置ikev2 for iOS and Android

屠钊
2023-12-01

strongswan 高版本已支持ikev2,ios9.0以上版本的支持ikev2,Android也是高版本的部分机型支持ikev2,本人搭建的基于ikev2交换协议的strongswan VPN服务器对与iOS 是免证书的(iOS VPN客户端自己写的),Android (VPN客户端是stongswan 官网提供的客户端)服务器认证是证书,客户端认证是eap模式配置文件如下

1.生成服务器证书

生成CA证书

生成私钥

 

ipec pki --gen --outform pem >ca.pem 

 

--putfom 一共有三种形式,另两种是der 和 pgp

基于这个私钥生成一个CA证书

ipsec  pki --self  --in ca.pem  --dn "C=chaina,O=strongswn ,CN=strongswan CA" --ca --outform pem >ca.cert.pem

 

--self是私钥  --in是输入私钥,--dn 是判别名,--ca 是证书

C:表示国家

O:表示州

CN:表示通用名

 

生成服务器证书

生成私钥

ipsec pki --gen --outform > server.pem

 

生成服务器证书

ipsec pki --pub --in server.pem | ipsec pki --issue --cacert    ca.cert.pem --cakey ca.pem --dn "C=china,O=strongswan,CN=forum.org.cn " --san="forum.org.cn" --flag serverAuth --flag ikeIntermediate --outform pem >server.cert.pem 

 

ipsec pki --pub --in server.pem 

 

这句话的意思是从私钥里把公钥提取出来

 

--issue /--cacert/--cakey就是表明用刚才自签的CA证书来签这个服务器证书

--db/--san /--flag是一些客户端的特殊要求

Ios客户端要求CN(通用名)必须是你的服务器的URL或IP地址

Windows7不但要求了上面,还要求必须显示说明这个服务器证书的用途(用于服务器证书)--flag serverAuth;

非 iOS的 Mac OS X要求了「IP安全网络密钥互换居间(IP Security IKE Intermediate)」这种增强型密钥用法(EKU),--flag ikdeIntermediate;

Android和 iOS 都要求服务器别名(serverAltName)就是服务器的 URL或 IP 地址,--san。

安装证书

cp -r ca.cert.pem /etc/ipsec.d/cacertscp -r server.pem /etc/ipsec.d/privatecp -r ca.pem /etc/ipsec.d/private
 
cp -r server.cat.pen  /etc/ipsec.d/certs 
然后把CA证书ca.cert.pem 安装到安卓客户端

 

 

2.配置ipsec.conf 

vi /etc/ipsec.conf

conn iOS_ikev2

 

        keyexchange=ikev2
        ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
        esp = aes256-sha256,3des-sha1,aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        mobike=yes
        fragmentation=yes
     #left
        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=psk
        leftid=forum.org.cn(与服务器证书的CN和san 一致)
        #right
        right=%any
        rightsourceip=%config
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add
   conn Android_ikev2
        keyexchange=ikev2
        ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
        esp = aes256-sha256,3des-sha1,aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        mobike=yes
        fragmentation=yes
     #left
        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=server.cert.pem
        leftsendcert=always
     leftid=emmdemo.jianq.com
        #right
        right=%any
        rightsourceip=%config
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add  keyexchange=ikev2
        ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
        esp = aes256-sha256,3des-sha1,aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        mobike=yes
        fragmentation=yes
     #left
        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=psk
        leftid=forum.org.cn(与服务器证书的CN和san 一致)
        #right
        right=%any
        rightsourceip=%config
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add
   conn Android_ikev2
        keyexchange=ikev2
        ike=aes256-sha256-modp1024,3des-sha1-modp1024,aes256-sha1-modp1024!
        esp = aes256-sha256,3des-sha1,aes256-sha1!
        dpdaction=clear
        dpddelay=300s
        rekey=no
        mobike=yes
        fragmentation=yes
     #left
        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=server.cert.pem
        leftsendcert=always
     leftid=emmdemo.jianq.com
        #right
        right=%any
        rightsourceip=%config
        rightauth=eap-mschapv2
        rightsendcert=never
        eap_identity=%any
        auto=add

 

 

 

 

 

3.配置ipsec.secrets,该文件主要保存的客户端和服务器之间的数据加密方式及用户的信息

vi /etc/ipsec.secrets

 

:   RSA  server.pem

:   PSK  0s+base64

jianq : XAUTH "123456"

说明:

RAS 为服务器的私钥证书

PSK即为共享密钥,其数据格式为0s+base64编码的数据,

     XAUTH左右两端的分别为用户名和用户登录密码(字符串)

修改/etc/strongswwan.d/Charon-logging.cong配置文件:

该文件主要是用于控制输出的调试信息

4.配置strongswa.conf

vi /etc/strongswan.conf

 

 

charon {
        load_modular = yes
        duplicheck.enable = no
         compress = yes
        dns1 = 8.8.8.8
        dns2 = 8.8.4.4

     filelog {
            /var/log/strongswan.charon.log {
                time_format = %b %e %T
                    default = 2
                    append = no
                    flush_line = yes
            }
}

 

 

 

 

 

说明:其他的保持不变

从strongswan5以后,无论是ikev1还是ikev2协议都使用ike2的daemon:charon来实现

duplicheck.enable = no:是为了同时连接多个设备,所以要把冗余检查关闭

 /var/log/strongswan.charon.log配置的strongswan的日志的格式

 default = 2:定义的是日志的级别,默认日志级别为:-1,0,1,2,3,4,-1是完全没有日志,

0只告诉你建立连接,连接关闭;

1只输出错误提示,

2会输出错误,警告和调试信息;

3会把连接传输的数据也打印;

4则会把密钥内容这些敏感数据也打印。

一般情况下,1或2都可以

 append = no:是相当你重启strogswan后,是按上次日志写,还是新建一个日志(上次的会删除)。

因为strogswan的日志太多了,所以用no flush_line = yes:是每产生一行日志,就写入到磁盘一次,防止突然断电,磁盘缓存数据丢失。

 

5.修改 /etc/strongswan.d/charon-logging.conf

 

 

charon {
    # Section to define file loggers, see LOGGER CONFIGURATION in
    # strongswan.conf(5).
    filelog {
        # <filename> is the full path to the log file.
        # <filename> {
            # Loglevel for a specific subsystem.
            # <subsystem> = <default>
            # If this option is enabled log entries are appended to the existing
            # file.
            append = yes
            # Default loglevel.
             default = 1
            # Enabling this option disables block buffering and enables line
            # buffering.
            # flush_line = no
         flush_line=yes
            # Prefix each log entry with the connection name and a unique
            # numerical identifier for each IKE_SA.
            # ike_name = no
             ike_name=yes
            # Prefix each log entry with a timestamp. The option accepts a
            # format string as passed to strftime(3).
            # time_format =
               time_format=%b %e %T
        # }
    }

    # Section to define syslog loggers, see LOGGER CONFIGURATION in
    # strongswan.conf(5).
    syslog {
        # Identifier for use with openlog(3).
        # identifier =
        # <facility> is one of the supported syslog facilities, see LOGGER
        # CONFIGURATION in strongswan.conf(5).
        # <facility> {
            # Loglevel for a specific subsystem.
            # <subsystem> = <default>
            # Default loglevel.
            # default = 1
              default=1
            # Prefix each log entry with the connection name and a unique
            # numerical identifier for each IKE_SA.
            # ike_name = no
                ike_name=yes
        # }
    }
}








 

 

 

 

 

 类似资料: