centos6.5 x86_64下编译安装strongswan

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

centos6.5 x86_64

1,安装必须的库

yum update

yum install pam-devel openssl-devel make gcc

2,下载strongswan

wget http://download.strongswan.org/strongswan.tar.gz

tar xzf strongswan.tar.gz

cd strongswan-*

 

3,编译安装

./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

 

make && make install

4,生成CA证书私钥

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

使用私钥自签一个CA证书

ipsec pki --self --in ca.pem --dn "C=col, O=ss, CN=VPNCA" --ca --outform pem >ca.cert.pem

生成服务器证书所需的私钥:

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

用自签CA证书签发服务器证书

先确认你的服务器的IP地址或域名,以后客户端连接时只能使用证书中的地址连接(多服务器使用相同根证书CA的,请先做好服务器的域名解析),

然后将下面命令中的123.123.123.123替换为自己服务器的IP地址或域名,一共需要替换两处:

ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=col, O=ss, CN=123.123.123.123" --san="123.123.123.123" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

 

注意:以上命令中的”C=”和”O=”的值要与第2步CA中的C,O的值保持一致.

 

5,生成客户端证书所需的私钥:

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

用自签CA证书签发客户端证书(C,O的值要与上面第2步CA的值一致,CN的值随意):

ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=col, O=ss, CN=VPN Client" --outform pem > client.cert.pem

 

将生成客户端证书转换pkcs12证书(以备移动端导入)

openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "VPNCA"  -out client.cert.p12

注意以上命令中的”-caname”后面的引号里的值必须要与第2步CA中的”CN=”的值保持一致.

输入客户端登录用户密码hello

 

6,安装证书:

cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/

cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/

cp -r server.pem /usr/local/etc/ipsec.d/private/

cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/

cp -r client.pem  /usr/local/etc/ipsec.d/private/

 

7,配置strongswan

vi /usr/local/etc/ipsec.conf 将内容完全替换为一下内容

config setup

    uniqueids=never 

conn iOS_cert

    keyexchange=ikev1

    fragmentation=yes    开启对 iOS 拆包的重组支持。

    left=%defaultroute

    leftauth=pubkey   表示用证书

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any

    rightauth=pubkey

    rightauth2=xauth

    rightsourceip=10.11.2.0/24

    rightcert=client.cert.pem

    auto=add

conn android_xauth_psk

    keyexchange=ikev1

    left=%defaultroute

    leftauth=psk 表示用密码

    leftsubnet=0.0.0.0/0

    right=%any

    rightauth=psk

    rightauth2=xauth

    rightsourceip=10.11.2.0/24

    auto=add

conn networkmanager-strongswan

    keyexchange=ikev2

    left=%defaultroute         %defaultroute 表示自己从 ifconfig 里取 IP

    leftauth=pubkey

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem  指定证书名字

    right=%any

    rightauth=pubkey

    rightsourceip=10.11.2.0/24 为客户端分配的虚拟 IP 段

    rightcert=client.cert.pem  指定证书名字

    auto=add   

  • auto 定义 strongswan 启动时该连接的行为。start 是启动; route 是添加路由表,有数据通过就启动; add 是添加连接类型但不启动; ignore 是当它不存在。默认是 ignore。看起来似乎是 route 比较好,但问题是我们服务器端不能预分配虚拟 IP,所以服务器端一般用的都是 add。而客户端文本配置可以选择 start。

 

conn windows7

    keyexchange=ikev2

    ike=aes256-sha1-modp1024!   指定的第一阶段加密方法

    rekey=no    服务器对 Windows 发出 rekey 请求会断开连接

    left=%defaultroute

    leftauth=pubkey

    leftsubnet=0.0.0.0/0

    leftcert=server.cert.pem

    right=%any       魔术字 %any,表示什么都行。

    rightauth=eap-mschapv2

    rightsourceip=10.11.2.0/24

    rightsendcert=never   服务器不要向客户端请求证书

    eap_identity=%any        eap 表示用扩展验证协议, eap_identity使用 Windows 的 eap 身份认证

    auto=add

 

vi /usr/local/etc/strongswan.conf

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

        nbns1 = 8.8.8.8

        nbns2 = 8.8.4.4

}

