Ubuntu 搭建OpenVPN服务器

打印 上一主题 下一主题

主题 519|帖子 519|积分 1557

一、先容

VPN直译译就是假造专用通道,是提供给企业之间或者个人与公司之间安全传输的隧道,OpenVPN无疑是Linux下开源VPN的先锋,提供了精良的性能和友爱的用户GUI。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函数库。
OpenVPN通过使用公开密钥(非对称密钥,加密解密使用不同的Key,一个称为Publice Key,另外一个是Private Key)对数据举行加密的。这种方式称为TLS加密
OpenVPN使用TLS加密的工作过程是,起首VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN毗连。
然后使用对方的CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private Key才能解密该数据,如许就保证了此密钥的安全性,而且此密钥是定期改变的,对于窃听者来说,可能还没有破解出此密钥,VPN通信双方可能就已经更换密钥了。
二、条件

1.一台Ubuntu服务器用来搭建OpenVPN服务
2.一台本地计算机用来安装OpenVPN客户端
3.确保两台计算性能够互相ping通
三、搭建过程

1.安装 OpenVPN 和 Easy-RSA

第一步是安装 OpenVPN 和 Easy-RSA。 Easy-RSA 是一种公钥基础办法 (PKI) 管理工具,用于在OpenVPN 服务器上生成证书哀求。然后在 CA 服务器上验证和署名。在这里我们的 OpenVPN 服务器和CA服务器为同一个 Ubuntu 服务器
起首,更新 OpenVPN 服务器的包索引并安装 OpenVPN 和 Easy-RSA。 这两个包都在 Ubuntu 的默认存储库中可用,可以使用 apt 举行安装:
  1. sudo apt update
  2. sudo apt install openvpn easy-rsa
复制代码

openvpn安装完毕后,我们来查察openvpn的版本:
  1. openvpn --version
复制代码
安装完 easy-rsa 之后我们就可以开始创建 OpenVPN 服务所必要的秘钥了。
2.制作相关证书

OpenVPN 的证书分为三部分:CA证书、Server端证书、Client端证书。下面我们通过easy-rsa分别对其举行制作。
2.1制作CA证书

进入 /usr/share/easy-rsa 目次
起首将 vars.example 拷贝一份出来

然后编辑 vars 文件
修改下面部分的内容



在末了一行添加 KEY_NAME,可以是任何你喜欢的名字,但是请记住,背面制作服务端证书时会用到

对于不同版本的easy-rsa,使用方法可能不一样,具体可以参考安装文档的描述
  1. cat /usr/share/doc/easy-rsa/README.Debian
复制代码

然后使用以下下令:
  1. sudo ./easyrsa init-pki
复制代码

会发现多了个pki目次出来
然后再执行第二条下令

查察pki目次会发现有一个 ca.crt,这就是CA端证书,ca.crt 包罗 CA 的公钥,用于验证服务器和客户端证书的有效性。客户端会使用此证书来验证服务器的身份。

至此CA端证书制作好了
2.2制作服务端证书

然后用以下下令制作Server端证书(注意改下令中的server要换成前面vars文件中设置的KEY_NAME):
  1. sudo ./easyrsa build-server-full server nopass
复制代码

修改pki目次权限并进入

查察服务器的证书和私钥:
  1. sudo ls issued
  2. sudo ls private
复制代码

至此服务端的证书制作完毕
2.3制作客户端证书

Server端证书制作完成后,开始制作Client端证书,步骤和制作服务端证书类似,注意下令中的client,是客户端的名称,可以换成任意你喜欢的,不要和服务端证书一样就行
  1. sudo ./easyrsa build-client-full client nopass
复制代码
先制作一个用于给我windows电脑用的

再次查察 pki/issued/ 和 pki/private/ ,会发现多了windows11的证书和私钥出来

至此客户端的证书制作完毕
2.4创建迪菲·赫尔曼密钥

使用以下下令创建,会生成dh.pem文件
  1. sudo ./easyrsa gen-dh
复制代码
 

3.设置服务器端设置文件

3.1拷贝相关文件

起首复制一份服务器端设置文件模板 server.conf/etc/openvpn/
  1. sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
  2. cd /etc/openvpn/
  3. sudo gzip -d server.conf.gz
复制代码

然后把刚刚创建好的CA证书、dh.pem、服务端证书/私钥、客户端证书/私钥复制过来,CA证书和dh.pem放在/etc/openvpn目次下,服务端证书/私钥放在server目次下,客户端证书/私钥放在client目次下。

3.2编辑server.conf

  1. sudo vim server.conf
复制代码
设置文件具体说明可以参考这篇:
OpenVPN server端设置文件具体说明-腾讯云开辟者社区-腾讯云
我重要做了如下修改:
端口号依然使用1194,传输协议用tcp,注释掉原本的udp

