描述

外网客户端与内网数据服务器均加入一个虚拟局域网,并使用该虚拟网赋予的 IP 地址,解决服务器可见性问题

  • IP隧道技术
  • 保留IP地址:10.8.0.0/24

还有通信安全问题,专用网

  • SSL/TLS、IPSec等等

使用OpenVPN来构建VPN

  • OpenVPN 使用 IP 隧道技术构建 VLAN
  • OpenVPN 使用数字证书与 SSL/TLS 技术实现通信安全(基于数字证书的双向认证)
  • 必须构建一个 PKI 系统

环境和相关命令

  • Vultr 服务器 和 Ubuntu 18.04 x64 的操作系统,需要设置 UDP 1194端口 的防火墙规则为accept
  • 使用 PuTTY 进行远程连接
  • 使用 WinSCP 传输文件
  • 源文件全部放在 /usr/local/src 下,配置文件等全部放在 /usr/local/data 下

PuTTY容易断开连接,所以在登录时在Connection处设置keepalive 10s,并勾选下面两个勾

  • wget [url] 命令用来在Linux环境下载文件
  • tar -zxvf [文件名] 解压 .tgz文件和 .tar.gz 文件
  • gzip -d [文件名] 用来解压 .gz 文件
  • ps -ef 用来查看进程(ps -ef | grep openvpn 过滤出openvpn相关进程)
  • kill -s 9 [pid] 用来杀死某个pid的进程
  • cat 查看文件内容
  • nano 查看并修改文件内容

配置流程

  1. 使用EasyRSA构建一个PKI系统
  2. 为openvpn服务器和客户端生成证书
  3. 下载openvpn
  4. 修改server.conf文件作为服务器端配置文件
  5. 修改client.conf文件作为客户端配置文件
  6. 运行并测试

构建PKI系统

下载 EasyRSA 3

选择安装目录,可以是任何目录,本文选定的是/usr/local/src,下载完成后文件夹更名为easyrsa(更名步骤可无视)

cd /usr/local/src

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
tar -zxvf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6 easyrsa

构建一个 PKI 和 CA

cd easyrsa/

./easyrsa init-pki
./easyrsa build-ca

然后按提示设置一个CA密码,这个密码在后面为数字证书签名的时候要用到
然后会看到设置CA的Common Name就完成了,可以看到以下提示

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/local/src/easyrsa/pki/ca.crt

准备公钥和密钥

OpenVPN系统需要准备以下文件(以下服务器指openvpn服务器,客户端指意图通过openvpn通信的机器)

文件名 使用者 说明 保密
ca.crt 所有人 根证书
ca.key 签发私钥的机器 根私钥
dh{n}.pem 服务器 Diffie Hellman parameters
server.crt 服务器 服务器证书
server.key 服务器 服务器私钥
client(s).crt 服务器 客户端证书
client(s).key 服务器 客户端私钥

需要注意的点:

  • 最佳实践是在需要这些文件的机器上生成req文件和key文件,然后将req文件传送到CA,由CA进行签证后将crt证书发回。(考虑到传送通道安全性,生成key和crt后再传送这两个文件这种方式的安全性无法保证)
  • 可以多个客户端共同使用一个证书和私钥,但最好的不同的客户端使用不同的。
  • 为了传输方便,直接在服务器端使用命令 ./easyrsa gen-dh 生成dh.pem文件

如果是在不同的机器(或文件夹)生成证书和私钥,EntityName可以自定义,本例子使用server代表openvpn服务器,forwin 代表一个使用 Windows 10 系统的客户端
中间根据提示设置密码和 Common Name

./easyrsa init-pki
./easyrsa gen-req EntityName

然后将 .req 文件发送到CA所在机器,然后导入到CA系统(如果是直接在CA系统处生成证书,省略此步骤)

./easyrsa import-req /tmp/path/to/import.req EntityName

然后为 server 签订服务器证书为 forwin 签订客户端证书
中间根据提示输入“yes”和 CA 的密码

