分类目录归档:网络

如何快速在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

如何设置IPSec VPN客户端

简介


使用VPN,可以让你随时随地,通过加密的隧道,安全访问公司内网资源。

我们使用基于IPSec最新的协议IKEv2来实现VPN。这个协议提供了更可靠快速的认证,以及漫游不同网络的能力。更方便的是,很多常用操作系统,如Window 7以上,macOS,iOS都内置了官方的客户端,使用起来也非常顺畅便捷。

本文介绍了如何在Windows, macOS, Ubuntu, iOS和安卓上设置VPN客户端的方法。

预先准备

  • 下载CA证书
  • 从你的网管那里获取连接参数
    • VPN服务器的域名,类似‘vpn.creekside.network’形式;
    • 你的VPN账户名和密码;
  • 使用安卓手机的客户请下载客户端

Windows10


安装证书

Windows10安装证书的手续略为复杂,请参考以下胶片(点击左右侧箭头可翻页)。

win10-install-certs-1

1. 搜索应用程序mmc.exe并以管理员身份运行

win10-install-certs-2

2. 从文件菜单,选择添加/删除管理单元

win10-install-certs-3

3. 从左侧选择“证书”,然后点击中间的“添加”按钮

win10-install-certs-4

4. 选择计算机账户,然后点击下一步

win10-install-certs-5

5. 选择本地计算机,然后点击完成

win10-install-certs-6

6. 返回证书管理页面

win10-install-certs-7

7. 浏览到受信任的根证书颁发机构,鼠标右键,在所有任务菜单下,选择导入

win10-install-certs-8

8. 进入证书导入向导

win10-install-certs-9

9. 在文件名输入框右侧,点击浏览

win10-install-certs-10

10. 找到你之前下载的证书文件,点击打开

win10-install-certs-11

11. 浏览择证书保存选择选项,并选择受信任的根证书

win10-install-certs-12

12. 恭喜你,完成了证书导入流程

previous arrowprevious arrow
next arrownext arrow
 

设置连接

Windows已经内置了IKEv2 VPN客户端。你需要在第4步里填写你收到的VPN服务器设置信息:

  • VPN服务商:选”Windows内置”
  • 连接名称:你可以自定义便于记忆的名称
  • 服务器名称或地址:填写服务器域名
  • VPN类型:选择“IKEv2”
  • 登录类型:账户名和密码
  • 账户名:你的账户名
win10-ikev2-conn-1

1. 从任务条右下角,点击网络连接图标。

win10-ikev2-conn-2

2. 点击左侧的VPN选项。

win10-ikev2-conn-3

3. 右边VPN页面下,选择添加VPN

win10-ikev2-conn-4

4. 根据前面说明,填写相应的内容。不要使用图片中的信息

win10-ikev2-conn-5

5. 你已完成设置,使用连接启动VPN。

previous arrow
next arrow
 

通过VPN访问互联网

IKEv2自动支持split tunnel功能,也就是只有远程网络才走VPN隧道,互联网流量还是走本地网关。在某些应用场景下,如果你希望使用公司的网络来访问互联网,就可以根据以下步骤完成进一步的配置。

win10-use-remote-gateway-1

1. 在 VPN 页面下, 点击相关设置下的 更改适配器选项

win10-use-remote-gateway-2

2. 鼠标右键点击VPN连接, 然后从下拉菜单中选择 属性

win10-use-remote-gateway-3

3.在对话框中,选择网络分页,然后选择TCP/IPv4一行,点击属性

win10-use-remote-gateway-4

4. 点击右下方的 高级...

win10-use-remote-gateway-5

5. 勾选在远程网络上使用默认网关,取消勾选自动跃点,并在下方的输入框内填入数字1

previous arrow
next arrow
 

Android


Android没有原生客户端,需要下载,并按以下步骤安装。

Static overlay

在应用商店里搜索 “Strongswan VPN Client” 并安装。你也可以从这里下载APK文件并手动安装。

1. 下载Strongswan VPN客户端
Static overlay

通过邮件,或者点击这个链接,下载证书文件到手机,并点击打开。

2. 保存证书文件到手机
Static overlay

选择右侧的证书安装工具,安装证书。

3. 安装证书
Static overlay

你可以用任何字符串命名你的证书,在证书用途上选择VPN应用。然后点击“OK”完成证书安装。

4. 配置证书
Static overlay

打开“Strongswan”应用程序。因为是第一次使用,页面会显示“无活跃VPN”。点击右上角的“添加VPN配置”。

5. 添加VPN配置
Static overlay

输入合适的配置参数(图例只是参考)
- 服务器地址: 输入发送给你的域名.
- VPN 类型: “IKEv2 EAP(用户名/密码)”
- 用户名: 你收到的用户名
- 密码: 你收到的密码
- CA证书: 确认“自动选择”已勾选.(缺省)

完成后保存。

6. 配置VPN连接
Static overlay

回到主页面,点击相应 的VPN配置,即可连接到VPN服务器。

7. 连接到VPN服务器
previous arrow
next arrow

macOS


