旁路由OpenWRT 下使用 OpenConnect VPN 教程

本文是博主按使用,参考其他文章修改而来。

参考Stille ( https://www.ioiox.com/archives/89.html

凯の秘密基地 ( https://wwww.lvmoo.com/1097.love

前言

由于博主有需求连接家中NAS等设备,之前使用端口转发,需要开放太多端口,端口太多不好记而且也不安全。使用VPN会更简单,并且安全。之前在思科路由器上使用过 AnyConnect VPN,对它印象极佳,同时支持用户密码和证书登陆等。

Cisco AnyConnect 介绍
OpenConnect VPN 通过实现 Cisco 的 AnyConnect 协议,用 DTLS 作为主要的加密传输协议。AnyConnect 的 VPN 协议默认使用 UDP DTLS 作为数据传输,如果因网络问题导致 UDP传输出现问题,它会利用最初建立的 TCP TLS 通道作为备份通道,降低 VPN 断开的概率。使用了 TLS over UDP 技术,少了 TCP握手和稳定的要求,这也是使用体验大幅提升的原因。


下面为博主的网络情况

  • 爱快主路由、OpenWRT 旁路由器
  • 拥有公网 IP并在爱快端配置端口映射
  • 爱快分配IP为192.168.2.253,OpenWRT分配IP为192.168.2.252

OP服务端

各项设置

基本配置

登录 OpenWRT路由器,打开 服务 - OpenConnect VPN.

image-20210421183256475

默认端口为 4443,默认 VPN 网段为 192.168.100.0,根据情况自行更改。

比如我这里演示是修改为 8777端口,IP网段我设置的是 192.168.2.3

DNS servers

image-20210421190157107

这里的DNS设置为内网网络中的DNS服务器,比如我设置的是我主路由爱快的IP地址 192.168.2.253

Routing table

路由表根据需求有两种设置方法 ,一.全局代理,二.内网代理

全局代理 - 当客户端连接 VPN 后,客户端所有 内外网访问都将通过 VPN
所在的局域网代理.(设置方法为清空 Routing table,保持为空)

内网代理 - 当客户端连接 VPN 后,客户端所有 内网访问通过 VPN
所在的局域网代理,而 外网访问则保持使用客户端当前网络.(设置方法为分别添加 内网VPN两个网段)

推荐使用全局代理,目前我使用的也是全局代理。

image-20210421195802390

以上就完成基本配置了,到这里勾选 Enable server 并点击 保存并应用

创建账户

在用户设置中创建用于 VPN 连接的账号和密码。

名称为登陆账户名,密码为账户登陆密码,输入完成后点击 保存并应用使创建生效

Active users会显示当前连接的用户状态。

image-20210423140838572

防火墙设置

在OpenWRT路由中,网络 - 防火墙 -自定义规则中添加以下规则,其中192.168.2.0/24为网络ip网段,按需修改。

iptables -I FORWARD -i vpns+ -s 192.168.2.0/24 -j ACCEPT

image-20210423141715384

以上步骤操作完成后并在主路由爱快端添加OpenWRT的端口映射,如下图

image-20210421200557061

安装下方提供的客户端,打开输入DDNS地址+端口,加上账户名和密码,即可正常连接。

高级设置

1.服务器或证书不信任问题

在通过 DDNS域名连接 VPN时如下图会提示 服务器或证书不受信任,可以点击 Connect Anyway或者 更改设置中取消勾选阻止不信任服务器继续登录.

4054271902

未命名

为彻底解决此问题,首先需要申请域名证书,这个可以在 阿里云之类申请,有提供免费申请。

上传至OpenWRT路由中,并在OpenConnect VPN 编辑模版中修改配置信息

image-20210422093430740

模版中查找以下字段:

server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem

例如将 DDNS域名证书文件命名是DDNS,并上传到/etc/ocserv,那修改路径如下:

server-cert = /etc/ocserv/DDNS.pem
server-key = /etc/ocserv/DDNS.key

点击 保存并应用使创建生效,即无提示不信任问题。

2.证书登陆

使用账户密码登陆麻烦并且不能保存密码,略显麻烦。这时就推荐使用证书登陆。

我下面就在OpenWRT系统内演示创建自签证书并启用证书登陆和账号密码登陆并存。下方命令中的所有 VAY1314VAY 可替换自己为 自己的ID自己的组织 ,生成属于自己的证书。

创建证书目录,创建ssl目录,以存放ca 根证书相关文件。

mkdir -p /etc/ocserv/ssl

创建user目录,以存放用户证书相关文件。

mkdir -p /etc/ocserv/ssl/user

自签 CA 根证书,创建CA 根证书模版。

cat >/etc/ocserv/ssl/ca.tmp<<EOF
cn = "VAY CA"
organization = "VAY"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
EOF

生成CA 根证书私钥

openssl genrsa -out /etc/ocserv/ssl/ca.key.pem 2048

根据CA 根证书私钥和CA 根证书模版生成CA 根证书。

certtool --generate-self-signed --hash SHA256 --load-privkey /etc/ocserv/ssl/ca.key.pem --template /etc/ocserv/ssl/ca.tmp --outfile /etc/ocserv/ssl/ca.cert.pem

生成 Diffie-Hellman 密钥

certtool --generate-dh-params --outfile /etc/ocserv/ssl/dh.pem

自签用户证书
创建用户证书模版

cat >/etc/ocserv/ssl/user/VAY1314.tmp<<EOF
cn = "VAY1314"
unit = "VAY"
expiration_days = 3650
signing_key
tls_www_client
EOF

生成用户证书私钥

openssl genrsa -out /etc/ocserv/ssl/user/VAY1314.key.pem 2048

根据用户证书私钥,CA 根证书,CA 根证书私钥,用户证书模版生成用户证书。

certtool --generate-certificate --hash SHA256 --load-privkey /etc/ocserv/ssl/user/VAY1314.key.pem --load-ca-certificate /etc/ocserv/ssl/ca.cert.pem --load-ca-privkey /etc/ocserv/ssl/ca.key.pem --template /etc/ocserv/ssl/user/VAY1314.tmp --outfile /etc/ocserv/ssl/user/VAY1314.cert.pem

证书链补全

cat /etc/ocserv/ssl/ca.cert.pem >>/etc/ocserv/ssl/user/VAY1314.cert.pem

生成.p12证书文件
务必替换末尾 pass: 后的自定义密码为自行设置的密码

openssl pkcs12 -export -inkey /etc/ocserv/ssl/user/VAY1314.key.pem -in /etc/ocserv/ssl/user/VAY1314.cert.pem -name "VAY1314" -certfile /etc/ocserv/ssl/ca.cert.pem -caname "VAY CA" -out /etc/ocserv/ssl/user/VAY1314.AnyConnect.p12 -passout pass:自定义密码

上步命令输入完毕后,证书就生成完毕。
CA 根证书所在路径为: /etc/ocserv/ssl/ca.cert.pem
.p12 用户证书所在路径为: /etc/ocserv/ssl/user/VAY1314.AnyConnect.p12

在OpenConnect VPN编辑模版 中修改配置信息,找到如下四行

#auth = "certificate"
auth = "|AUTH|"
#ca-cert = /etc/ocserv/ca.pem
#crl = /etc/ocserv/crl.pem
#cert-user-oid = 0.9.2342.19200300.100.1.1

修改为如下(各个参数的功能见注释)

auth = "certificate"                    #启用证书登录
enable-auth = "|AUTH|"                  #证书及账号密码登录并存
ca-cert = /etc/ocserv/ssl/ca.cert.pem   #根证书所在位置
cert-user-oid = 2.5.4.3                 #证书用户登录信息

编辑完成后点击 保存并应用使创建生效,然后在客户端导入 .p12 用户证书,就可使用证书登陆VPN。


客户端

测试最新版客户端不能使用自签证书登陆,因此提供旧版本客户端下载。

下载地址

Windows 10 操作系统
AnyConnect Mobile 4.8.02045

点击下载

Android 客户端
AnyConnect 4.8.03538

点击下载


原创文章,作者:VAY冬冬,如若转载,请注明出处:https://blog.vay1314.top/archives/194

(0)
VAY冬冬的头像VAY冬冬
上一篇 2021年4月3日
下一篇 2021年4月26日

相关推荐

0 0 投票数
文章评分
订阅评论
提醒
guest
1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
DDD

ipv6 的怎么配置