include strongswan.d/*.conf

 

vi /usr/local/etc/ipsec.secrets

: RSA server.pem

: PSK "xskywallker"

: XAUTH "uiop890"

law %any : EAP "hello"

格式:主机  对等点 : 方法 <本机证书/协议密码> <本机证书密码>

以 :为分界,分别从左到右填充,除了各类密码缺失以 null 补位,其它都用 %any 补位(密码怎么可能是 %any)。

将上面的xskywallker单词更改为你需要的PSK认证方式的密钥;

将上面的uiop890单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;

将上面的law改为自己想要的登录名,hello改为自己想要的密码,可以添加多行,得到多个用户,这即是使用IKEv2的用户名+密码认证方式的登录凭据.

 

启动服务
ipsec start

启动调试,打印整个连接建立过程,便于排错
ipsec start --nofork --debug-all

关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

 

配置转发

echo 1 > /proc/sys/net/ipv4/ip_forward

sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf

sysctl -p

 

添加防火墙规则

iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -p tcp --dport 22 -i eth0 -j ACCEPT
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -p udp --dport 53 -i eth0 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -i eth0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.11.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.11.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.11.2.0/24  -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.11.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.11.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.11.2.0/24 -o eth0 -j MASQUERADE

service iptables save

 

win7下测试

使用 Shrew Soft VPN Client测试ikev1

下载:https://www.shrew.net/download/

 

安装后打开,选「Add」:

「General」选项卡下,把「Host Name or IP address」添好

「Authorization」选项卡下:

「Authorization Method」选「Mutual PSK + XAuth」

「Local Identity」的「Identification Type」选「IP Address」

「Credentials」下面「Pre Shared Key」里输入 PSK 密码

「Phrase 1」,「Exchange Type」选「Main」

「Phrase 2」,「PFS Exchange」选「auto」

保存。连接时用户名密码是你的 XAUTH 用户名密码。

 

使用自带客户端(Agile):

导入证书:

开始菜单搜索「cmd」,打开后输入 mmc(Microsoft 管理控制台)。

「文件」-「添加/删除管理单元」,添加「证书」单元

证书单元的弹出窗口中一定要选「计算机账户」,之后选「本地计算机」,确定。

在左边的「控制台根节点」下选择「证书」-「个人」,然后选右边的「更多操作」-「所有任务」-「导入」打开证书导入窗口。

选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码。下一步「证书存储」选「个人」。

导入成功后,把导入的 CA 证书剪切到「受信任的根证书颁发机构」的证书文件夹里面。

打开剩下的那个私人证书,看一下有没有显示「您有一个与该证书对应的私钥」,以及「证书路径」下面是不是显示「该证书没有问题」。

然后关闭 mmc,提示「将控制台设置存入控制台1吗」,选「否」即可。

至此,证书导入完成。

注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中,ipsec 守护精灵是访问不了它的。

建立连接:

「控制面板」-「网络和共享中心」-「设置新的连接或网络」-「连接到工作区」-「使用我的 Internet 连接」

Internet 地址写服务器地址,注意事项同 openSUSE 的,都是 IP 或都是 URL。

描述随便写。

用户名密码写之前配置的 EAP 的那个。

确定

点击右下角网络图标,在新建的 VPN 连接上右键属性然后切换到「安全」选项卡。

VPN 类型选 IKEv2

数据加密是「需要加密」

身份认证这里需要说一下,如果想要使用 EAP-MSCHAPV2 的话就选择「使用可扩展的身份认证协议」-「Microsoft 安全密码」,想要使用私人证书认证的话就选择「使用计算机证书」。

安卓端

官网给有apk,下载安装,配置,连接试试

本文参考

 

http://quericy.me/blog/512

https://zh.opensuse.org/SDB:Setup_Ipsec_VPN_with_Strongswan#.E7.94.9F.E6.88.90.E8.AF.81.E4.B9.A6.EF.BC.88.E5.8F.AF.E9.80.89.EF.BC.89

转载于:https://my.oschina.net/u/2404183/blog/482180

你可能感兴趣的:(centos6.5 x86_64下编译安装strongswan)