项目说明:本篇文章介绍利用PiVPN快速搭建OpenVPN和WireGuardVPN实现移动办公,或者分支互联。

一、项目准备

1.1、VMware ESXi

我家里的是一台8核心,20G内存,2T的N5105工控机,我选的ESXi镜像是:VMware vSphere Hypervisor (ESXi) 8.0U2

VMware ESXi
  1. VMware vSphere Hypervisor (ESXi) 8.0U2: ESXi 是 VMware 的虚拟化操作系统,用于在物理服务器上运行虚拟机。它是构建 VMware 虚拟化平台的关键组件。

  2. VMware vCenter Server 8.0U2a: vCenter Server 是用于集中管理和监控虚拟化基础设施的中心化管理平台。它可以帮助您管理多个 ESXi 主机和虚拟机。

  3. VMware vSphere Replication 8.8.0.2: vSphere Replication 是一种灾难恢复解决方案,可实现虚拟机级别的复制和备份。

  4. VMware Aria Automation Orchestrator 8.14.1: Automation Orchestrator 是用于自动化 IT 运维工作流程的工具,使您能够创建、管理和执行自动化任务。

  5. VMware NSX 4.1.2.1 For vShield Endpoint: NSX 是软件定义网络(SDN)平台,为虚拟化环境提供网络虚拟化和安全性功能。

  6. VMware Tools 12.3.5: VMware Tools 是安装在虚拟机中的增强工具,提供了增强的性能、协作和管理功能。

    yydy_2023-12-26_18-09-02

1.2、Ubuntu镜像

Ubuntu 22.04.3 ISO
  1. arm64: 这是针对 64 位 ARM 架构的镜像。ARM 是一种流行的处理器架构,在许多嵌入式设备、移动设备和单板计算机中使用,例如 Raspberry Pi 和某些 Android 设备。
  2. ppc64el: 这是 PowerPC 64 位架构(ppc64le)的镜像。PowerPC 架构曾用于苹果 Macintosh 计算机和某些服务器,ppc64el 则是用于支持低端序(little-endian)的 64 位 PowerPC 架构。
  3. s390x: 这是针对 IBM 的 System z 架构的镜像。System z 是用于大型企业的主机和服务器架构,s390x 是其 64 位版本。

yydy_2023-12-26_18-03-38

1.3、Debian镜像

Debian 12.4.0 ISO
  1. Cinnamon: 这是一种由 Linux Mint 开发的桌面环境,基于 GNOME 3,提供直观的用户界面和现代化的体验。
  2. GNOME: 这是一个流行的桌面环境,具有现代化、简洁和用户友好的界面,适合寻求简单和美观的用户。
  3. KDE: 这是一个称为 KDE Plasma 的桌面环境,提供高度可定制性和功能丰富的体验。它通常被认为是功能强大且外观漂亮的桌面环境。
  4. LXDE: 这是一个轻量级的桌面环境,注重性能和资源使用效率,适合旧设备或对系统资源要求较低的用户。
  5. MATE: 这是一个由 GNOME 2 衍生出来的桌面环境,保留了传统的桌面设计风格,并提供了一些现代特性。
  6. Standard: 这通常是指基本的 Debian 安装,没有特定的桌面环境,默认使用基本的命令行终端。
  7. Xfce: 这是一个轻量级但功能齐全的桌面环境,注重性能和资源利用率,同时提供良好的用户体验。

yydy_2023-12-26_17-57-33

1.4、PiVPN官网

PiVPN官网

1.5、OpenVPN官网

OpenVPN Client

Snipaste_2023-12-08_15-53-33

1.6、WireGuard官网

WireGuard ALL Client

yydy_2023-12-26_18-30-11

1.7、SSH工具

MobaXterm

1.7.1、MobaXterm激活

MobaXterm 常规设置指南

二、部署Ubuntu

Ubuntu系统在VMware ESXi中安装设置请参考 Ubuntu搭建OpenVPN配置分流规则指南!第二步)

三、安装PiVPN+OpenVPN

说明:根据官方介绍,只需要下面一行代码即可,但是我部署完发现官方代码在同一台Linux上,一次只能部署OpenVPN或者WireGuard,所以接下来的操作步骤我是在同一台Linux上先部署OpenVPN,然后在部署WirdGuard,实现同一台Linux部署俩个VPN服务且互不影响。默认你的Ubuntu或者Debian都已经更新好了所有的软件包。

3.1、PiVPN之OpenVPN

创建pivpn文件夹,进入文件夹

mkdir pivpn && cd pivpn

执行安装pivpn命令

curl -L https://install.pivpn.io | bash

yydy_2023-12-26_18-47-11

告知会把服务器装成OpenVPN或者WireGuard,回车:OK

