如何快速在CentOS7上部署VPN服务器

简介

IKEv2,是一款全新的IPSec VPN协议,相较之前的版本,支持终端在不同的网络之间切换,连接也更加稳定可靠。目前主流操作系统,包括Windows 7及以后的版本,MAC OS, iOS等,都已经预装的官方的VPN客户端。

本文介绍如何在CentOS 7服务器上安装配置Strongswan VPN服务器软件。

安装StrongSwan

Strongswan是一款开源的IPSec软件,我们用它来配置我们的VPN服务器。在终端里执行以下命令,安装Strongswan套件。

sudo yum -y install epel-release
sudo yum install -y strongswan

自签发证书

拨入VPN服务器需要使用证书来认证。我们可以使用Strongswan自带的PKI工具来生成CA证书,服务器证书及密钥。所有这些证书文件都保存在 /etc/strongswan/ipsec.d/目录下。

第一步是生成CA密钥。

sudo strongswan pki --gen --type rsa --size 4096 --outform pem > \
         /etc/strongswan/ipsec.d/private/ca-key.pem

接下来使用CA密钥生成CA证书,下面命令行中“VPN root CA”是签发机构名称,可以替换成任何字符串。

sudo strongswan pki --ca --lifetime 3650 \
        --in /etc/strongswan/ipsec.d/private/ca-key.pem \
        --type rsa --dn "CN=VPN root CA" --outform pem > \
        /etc/strongswan/ipsec.d/cacerts/ca-cert.cer

同样的方式,我们再生成服务器密钥。

sudo strongswan pki --gen --type rsa --size 4096 --outform pem > \
         /etc/strongswan/ipsec.d/private/server-key.pem

 然后用刚才生成的服务器密钥,CA密钥和证书,签发服务器证书。你需要替换下面段落中服务器的域名。

sudo strongswan pki --pub --type rsa \
        --in /etc/strongswan/ipsec.d/private/server-key.pem  \
    | sudo strongswan pki --issue --lifetime 3600 \
        --cacert /etc/strongswan/ipsec.d/cacerts/ca-cert.cer \
        --cakey /etc/strongswan/ipsec.d/private/ca-key.pem \
        --dn "CN=vpn.mydomain.com" --san vpn.mydomain.com \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  /etc/strongswan/ipsec.d/certs/server-cert.cer

配置VPN服务器

Strongswan有两个文件,一个是配置文件/etc/strongswan/ipsec.conf, 另一个是密钥文件 /etc/strongswan/ipsec.secrets。使用你熟悉的编辑器对这些文件直接修改。

/etc/strongswan/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file

# basic configuration

config setup
    charondebug="ike 1, knl 1, cfg 1"
    uniqueids=no

conn %default
    left=%any
    # Windows requires aes256-sha1-modp1024 to be placed in the 1st position
    # these lines end without '!' to append default crypto suites automatically
    ike=aes256-sha1-modp1024
    esp=aes256-sha1
    compress=no
    type=tunnel
    fragmentation=yes
    forceencaps=yes
    dpddelay=300s
    dpdtimeout=30s
    dpdaction=restart
    forceencaps=yes
    ikelifetime=4h
    lifetime=2h

conn ras-winlinux
    eap_identity=%identity
    auto=add
    rekey=no
    dpdaction=clear
    leftid=%any
    leftcert=server-cert.cer
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.255.255.1/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

conn ras-apple
    also=ras-winlinux
    [email protected]
参数说明
  1. ike, esp: 这两个参数是设置密码算法的,由于Windows的bug原因,必须把上述范例里的这两个算法放在最前面。
  2. leftsubnet: IKEv2支持split tunnel,也就是本地流量走本地,远端流量走服务器。如果要让所有互联网流量走服务器,就要配置为0.0.0.0/0,否则配置为远端目标网段,例如192.168.100.0/24。
  3. rightsourceip,VPN客户端动态分配的地址池。
  4. rightdns,VPN客户端使用的DNS服务器地址,只在leftsubnet为0.0.0.0/0才有意义。
  5. leftid,对应苹果客户端要求设置的remote id,一般都配置为服务器的域名,也可以是任何字符串。
/etc/strongswan/ipsec.secrets
# ipsec.secrets - strongSwan IPsec secrets file

# roadwarrior user accounts 

 : RSA server-key.pem

user1  : EAP "userpassword1"

配置防火墙

我们需要配置防火墙策略实现以下目的:

  1. 允许IPSec相关流量进入;
  2. 允许转发客户端流量,并对客户端IP进行地址转换;
  3. 对TCP包设置最大包大小,避免大包碎片化造成性能下降;

首先修改/etc/sysctl.conf,允许转发。

sudo echo "# VPN forwarding setup
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf
sudo sysctl -p

接下来设置防火墙策略,允许IPSec流量进入。

sudo firewall-cmd --zone=public --add-service=ipsec
sudo firewall-cmd --zone=public --add-port=4500/udp

设置出口地址转换,让远端客户端可以使用服务器IP访问相关资源。

sudo firewall-cmd --zone=public --add-masquerade

增加一条防火墙策略,允许转发客户端流量,注意下面的网段需要和ipsec.conf里的设置一致。

sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -s 10.255.255.0/24 -j ACCEPT

设置TCP MSS(最大报文段长度),避免过多的碎片包影响性能。一般我们可以设置TCP大小在360字节左右,如果再考虑某些使用GRE隧道的情况,建议设置在1300字节更保险。

sudo firewall-cmd --direct --add-passthrough ipv4 -t mangle \
            -I FORWARD -p tcp --syn -j TCPMSS --set-mss 1300

最后,将新配置的策略永久保存,下次重启时firewalld会自动装载。

sudo firewall-cmd --runtime-to-permanent

测试

接下来我们开始测试,先启用StrongSwan服务。

sudo systemctl enable strongswan
sudo systemctl start strongswan

查看证书是否正确装载。

sudo strongswan listcerts

显示所有连接状态。

sudo strongswan statusall

  如果无法正常建立连接,日志是一个非常有用的工具。

sudo tail -f -n 200 /var/log/messages

如何快速在CentOS7上部署VPN服务器》有174个想法

  1. http://tinyurl.com/y49bjbfn

    I do not know whether it’s just me or if everyone else encountering issues with your blog.
    It seems like some of the written text within your content are
    running off the screen. Can someone else please comment and let me
    know if this is happening to them too? This might be a problem with my web browser because I’ve had
    this happen before. Many thanks

    回复

发表评论

邮箱地址不会被公开。