砥砺前行,蜗牛也上网
VPS、独服专业分享站

Centos VPS主机(OpenVZ 、Xen/KVM)搭建ipsec VPN服务器

[文章改编自网络,并非完全原创]

本方法在Centos6、Centos7上测试通过,其他系统未作测试

一、下载编译源码

yum install pam-devel openssl-devel make gcc
wget http://download.strongswan.org/strongswan.tar.gz
tar xzf strongswan.tar.gz
cd strongswan-*

配置编译参数:
OpenVZ:

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

Xen、KVM:

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

 

编译安装:

make; make install

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

 

二、配置证书

ipsec pki --gen --outform pem > ca.pem
ipsec pki --self --in ca.pem --dn "C=CN, O=zxmvpn, CN=ZXM CA" --ca --outform pem >ca.cert.pem
ipsec pki --gen --outform pem > server.pem

将下面命令中的123.123.123.123替换为自己服务器的IP地址或域名,这里一定要注意,要与VPN客户端拨号时的信息保持一致,拨号时用域名这里也用域名:

ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=CN, O=zxmvpn, 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=CN, O=zxmvpn, 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 "ZXM 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 //最新strongswan版本为5.7.1,此行必须删除,否则报错无法启动ipsec
        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

 

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

: RSA server.pem
: PSK "[密码]"
[] : XAUTH "[密码]"
[] : EAP "[密码]"

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

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

 

四、配置防火墙

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

2,配置iptables:

OpenVZ:

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

Xen、KVM则执行:

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 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.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE

3,保存iptables设置:

service iptables save

4.设置iptables开机自动启动

systemctl enable iptables.service

五、启动

ipsec start

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

/usr/local/sbin/ipsec start

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

六、客户端配置

1.windows

win7、win8采用证书认证

导入证书:

  • 开始菜单搜索“cmd”,打开后输入 mmc(Microsoft 管理控制台)。
  • “文件”-“添加/删除管理单元”,添加“证书”单元
  • 证书单元的弹出窗口中一定要选“计算机账户”,之后选“本地计算机”,确定。
  • 在左边的“控制台根节点”下选择“证书”-“个人”,然后选右边的“更多操作”-“所有任务”-“导入”打开证书导入窗口。
  • 选择刚才生成的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连接设置中打开“使用证书”选项,选择刚才安装的证书即可。

 

赞(0) 打赏
未经允许不得转载:上网的蜗牛 » Centos VPS主机(OpenVZ 、Xen/KVM)搭建ipsec VPN服务器

请不吝赐教 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