在EdgeOS/VyOS上启用IKEv2 拨号VPN

简介

我们在上一篇文章《如何快速在CentOS7上部署VPN服务器》介绍了在CentOS 7上部署IKEv2服务器的方法。这种最常见的部署方式还是有几个缺点,

  • 所有配置都是基于各个模块的对应配置文件,分散在不同的目录下,让备份和复制变得很麻烦;
  • 很多基础的网络功能模块都需要单独安装;
  • 手动配置出错导致系统崩溃的几率比较大。

这里我们介绍在EdgeOS/VyOS下,如何部署IKEv2 Roadwarrior VPN的方案。EdgeOS/VyOS集成了非常丰富的网络功能,配置可以脚本化,非常便于部署。然而,EdgeOS/VyOS内置的命令行并不直接支持IKEv2 Roadwarrior VPN,我们需要增加一些自己制作的配置文件。这些配置文件都统一保存在/config/ipsec.d目录下,在系统升级的时候不会丢失,也便于备份。

大家需要注意的是,低端的EdgeRouter路由器,会因为内存和处理性能的限制,无法同时支持较多的IPSec连接。基于x86的VyOS平台则完全没有这个限制。

预先准备

实现本文介绍的功能,你需要一台EdgeRouter或者安装好VyOS的软路由。

在参考本文开始配置以前,我们假定大家已经按照介绍VyOS一文完成了VyOS的初始化配置。使用EdgeOS的用户,可以使用系统自带的wizard完成初始配置。

你还需要有一个公网地址,以便客户端可以用来连接。我们并不需要静态地址,动态地址也可以,只要设置好相应的动态域名即可。具体方法请参考EdgeRouter配置DDNS动态域名一文。

签发证书

服务器密钥

我们先使用专门的RSA密钥工具生成服务器用证书密钥。如果你已经根据如何在EdgeRouter上配置站点到站点IPSec VPN隧道配置过基于RSA的隧道,可以跳过这一小节。我们把生成的RFC3110格式的公钥保存到/config/ipsec.d/rsa-keys/下,后续配置站点到站点的IPSec还会用到。

generate vpn rsa-key > localhost.pub
sudo mv ./localhost.pub /config/ipsec.d/rsa-keys/

然后,我们进入root模式,并创建工作目录。

sudo -i
mkdir -p /config/ipsec.d/{cacerts,certs,private}

再把现有的localhost.key复制到密钥目录。

sudo cp /config/ipsec.d/rsa-keys/localhost.key /config/ipsec.d/private/server-key.pem

EdgeOS

接下来,我们调用PKI命令创建一个自签发的CA证书。下面参考命令中,”CN=Creekside EdgeOS CA”是证书颁发机构名称,你可以根据自己的情况修改。

pki --gen --type rsa --outform pem > /config/ipsec.d/private/ca-key.pem 

pki --self --ca --type rsa --lifetime 3650 \
  --in /config/ipsec.d/private/ca-key.pem \
  --dn "CN=Creekside EdgeOS CA" \
  --outform pem > /config/ipsec.d/cacerts/ca-cert.pem

随后,我们使用刚才签发的CA证书,再为本机签发VPN服务器证书和密钥。请注意替换相应的服务器域名信息(范例中的”vpn.creekside.network”)。

pki --pub --in /config/ipsec.d/private/server-key.pem | \
  pki --issue --cacert /config/ipsec.d/cacerts/ca-cert.pem \
  --cakey /config/ipsec.d/private/ca-key.pem \
  --dn "CN=vpn.creekside.network" \
  --san="vpn.creekside.network" \
  --flag serverAuth --flag clientAuth --flag ikeIntermediate \
  --outform pem --digest sha256 > /config/ipsec.d/certs/server-cert.pem

VyOS

VyOS没有PKI这么好用的工具。好在系统内置了openssl,我们同样可以生成PKI用的证书文件。

我们调用openssl命令创建一个自签发的CA证书。下面参考命令中,在subj选项里,C=国家,O=组织,CN=证书颁发机构名称,这三项你可以根据自己的情况修改。

openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
    -keyout /config/ipsec.d/private/ca-key.pem \
    -out /config/ipsec.d/cacerts/ca-cert.pem \
    -addext "keyUsage=Certificate Sign, CRL Sign" \
    -subj "/C=US/O=CreekSide Networks/CN=Creekside VyOS CA"

随后,我们使用服务器密钥生成服务器证书申请文件。

openssl req -new -nodes \
  -key /config/ipsec.d/private/server-key.pem \
  -out /config/ipsec.d/certs/server.csr \
  -subj /CN="vpn.creekside.network"

在签发证书前,还要创建一个用于签发的extension文件,以便包括关键的SAN以及其他参数。 [alt_names]下,可以设置多个域名,分别以DNS.1, DNS.2 …列出。

echo "authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth,clientAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = vpn.creekside.network" > /config/ipsec.d/vpn-server.ext

最后,我们使用刚才生成的CA证书,签发VPN服务器证书。

openssl x509 -req -days 3650 -CAcreateserial \
  -in /config/ipsec.d/certs/server.csr \
  -CA /config/ipsec.d/cacerts/ca-cert.pem \
  -CAkey /config/ipsec.d/private/ca-key.pem  \
  -out /config/ipsec.d/certs/server-cert.pem \
  -extfile /config/ipsec.d/vpn-server.ext

配置IPSec连接参数

连接配置

使用下面命令创建/config/ipsec.d/ipsec.conf定制化配置文件。

echo "
# customized roadwarrior configuration by Creekside Networks LLC
config setup
    uniqueids=never

ca rootca
    cacert=/config/ipsec.d/cacerts/ca-cert.pem

conn winlx
    ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha1,aes128-sha1,3des-sha1!
    keyexchange=ikev2
    compress=no
    type=tunnel
    fragmentation=yes
    forceencaps=yes
    dpddelay=300s
    dpdtimeout=30s
    dpdaction=clear
    forceencaps=yes
    ikelifetime=4h
    lifetime=2h
    eap_identity=%identity
    auto=add
    rekey=no
    left=%any
    leftcert=/config/ipsec.d/certs/server-cert.pem
    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 apple
    also=winlx
    [email protected]
" > /config/ipsec.d/ipsec.conf

说明

  • 考虑到EdgeRouter硬件加速的限制,我们只配置了有限的PN加密认证算法;如果是基于x86的VyOS平台,可以在去除IKE/ESP算法后面的”!”号,系统会自动加载所有算法;
  • 苹果产品系列,remote id(等同于上述的leftid)是必填。因此我们这里将VPN服务器的域名作为remote id。你也可以用任何字符串,只要客户端设置时与此匹配就好。

密钥及用户账户

我们使用以下命令创建用户认证文件: /config/ipsec.d/ipsec.secrets。

echo "
# roadwarrior user accounts 

 : RSA /config/ipsec.d/private/server-key.pem

bob  : EAP bobpasswd
alice : EAP alicepasswd
"  > /config/ipsec.d/ipsec.secrets

exit

如果你可以参考最后两行行用户账户的格式 (用户名 :EAP 密码),添加更多的用户。用户名可以是任意字符串,你也可以使用邮箱作为用户名。在用户名和密码之间,使用” :EAP “来分割。

最后,别忘了使用exit命令退出root模式。

设置防火墙

WAN口规则

接下来,我们进入配置状态,配置相应的防火墙策略

configure

set firewall name WAN_LOCAL rule 200 action 'accept'
set firewall name WAN_LOCAL rule 200 description 'ipsec ike'
set firewall name WAN_LOCAL rule 200 destination port '500,4500'
set firewall name WAN_LOCAL rule 200 log 'disable'
set firewall name WAN_LOCAL rule 200 protocol 'udp'

set firewall name WAN_LOCAL rule 201 action 'accept'
set firewall name WAN_LOCAL rule 201 description 'ipsec esp'
set firewall name WAN_LOCAL rule 201 log 'disable'
set firewall name WAN_LOCAL rule 201 protocol 'esp'

set firewall name WAN_LOCAL rule 210 action 'accept'
set firewall name WAN_LOCAL rule 210 description 'ipsec traffic'
set firewall name WAN_LOCAL rule 210 log 'disable'
set firewall name WAN_LOCAL rule 210 protocol 'all'
set firewall name WAN_LOCAL rule 210 ipsec match-ipsec

