主页 > 建站 > Centos VPS主机(Openvz )搭建ipsec VPN服务器

Centos VPS主机(Openvz )搭建ipsec VPN服务器

2015年4月12日 4条评论

主机为Centos 6.5 64位版本。

一开始使用Openswan+xl2tpd方案,一直由于Openvz主机内核不支持ipsec而出现各种问题,只能使用不加密的l2tp。后来使用Strongswan搭建成功ipsec。

 

一、下载编译源码

yum install pam-devel openssl-devel make gcc

wget http://download.strongswan.org/strongswan.tar.gz
tar xzf strongswan.tar.gz
cd strongswan-*

配置编译参数:

./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 --enable-kernel-libipsec

如果是KVM将上面的--enable-kernel-libipsec去掉

编译安装:

make; make install

编译完成后如果没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功

 

二、配置证书

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

ipsec pki --self --in ca.pem --dn "C=com, O=ywbvpn, CN=YWB CA" --ca --outform pem >ca.cert.pem

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

i将下面命令中的123.123.123.123替换为自己服务器的IP地址或域名,这里一定要注意,要与VPN客户端拨号时的信息保持一致,拨号时用域名这里也用域名:
ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=ywbvpn, CN=123.123.123.123" --san="123.123.123.123" --flag serverAuth --flag ikeIntermediate --outform pem > server.cert.pem

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

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

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

 

安装证书:

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/

 

三、配置Strongswan

1 修改 /usr/local/etc/ipsec.conf:

config setup
    uniqueids=never 
 
conn iOS_cert
    keyexchange=ikev1
    # strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
    fragmentation=yes
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightauth2=xauth
    rightsourceip=10.31.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.31.2.0/24
    auto=add
 
conn networkmanager-strongswan
    keyexchange=ikev2
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightsourceip=10.31.2.0/24
    rightcert=client.cert.pem
    auto=add
 
conn windows7
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!
    rekey=no
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=eap-mschapv2
    rightsourceip=10.31.2.0/24
    rightsendcert=never
    eap_identity=%any
    auto=add

 

2 修改/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
filelog {
/var/log/strongswan.charon.log {
time_format = %b %e %T
default = 2
append = no
flush_line = yes
}
}
}
include strongswan.d/*.conf

3 新增/usr/local/etc/ipsec.secrets文件:

: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
user %any : EAP "pass"
将上面的myPSKkey单词更改为你需要的PSK认证方式的密钥;
将上面的myXAUTHPass单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;
将上面的[user]改为自己想要的登录名,可以是%any ,[pass]改为自己想要的密码,可以添加多行,得到多个用户,这即是使用IKEv2的用户名+密码认证方式的登录凭据

简便起见可以将上面三个密码设置成一样,免得后面配置时搞错

 

四、配置防火墙

1,编辑/etc/sysctl.conf,将net.ipv4.ip_forward=1一行前面的#号去掉,保存后执行sysctl -p

2,配置iptables:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24 -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24 -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24 -j ACCEPT
iptables -A INPUT -i venet0 -p esp -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j MASQUERADE

 

如果是KVM将上面的venet0改为eth0

3,开机自动载入iptables:
service iptables save

五、启动

ipsec start

开机自启动,在rc.local文件加入:

/usr/local/sbin/ipsec start

调试日志文件在/var/log/strongswan.charon.log

 

六、客户端配置

1.windows

win7、win8采用证书认证

导入证书:

  • 开始菜单搜索“cmd”,打开后输入 mmc(Microsoft 管理控制台)。
  • “文件”-“添加/删除管理单元”,添加“证书”单元
  • 证书单元的弹出窗口中一定要选“计算机账户”,之后选“本地计算机”,确定。
  • 在左边的“控制台根节点”下选择“证书”-“个人”,然后选右边的“更多操作”-“所有任务”-“导入”打开证书导入窗口。
  • 选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码。下一步“证书存储”选“个人”。
  • 导入成功后,把导入的 CA 证书剪切到“受信任的根证书颁发机构”的证书文件夹里面。
  • 打开剩下的那个私人证书,看一下有没有显示“您有一个与该证书对应的私钥”,以及“证书路径”下面是不是显示“该证书没有问题”。
  • 然后关闭 mmc,提示“将控制台设置存入控制台1吗”,选“否”即可。

至此,证书导入完成。

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

建立连接:

  • “控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的 Internet 连接”
  • Internet 地址写服务器地址,都是 IP 或都是 URL。
  • 描述随便写。
  • 用户名密码写之前配置的 EAP 的那个。
  • 确定
  • 点击右下角网络图标,在新建的 VPN 连接上右键属性然后切换到“安全”选项卡。
  • VPN 类型选 IKEv2
  • 数据加密是“需要加密”
  • 身份认证这里需要说一下,如果想要使用 EAP-MSCHAPV2 的话就选择“使用可扩展的身份认证协议”-“Microsoft 安全密码”,想要使用私人证书认证的话就选择“使用计算机证书”。

注意,win7、win8由于对于证书有限制,如果配置证书时输入的IP或域名(CN字段)与拨号时不一致,还需修改注册表,跳过名称检查:

打开注册表:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\Parameters
新增键值DisableIKENameEkuCheck,类型为DWORD,设置值为1

 

2.android

添加VPN网络,类型选“IPSec Xauth PSK”,ipsec预共享密钥填ipsec.secrets文件中PSK密钥,拨号用户名随便写,密码写ipsec.secrets文件中Xauth密码。

 

3、IOS苹果设备

添加VPN网络,类型选ipsec,帐号随便写,密码写ipsec.secrets文件中Xauth密码,密钥写ipsec.secrets文件中PSK密钥即可。

苹果设备如要采用证书验证,先将client.cert.p12和ca.cert.pem发到邮箱,然后在设备上安装这两个证书,在VPN连接设置中打开“使用证书”选项,选择刚才安装的证书即可。

评论:4

  1. nick 回复
    2016年6月2日 于 下午8:14

    写的教程不错啊!很详细!请教一个问题:
    ipsec start时输出:
    no netkey IPsec stack detected
    no KLIPS IPsec stack detected
    no known IPsec stack detected, ignoring!

    是什么原因啊?google半天也没找到答案

    • ywb 回复
      2016年8月5日 于 下午10:48

      没遇到过,可问一下VPS管理员

  2. nick 回复
    2016年6月2日 于 下午8:15

    在搬瓦工上开的vps,debian ,kernel 2.6, OpenVZ

  3. geekguo 回复
    2017年1月11日 于 下午5:28

    给博主一个大大的赞。太强了。openvz虚拟机的福音,墙裂推荐。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>