yydy_2023-12-26_18-50-19

告知作为OpenVPN或者WireGuard服务器需要有IP地址上网,回车:OK

yydy_2023-12-26_18-51-40

告知是否强制客户端IPV6流量都走VPN,提醒虽然我当前这台内网服务器没有IPV6地址,但是还是建议选择yes,可以防止ipv6泄漏,保护数据安全,回车:yes

yydy_2023-12-26_18-53-21

告知我们的系统因为不是树莓派(确实我的是x86系统),所以程序这一步不会为我设置静态IP或者让我DHCP获取IP,回车:OK

yydy_2023-12-26_18-58-49

告知让我们选一个保存OVPN配置的本地用户,回车:OK

yydy_2023-12-26_19-00-03

告知没有找到除root以外的账户,所以要我们建一个,参考截图,新建用户自定义即可,然后回车:OK

yydy_2023-12-26_19-01-48

告知输入这个openvpn用户的密码,然后回车:OK

yydy_2023-12-26_19-03-25

选择openvpn这个用户,回车:OK

yydy_2023-12-26_19-04-44

选择OpenVPN部署,回车:OK

yydy_2023-12-26_19-06-07

告知是否使用默认的OpenVPN设定的端口以及TLS加密方式,和默认域名后缀功能,如果要改则选Yes,不改则选No,回车:No

yydy_2023-12-26_19-09-54

告知是否要修改OpenVPN默认的端口号1194,保持默认回车:OK

yydy_2023-12-26_19-15-41

再次询问端口是否正确,回车:Yes

yydy_2023-12-26_19-17-44

询问需要给客户端设置什么DNS来解析域名,默认给了一些海外的DNS。如果你的内网有DNS服务器选择最后一个自定义,如果你的服务器在海外你搭建这个VPN用于科学上网,那就选Google的DNS,如果没有科学上网场景,同样建议自定义写国内的DNS,这样访问国内网站不至于很慢,比如阿里云DNS:223.5.5.5和223.6.6.6,我有内网绿色DNS,所以我写内网的DNS,然后回车:OK

yydy_2023-12-26_19-23-05
yydy_2023-12-26_19-24-10

再次询问DNS是否正确,回车:Yes

yydy_2023-12-26_19-24-51

告知需要用什么方式连接OpenVPN,第一种是用映射后的公网IP加端口进行连接,第二种是用解析好的域名加端口进行连接,如果你的服务器是VPS有公网IP这里会显示公网IP,如果服务器在内网需要做端口映射,另外如果你的域名已经解析到了你的公网IP上,那这里就选第二种DNS Entry,我的已经解析好了,所以选第二个用域名加端口连接OpenVPN,这里你根据自己的实际情况选择,然后回车:OK

yydy_2023-12-26_19-29-20

输入我解析好的域名,回车:OK

yydy_2023-12-26_19-30-13

再次确认域名是否正确,回车:Yes

yydy_2023-12-26_19-30-48

告知生成服务器密钥和HMAC,回车:OK

yydy_2023-12-26_19-33-12

告知服务器会对公网暴露1194端口,所以服务器要设定组件的一些更新以及建议我们要不定时重启系统,防止漏洞被利用,回车:OK

yydy_2023-12-26_19-35-44

再次确认是否要启动无人管理模式,系统将自动更新组件软件包避免漏洞被利用,回车:Yes

yydy_2023-12-26_19-37-18

告知OpenVPN服务器安装完成,运行:pivpn add来添加客户端配置,回车:OK

yydy_2023-12-26_19-38-20

告知安装好之后建议重启一次服务器,建议重启,选择回车:Yes

yydy_2023-12-26_19-39-38

再次提醒服务器将重启,回车:OK

yydy_2023-12-26_19-39-55

3.2、OpenVPN服务端配置优化

默认客户端网卡下发的IP是PiVPN自定义的,可以通过ip addr查看tun0网卡,也就是OpenVPN网卡的IP地址

ip addr

yydy_2023-12-26_19-52-28

进入openvpn服务端配置文件把server注释掉,换成下面的100段避免10段和内网有冲突,这个server的配置是给客户端网卡用的,可以自定义

nano /etc/openvpn/server.conf
server 100.255.255.0 255.255.255.0

yydy_2023-12-26_19-49-16

重启服务

systemctl restart openvpn@server.service

查看tun0网卡是否变化

ip addr

yydy_2023-12-26_19-54-14

查看服务状态

yydy_2023-12-26_20-47-28

3.3、创建客户端配置文件

后续如果安装完WireGuard后还想创建OpenVPN用户,运行这个命令:pivpn ovpn -a -n client-name

pivpn add

yydy_2023-12-26_19-58-32

3.4、修改配置文件

nano /home/openvpn/ovpns/pi-ovpn.ovpn