修改证书和dh密钥路径

修改VPN的IP地点段,也可以不修改,我没做修改

打开下面选项,让VPN 重定向客户端所有流量

修改下面选项可以使客户端在毗连OpenVPN时DNS服务器按照以下设置

开启后多个客户端可以同时使用一个证书和私钥

关闭TLS认证

启用 LZO 压缩算法,以减小通过OpenVPN通道传输的数据量,从而提高性能

在之前的日志内容后举行追加

关闭“服务器重启,客户端主动重新毗连”

至此服务端设置文件修改完成。
4.运行OpenVPN Server

使用以下下令运行并查察OpenVPN Server
  1. sudo systemctl start openvpn@server
  2. sudo systemctl status openvpn@server
复制代码

使用以下下令查察日志
  1. sudo tail -f /var/log/openvpn/openvpn.log
复制代码

5.设置防火墙

开启1194和SSH端口并重启ufw防火墙
  1. sudo ufw allow 1194
  2. sudo ufw allow OpenSSH
  3. sudo ufw disable
  4. sudo ufw enable
复制代码
6.Windows客户端设置

在openvpn官网下载客户端:OpenVPN Connect - Client Software For Windows | OpenVPN
下载好以后点击运行,然后在右下角状态栏里找到OpenVPN的图标,右键点击,选中选项,在高级里面修改设置文件文件夹路径为 C:\Program Files\OpenVPN\config
然后先在Ubuntu服务器上用chown下令将ca.crt, windows11.crt, windows11.key 的所有者权限改成自己
  1. sudo chown wt ca.crt client/windows11{.crt,.key}
复制代码
由于我在本地电脑上没有安装ssh服务端,所以无法直接在Ubuntu服务器上使用scp将这三个文件传输到本地电脑,所以在本地电脑执行以下下令将这三个文件远程传输到C:\Program Files\OpenVPN\config,该目次为openvpn客户端的设置文件地点目次
  1. scp -r wt@114.212.122.48:/etc/openvpn/{ca.crt,client/windows11{.crt,.key}} ./
复制代码

然后在客户端呆板上打开C:\Program Files\OpenVPN\config文件夹,新建一个windows11.ovpn文件,在里面添加如下内容
  1. client
  2. dev tun
  3. proto tcp
  4. remote 114.212.122.48 1194
  5. resolv-retry infinite
  6. nobind
  7. persist-key
  8. persist-tun
  9. ca ca.crt
  10. cert windows11.crt
  11. key windows11.key
  12. comp-lzo
  13. verb 3
复制代码
保存后关闭
然后毗连VPN,显示乐成

ping OpenVPN服务器的IP,可以ping通

7.调整 OpenVPN 服务器网络设置

此时已经能够使用OpenVPN的根本功能,但是由于之前我们设置过让VPN重定向客户端的所有流量,导致无法正常访问外部网络

此时有几种办理办法
7.1.修改服务端的设置

关掉server.conf 里VPN重定向客户端全部流量的设置

7.2.修改客户端设置

在客户端windows11.ovpn设置文件中,增加下面的内容,第一行表示取消从VPN服务器拉取路由,第二行表示手动指定访问10.8.0.*这个网段的IP才会走VPN
  1. route-nopull #don't pull routes from the server
  2. route 10.8.0.0 255.255.255.0 #direct all 192.168.0.* subnet traffic through the VPN
复制代码
7.3设置路由转发和防火墙

7.3.1设置路由转发

要调整 OpenVPN 服务器的默认 转发设置,直接在终端输入下令或者修改/etc/sysctl.conf 文件
方式一:
  1. sudo sysctl -w net.ipv4.ip_forward=1
复制代码

or
方式二:
sudo vim /etc/sysctl.conf,然后在末端添加以下行
  1. net.ipv4.ip_forward = 1
复制代码
修改完后保存并关闭文件,然后输入以下下令为当前会话加载新值
  1. sudo sysctl -p
复制代码

7.3.2修改防火墙设置
先输入以下下令查察服务器的公网接口
  1. ip route list default
复制代码
公网接口是输出中dev背面的字符串,在我的呆板里为 eno1

有了默认路由关联的接口后,我们打开 /etc/ufw/before.rules 文件添加相关设置:
  1. sudo vim /etc/ufw/before.rules
复制代码
  1. #
  2. # rules.before
  3. #
  4. # Rules that should be run before the ufw command line added rules. Custom
  5. # rules should be added to one of these chains:
  6. #   ufw-before-input
  7. #   ufw-before-output
  8. #   ufw-before-forward
  9. #
  10. # START OPENVPN RULES
  11. # NAT table rules
  12. *nat
  13. :POSTROUTING ACCEPT [0:0]
  14. # Allow traffic from OpenVPN client to eno1 (change to the interface you discovered!)
  15. -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE
  16. COMMIT
  17. # END OPENVPN RULES
  18. # Don't delete these required lines, otherwise there will be errors
  19. *filter
  20. . . .