首先按以下步骤安装证书:

  • 双击下载的证书文件。钥匙串访问应用会自动弹出一个对话框,并提示“钥匙串访问正在尝试修改系统钥匙串。输入密码以允许此次操作“
  • 输入你的计算机密码,然后点击修改钥匙串
  • 双击刚才新引入的VPN证书Creekside Networks Authority。一个参数设置窗口会弹出来,点击信任左侧的箭头,然后在IP安全 (IPSec)一栏中,把缺省的用不信任改成始终信任
  • 系统会再次要求你输入密码确认。确认完成后,刚才的改变会自动被保存下来。证书导入完毕。

接下来我们设置VPN连接。

  • 打开系统偏好设置,选择网络
  • 点击左侧网络列表框下面的“+“号;
  • 在弹出的对话框里
    • 选择接口为VPN
    • VPN类型缺省是IKEv2,这个不要改;
    • 服务名称项目里,你可以输入任何你喜欢的名字;
    • 完成后点击创建;
  • 在新的连接页面里,
    • 服务器地址:输入管理员发给你的域名;
    • 远程ID:和上述服务器地址一样的域名;
    • 本地ID:保持空白;
    • 点击认证设置…,在对话框里输入:
      • 用户名:你的VPN用户名;
      • 密码:你的VPN密码;
      • 完成后,点击“
    • 回到连接页面后,点击应用以保存刚才的设置;
    • 点击连接,你就会连接到VPN服务器了。

iOS


按照以下步骤配置VPN:

  • 使用隔空投送把证书文件发送到你的手机;
  • 一个对话框会自动弹出来,如果你有Apple Watch, 会首先提示你选择选择要安装的设备,选择iPhone,系统会提示描述文件已下载。
  • 打开设置应用,找到通用并打开
    • 向下滑动到描述文件一行出现,点击打开;
    • 在已下载的配置描述文件下方的列表里,点击Creekside Networks Authority一项;
    • 在随后出现的安装描述文件页面中,点击右上角的安装按钮;
    • 输入你的锁屏密码
    • 再次点击安装,证书安装就完成了。
  • 回到通用页面,我们开始配置VPN连接:
    • 向下滑动到VPN一行,点击打开;
    • 在页面的最后一行,点击添加VPN配置…,进入添加配置页面
      • 类型:使用缺省的IKEv2
      • 描述:VPN连接的名称,填写你公司的名称或者任意名字;
      • 服务器地址:输入管理员发给你的域名
      • 远程ID:和上述服务器地址一样的域名
      • 本地ID:保持空白
      • 用户鉴定:保持用户名不变
      • 用户名:你的VPN用户名;
      • 密码:你的VPN密码;
      • 最后点击左上角的完成
    • 回到VPN页面
      • 点选刚才设置的VPN连接;
      • 状态一栏,点击未连接右侧的开关;
      • 你就会连接到VPN服务器了。

Ubuntu


Ubuntu 16.04

首先,我们要下载Strongswan源码,编译并安装:

cd ~
sudo apt-get install -y libssl-dev libglib2.0-dev libnm-dev
wget http://download.strongswan.org/strongswan-5.6.3.tar.bz2
tar xjf strongswan-5.6.3.tar.bz2
cd ~/strongswan-5.6.3
./configure --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib \
   --disable-aes --disable-des --disable-md5 --disable-sha1 
   --disable-sha2 --disable-fips-prf --disable-gmp --enable-openssl \
   --enable-nm --enable-agent --enable-eap-gtc --enable-eap-md5 \
   --enable-eap-mschapv2 --enable-eap-identity
make
sudo make install

然后是NetworkManager的Strongswan插件。

cd ~
sudo apt-get install -y intltool libgtk-3-dev libsecret-1-dev \
  libnma-dev network-manager-dev libnm-util-dev libnm-glib-dev \
  libnm-glib-vpn-dev libnm-gtk-dev

wget http://download.strongswan.org/NetworkManager/NetworkManager-strongswan-1.4.4.tar.bz2

tar xjf NetworkManager-strongswan-1.4.4.tar.bz2
cd ~/NetworkManager-strongswan-1.4.4
./configure --sysconfdir=/etc --prefix=/usr --libexecdir=/usr/lib

make
sudo make install

Ubuntu 18.04

我们先下载官方的Strongswan以及相应的NeworkManager插件。

sudo apt install -y strongswan libcharon-extra-plugins network-manager-strongswan

Setup VPN connections

VPN客户端安装好了,接下来是配置VPN连接。

  • Open System Settings, then select Network;
    • Ubuntu 16.04:
      • Click the + sign at the left-bottom corner, choice Interface type to VPN, then click Create;
    • Ubuntu 18.04
      • Click the + sign at the right side of VPN list.
  • A VPN connection type dialog box will pop out, choose IPSec/IKEv2 (Strongswan), click Create;
    • Now a configuration dialog box will pop out. fill in information as directed below;
      • Name: Any text you like to name the VPN connection
      • Gateway
        • Address: The VPN server’s domain name IT sent to you.
        • Certificate: Browse to choose the certificate file you received. 
      • Client
        • Authentication: Select “EAP
        • Username: Use the userid that is given to you.
        • Password:
          • Click the icon at the end of input box.
          • Select the 2nd option: Store the password for all users.
          • Input your password
      • Options:
        • Make sure you check the “Request an inner IP address”.
        • Optionally you may also check Enforce UDP encapsulation
        • Leave use IP compression unchecked.
      • Cipher Proposals
        • Leave this section blank.
    • Finally click the “Add” button to save the configuration.