yydy_2023-12-26_20-02-42

3.5、MobaXterm左侧下载

Image 1 Image 2

3.6、OpenVPN连接测试

Image 1 Image 2

四、安装PiVPN+WireGuard

4.1、PiVPN之WireGuard

新建一个wireguard用户

sudo adduser wireguard

yydy_2023-12-27_15-36-55

4.2、重新运行PiVPN

curl -L https://install.pivpn.io | bash

告知我们在/etc/pivpn/openvpn/setupVars.conf已经存在安装信息,第一行让我们更新OpenVPN,第二行让我们沿用/etc/pivpn/openvpn/setupVars.conf配置重新配置OpenVPN,第三行让我们重新配置PiVPN,我们选择:Reconfigure,回车:OK

yydy_2023-12-28_16-44-54

下面的操作步骤和上面安装OpenVPN选择步骤相同,不同之处我在做说明

yydy_2023-12-28_16-51-06
yydy_2023-12-28_16-52-26
yydy_2023-12-28_16-53-44
yydy_2023-12-28_16-54-39
yydy_2023-12-28_16-54-52

这里用户选我们刚刚创建的wireguard,回车:OK

yydy_2023-12-28_16-55-46

这里选择安装WireGuard,回车:OK

yydy_2023-12-28_16-58-43

让我们设置WireGuard的端口(可以不改),回车:OK

yydy_2023-12-28_17-01-06

确认端口是否正确,回车:OK

yydy_2023-12-28_17-13-52

设置用户端DNS(这一步说明参考OpenVPN,原理和用处一样的),回车:OK

yydy_2023-12-28_17-15-12
yydy_2023-12-28_17-16-04
yydy_2023-12-28_17-17-07
yydy_2023-12-28_17-17-42
yydy_2023-12-28_17-18-08
yydy_2023-12-28_17-18-23
yydy_2023-12-28_17-19-03
yydy_2023-12-28_17-19-14
yydy_2023-12-28_17-19-21
yydy_2023-12-28_17-19-29
yydy_2023-12-28_17-19-38
yydy_2023-12-28_17-19-45

4.3、重启进入

查看网卡发现多了一张wg0网卡,但是也是10网段的,同样我们改一下不用10。

ip addr

yydy_2023-12-28_17-21-52

4.4、修改wg0网卡ip

nano /etc/wireguard/wg0.conf

yydy_2023-12-28_17-25-56

4.5、重启服务

systemctl restart wg-quick@wg0.service

4.6、查看服务

systemctl status wg-quick@wg0.service

yydy_2023-12-28_17-28-03

4.7、查看wg0网卡IP

ip addr

yydy_2023-12-28_17-28-22

4.8、创建WireGuard客户端

还想创建OpenVPN用户,运行这个命令:pivpn ovpn -a -n client-name

pivpn wg -a -n wg0-client

yydy_2023-12-28_17-33-22

4.9、查看客户端配置

cat /home/wireguard/configs/wg0-client.conf

yydy_2023-12-28_17-34-51

4.10、MobaXterm左侧下载

yydy_2023-12-28_17-35-37

4.11、测试连接

WireGuard可以正常连接,访问测试路由以全部走到VPN

yydy_2023-12-28_17-38-37
yydy_2023-12-28_17-38-19

五、开启上网

5.1、开启路由转发

  1. 临时开启路由转发:
    这会立即在系统中启用路由转发,但重启后会失效。

    sudo sysctl -w net.ipv4.ip_forward=1
    
  2. 永久开启路由转发:
    这会使系统在每次启动时都启用路由转发。

    • 编辑 /etc/sysctl.conf 文件:
      sudo nano /etc/sysctl.conf
      
    • 在文件中找到并取消注释以下行(如果不存在,则添加):
      net.ipv4.ip_forward=1
      
    • 保存并关闭文件,然后重新加载配置:
      sudo sysctl -p
      

5.2、配置iptables

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 100.255.255.0/24 -j MASQUERADE
iptables -I INPUT -p udp --dport 51820 -m comment --comment "wireguard" -j ACCEPT
iptables -t nat -A POSTROUTING -s 100.255.254.0/24 -j MASQUERADE

5.3、安装iptables-persistent

sudo apt-get install -y iptables-persistent
sudo service netfilter-persistent save

5.4、关闭防火墙

ufw disable

5.5、重启WireGuard

systemctl restart wg-quick@wg0.service

5.6、重启OpenVPN

systemctl restart openvpn@server.service

5.7、客户端测试

WireGuard测试

yydy_2023-12-28_17-48-50
yydy_2023-12-28_17-57-50

OpenVPN测试

yydy_2023-12-28_17-55-19
yydy_2023-12-28_17-56-34