./easyrsa sign-req server server
./easyrsa sign-req client forwin

成功后可以看到以下提示

The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Apr 26 03:11:56 2022 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /usr/local/src/easyrsa/pki/issued/server.crt

然后将 .crt 文件发给对应机器待用就好了

配置OpenVPN

安装

官网对应操作系统下载和安装
Ubuntu直接使用以下命令安装和查看版本,Windows系统下载exe文件然后安装

apt install openvpn
openvpn --version

在/usr/local/data夹下创建一个openvpn文件夹存放相关证书和配置文件,将证书文件传送过来,将示例server.conf和client.conf文件复制过来。(或者在这里下载)

cd /usr/local/data
mkdir openvpn
cd openvpn

cp /usr/local/src/easyrsa/pki/ca.crt ./
cp /usr/local/src/easyrsa/pki/issued/server.crt ./
cp /usr/local/src/easyrsa/pki/private/server.key ./
cp /usr/local/src/easyrsa/pki/dh.pem ./dh2048.pem
openvpn --genkey --secret ta.key

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz ./
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./
gzip -d server.conf.gz
openvpn server.conf

此时已经在服务器开启了openvpn服务
openvpn服务开启

使用 WinSCP 之类软件在客户端凑齐以下文件

  • ca.crt
  • forwin.crt
  • forwin.key
  • ta.key
  • client.conf

然后修改 client.conf 并将其更名为 client.ovpn,修改部分参数,内容如下(仅作参考,路径自行设置,记得做双反斜杠和双引号处理),0.0.0.0 处改为你的服务器公网IP

remote 0.0.0.0 1194
ca "C:\\Users\\only-\\Documents\\ca.crt"
cert "C:\\Users\\only-\\Documents\\forwin.crt"
key "C:\\Users\\only-\\Documents\\forwin.key"
tls-auth "C:\\Users\\only-\\Documents\\ta.key" 1

打开 OpenVPN GUI 右键导入配置文件client.opvn
客户端成功连接

ping 一下试试看
客户端ping通服务器
服务器ping通客户端

问题

我遇到了客户端成功“Initialization Sequence Completed”的信息但是ping不通,然后在服务器加了下面这个命令,同时本机电脑也应注意防火墙问题

iptables -A INPUT -p udp --dport 1194 -j ACCEPT
相关文章
评论
分享
  • STP生成树协议

    技术背景 二层链路没有冗余——网络存在单点 / 单线路故障 网络的冗余性增强——出现二层环路 环路带来的问题:广播风暴;多帧复制;MAC表紊乱 简介 生成树协议 (STP) 是在网桥和交换机上运行的第二层协议。 STP 的规范是 I...

    STP生成树协议
  • VLAN

    技术背景 交换机的所有接口属于一个广播域,往往也是一个逻辑子网; 用户无法根据业务需要灵活的在交换机上进行广播域的隔离; 随着网络规模越来越大、数量越来越多,广播风暴将给网络带来重大问题; VLAN(Virtual LAN)技术提供了...

    VLAN
  • 二层交换基础

    园区网中的二层交换 二层交换机的主要功能 终端设备的接入 学习MAC地址,并维护MAC地址表 以太网数据帧的交换,根据目的MAC地址转发数据帧 防止二层环路 MAC地址的概念 MAC地址有48位,通常被表示为点分十六进制数; MAC...

    二层交换基础
  • OSPF

    简介Open Shortest Path First 开放式最短路径优先协议,是用于分配单个自控系统中的路由信息的内部网关协议。 CISCO中文文档 CISCO英文文档 链路状态OSPF 是一种链路状态协议。我们可以将链路视为路由器的...

    OSPF
  • EIGRP

    简介Enhanced Interior Gateway Routing Protocol 增强型内部网关协议是是增强的距离矢量协议,它依靠扩散更新算法 (DUAL) 计算网络中到目标的最短路径。 CISCO中文文档 CISCO英文文...

    EIGRP
  • IP路由基础

    路由的概念路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。 路由表在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一...

    IP路由基础