复制代码
然后必要告诉 UFW 默认情况下也允许转发数据包, 打开并修改 /etc/default/ufw 文件:
  1. sudo vim /etc/default/ufw
复制代码
找到 DEFAULT_FORWARD_POLICY 指令并将值从 DROP 更改为 ACCEPT

重启防火墙
然后重启服务器上的OpenVPN服务
  1. sudo ufw disable
  2. sudo ufw enable
  3. sudo systemctl restart openvpn@server
复制代码
此时客户端重新毗连VPN,会发现可以正常上网了 

跳转DNS leak test测试,发现IP已经酿成OpenVPN服务器的IP

8.手机端设置

由于之前开启了“一份证书可以多个客户端使用”,所以手机端上可以也用刚刚制作好的windows11证书和密钥,或者重新制作一份,制作过程和之前的一样,然后使用scp先传输到本地电脑举行编辑

在本地电脑新建一个iphone.ovpn文件,内容和之前的windows11.ovpn大体一致,但是由于手机端只能上传.ovpn格式的文件,必要将ca.crt、iphone.crt、iphone.key这几个文件打包进iphone.ovpn
  1. client
  2. dev tun
  3. proto tcp
  4. remote 114.212.122.48 1194
  5. resolv-retry infinite
  6. nobind
  7. persist-key
  8. persist-tun
  9. ## 删除下面注释掉的内容
  10. # ca ca.crt
  11. # cert windows11.crt
  12. # key windows11.key
  13. comp-lzo
  14. verb 3
  15. ## 增加下面的内容
  16. <ca>
  17. ...  # 把ca.crt里的内容复制过来
  18. </ca>
  19. <cert>
  20. ...  # 把iphone.crt里的内容复制过来
  21. </cert>
  22. <key>
  23. ...  # 把iphone.key里的内容复制过来
  24. </key>
复制代码
然后将修改好的iphone.ovpn文件用邮箱发送得手机上,然后选择其他应用 → OpenVPN 打开(苹果的OpenVPN必要在美区苹果商店下载,国区没有,安卓的请同学们自行百度)

然后跳转到OpenVPN APP,点击Add→Connect,显示以下界面即为毗连乐成

搜索what is my ip查抄,发现IP也酿成了服务器IP,且可以正常上网

9.卸载OpenVPN

(以下内容来自ChatGPT)
在Ubuntu上卸载OpenVPN服务器可以通过以下步骤举行。请注意,这将删除OpenVPN服务器及其相关组件,确保您不再必要它们。
9.1.停止OpenVPN服务:

打开终端,然后停止OpenVPN服务。可以使用以下下令:
  1. sudo systemctl stop openvpn@<server-config-file>
复制代码
<server-config-file> 是您实际使用的OpenVPN服务器设置文件的名称。
9.2.卸载OpenVPN软件包:

使用以下下令卸载OpenVPN软件包:
  1. sudo apt-get remove openvpn
复制代码
假如您还安装了easy-rsa(用于生成证书和密钥的工具),也可以卸载它:
  1. sudo apt-get remove easy-rsa
复制代码

9.3.删除设置文件和相关文件:

删除OpenVPN服务器的设置文件和其他相关文件。这包罗您自定义的设置文件和证书文件。请小心,确保您不再必要这些文件。
9.4.清理设置目次:

假如您使用的是默认的OpenVPN设置目次,可以执行以下下令来清理相关文件:
  1. sudo rm -r /etc/openvpn
复制代码
9.5.清理Easy-RSA目次(假如安装了):

假如您安装了easy-rsa,清理相关的目次:
  1. sudo rm -r /usr/share/easy-rsa/
复制代码
9.6.重新加载系统服务:

在举行更改后,重新加载系统服务:
  1. sudo systemctl daemon-reload
复制代码
9.7.清理残留的依靠项:

为了确保删除了所有与OpenVPN相关的依靠项,您可以运行:
  1. sudo apt-get autoremove
复制代码
这将主动删除不再必要的依靠项。
请注意,在执行这些步骤之前,请确保您不再必要OpenVPN服务器,而且您备份了任何重要数据或设置文件。
10.参考

怎样在Ubuntu22.04上设置和设置OpenVPN服务器 - 菜鸟教程
怎样在Ubuntu 系统中搭建 OpenVPN 服务 | 五点半
ubuntu部署VPN中openvpn(上)-腾讯云开辟者社区-腾讯云 (tencent.com)
ubuntu 22.04搭建OpenVPN服务器_ubuntu vpn-CSDN博客
烂泥:ubuntu 14.04搭建OpenVPN服务器-烂泥行天下 (ilanni.com)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表