set firewall name WAN_IN rule 210 action 'accept'
set firewall name WAN_IN rule 210 description 'ipsec traffic'
set firewall name WAN_IN rule 210 log 'disable'
set firewall name WAN_IN rule 210 protocol 'all'
set firewall name WAN_IN rule 210 ipsec match-ipsec

commit;save;exit

由于从IPSec隧道出来的数据包被视作来自WAN口,因此,需要在WAN口的IN和LOCAL两个规则集上都配置相应的规则允许数据包接入。

TCP MSS

由于esp的带来的额外负担(overhead)大约在90字节左右,考虑到PPPoE下局域网IP包最大长度被限制在1500-8=1492字节,因此TCP MSS值最大为1500-8-90-40=1362字节。考虑到可能会有GRE over IPSec,保守一点,我们可以设置为1300字节。

VyOS

configure
set firewall options interface eth0 adjust-mss 1300
commit;save;exit

EdgeOS

configure
set firewall options mss-clamp interface-type all
set firewall options mss-clamp 1300
commit;save;exit

配置NAT-exclude

因为是定制化VPN,所以需要专门配置NAT-exclude,把发送给VPN客户端的流量排除在正常WAN的NAT之外,否则,NAT过的流量,无法进入IPSec隧道返回。由于NAT规则是顺序执行的,这条配置需要排在WAN口masquerade规则的前面。

EdgeOS

configure
edit service nat rule 5010
set description "exclude roadwarrior ipsec"
set destination address 10.255.255.0/24
set exclude
set log disable
set outbound-interface eth0
set protocol all
set type masquerade
commit;save;exit

VyOS

configure
edit nat source rule 10
set description "exclude roadwarrior ipsec"
set destination address 10.255.255.0/24
set exclude
set log disable
set outbound-interface eth0
set protocol all
set translation address masquerade
commit;save;exit

启用VPN配置

最后我们把刚才定制过的VPN文件添加到配置里。

configure
set vpn ipsec include-ipsec-conf /config/ipsec.d/ipsec.conf
set vpn ipsec include-ipsec-secrets /config/ipsec.d/ipsec.secrets
commit;save;exit

配置客户端

我们需要把自签发的证书(/config/ipsec.d/cacerts/ca-cert.pem)拷贝出来,安装在客户端上。具体配置步骤,请参考如何设置IPSec VPN客户端一文。需要注意的是,Windows不能识别后缀为pem的证书文件,请下载后重命名为ca-cert.cer。

验证

以下命令可以用于验证和调试:

  • openssl x509 -text -in <证书文件>,用于查看证书内容
  • sudo ipsec statusall,查看ipsec状态
  • sudo ipsec listcerts,显示服务器证书信息
  • sudo ipsec restart, 重启Strongswan,当你改变了上述定制文件,需要用这个命令
  • sudo swanctl –log,显示strongswan日志,对于诊断用户端连接问题非常有用。

在EdgeOS/VyOS上启用IKEv2 拨号VPN》有208个想法

  1. สล็อต เครดิตฟรี ไม่ต้องฝากก่อน ไม่ต้องแชร์ ยืนยันเบอร์โทรศัพท์

    Hey There. I found your blog using msn. This is a really well written article.

    I’ll make sure to bookmark it and come back to read more of your useful information. Thanks for the post.
    I’ll definitely return.

    Also visit my blog :: สล็อต เครดิตฟรี ไม่ต้องฝากก่อน ไม่ต้องแชร์ ยืนยันเบอร์โทรศัพท์

    回复
  2. WalterGop

    Whether you relish in casinos and their slot machines or casino cards games such as blackjack or poker, appropriate some period to research the diverse options accessible to you for having entertainment while playing ethically and safely. You can by far occupy oneself with our step-by-step instruction on how the pages work when you read here.
    Below, we have compiled helpful information on choosing among the top online casinos, especially online casinos, and which casinos are the easiest to find.
    my web-site: [url=https://21megaportal.com/?cat=2] 21MeGaPOrTAL[/url]
    dadadxaawdw2r22221

    回复

发表评论

邮箱地址不会被公开。