OpenVPN 配置














·需要在 服务器 和 客户端上 都安装 OpenVPN:
apt install -y openvpn
一、使用 静态key加密 创建 VPN 连接:
1、配置 Server:
(1)生成 Openvpn 的密钥:
openvpn --genkey secret static.key# 将它scp 传输给客户端:scp static.key root@47.191.161.23:/etc/openvpn
(2)配置 Server.conf :
vim /etc/openvpn/server.conf
(3)启用 openvpn:



systemctl restart openvpn@serversystemctl enable openvpn@server //配置重启自动启动服务
2、配置 Client:
(1)配置 Client.conf:
vim /etc/openvpn/client.conf
3、客户端上 添加路由:
vim /etc/network/interfaces
·瑕疵版:


会有一个缺陷,重启时,因为 networking 服务会比 openvpn 服务优先启动,而此时 tun0接口并未被创建,这样就会因为 路由添加失败,导致 networking 启动失败。
·完美解决方案(重启不失效):
/etc/network/if-up.d/ 和 /etc/network/if-down.d/ 目录下都有 openvpn 文件(看这个目录名就能够知道有什么作用了)
vim /etc/network/if-up.d/openvpn
·注意:一定要写在中间,添加在中间不会报错,如果添加在最后会报错
·如果需要写删除路由的条目,可以在 /etc/network/if-down.d/openvpn 中添加,但是没有必要,因为 对于 Debian-12.5来说,如果接口消失了,那么其接口对应的静态路由也会消失,且当接口恢复时该静态路由条目不会恢复·只有在 Debian-12.3 之前,当接口消失时,其接口对应的静态路由不会消失,会隐藏起来(使用 route -n 查看不出来),当 接口恢复时,静态路由条目也会恢复
另一种写法(不推荐,这里只是展示 grep + && 结合)
命令解释:先使用 ip a 查看网络接口,然后使用 grep过滤(grep命令很有意思,如果成功过滤到了内容,就会返回 0,如果没有过滤到内容,就会返回非 0,而且不会有报错[不会触发配置文件、服务的报错]),使用 grep 进行过滤,只有过滤到了 tun0 接口,才会返回 0,然后才能执行 &&(&&只有上一条命令返回值为 0,才会被执行),然后 && 再执行 route -n ,列出路由条目,然后再进行 grep 过滤,只有当返回值为 0(成功过滤到内容),才会执行 后面的 route del 进行删除路由条目(因为添加路由条目时,如果添加的路由条目存在,就会报错,并且还会使服务运行失败,因此如果添加时已经有了路由条目,就需要先删除)最后一条:先执行 ip a 命令,再使用 grep 进行过滤,只有当返回值为0(成功过滤到了 tun0),才会执行 route add 添加路由(因为使用 dev tun0 添加路由,必需需要该接口存在才能够进行添加,否则会报错)
4(可选配置)设置Openvpn使用 TCP进行建立连接:
(1)服务端:
(2)客户端:
二、使用CA证书配置 VPN:
1、server(颁发vpn证书):
vim /etc/ssl/openssl.cnf# 书写VPN客户端和服务器的公网IP地址:## 需要手动添加 keyUsage(将extendedKeyUsage取消注释后添加 serverAuth,clientAuth)
keyUsage 只需要取消注释即可
颁发证书:/usr/lib/ssl/misc/CA.pl -newreq-nodes/usr/lib/ssl/misc/CA.pl -sign## 证书字段最好按照server3那样写,虽然题目没说# 生成dh文件:openssl dhparam -out dh2048.pem 2048
2、router(vpn服务器):
(1)配置openvpn:
先将server上的证书拷贝到本地scp root@47.119.161.25:~/new* /etc/openvpnscp root@47.119.161.25:~/ca.crt /etc/openvpn //根证书scp root@47.119.161.25:~/dh2048.pem /etc/openvpn //dh# 使用 openvpn --help 可以查看完整代码:openvpn --genkey secret ta.keycp /usr/share/doc/openvpn/examples/sample-config-files/server.conf .vim server.conf
配置 push路由:

注释cipher是为了下面的图形化连接openvpn(如果不需要图形化连接,可以不注释)
本地信任根证书:scp ca.crt /usr/local/share/ca-certificatesupdate-ca-certificates# 将证书、文件改名为跟server.conf 中同名的文件mv newcert.pem server.crtmv newcert.key server.key# 启动 openvpn@server:systemctl restart openvpn@serversystemctl enable openvpn@server
openvpn服务器最好一直开启和enableopenvpn客户端做完后直接关闭且disable
3、remote(openvpn客户端):
客户端也要信任CA根证书apt install -y openvpnscp root@202.96.128.2:/etc/openvpn/* /etc/openvpnrm /etc/openvpn/server.confcp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .mv server.crt client.crtmv server.key client.keyvim client.conf
注释cipher是为了下面的图形化连接openvpn(如果不需要图形化连接,可以不注释)
systemctl restart openvpn@client# 连接成功后立马关闭VPN,也不要配置enable
4、图形化连接openvpn:
1、remote(先将网卡设置为使用 networkmanager获取的):
apt install -y network-manager //图形化一般是默认安装的echo > /etc/network/interfaces# 清空文件中的内容systemctl restart networking# 然后重启机器
使用图形化获取IP:
默认就是dhcp
·配置图形化连接:
图形化连接需要两端都注释 cipher ,否则无法成功连接
客户端上配置:systemctl disable openvpn@clientsystemctl stop openvpn@clientmv /etc/openvpn/client.conf /etc/openvpn/WSC2024.confapt install -y network-manager-openvpnnmcli connection import type openvpn file /etc/openvpn/WSC2024.conf
因为题目有说VPN适配器是 WSC2024,所以导入时需要将名字更改为WSC2024.conf,这样图形化就会显示为 WSC2024
5、客户端连接VPN时修改客户端DNS服务器地址为内网(图形化):
常规的方法在图形化上不会生效,我们需要直接编辑 VPN适配器
此时客户端查询会报错:
需要在dns服务器上开启递归:
server1、server2:vim /etc/bind/named.conf.options
三、使用easyrsa证书配置 VPN:
·需要的文件:

1、配置 CA,并创建 服务器、客户端 证书(使用另一个软件包),并创建 openvpn 密钥:
如果忘记了命令,可以直接 vim myca/easyrsa 里面有命令的概述:
apt install -y easy-rsa //默认安装的cd /usr/share/easy-rsa./easyrsa init-pki //初始化 CA(使其能够正常使用)./easyrsa build-ca nopass //创建 CA根证书(nopass 为无密码)【生成在 myca/pki/private/ 中】./easyrsa build-server-full server nopass //创建服务器证书【证书在 myca/pki/issued/ ,私钥在 myca/pki/private】./easyrsa build-client-full client nopass //创建客户端证书【存储位置同上】./easyrsa gen-dh //生成 dh参数(只有服务器需要)openvpn --genkey secret ta.key //生成openvpn的密钥(就是静态key所使用的密钥)## 建议直接生成为ta.key,因为 openvpn配置文件默认读取的名称就是这个
openvpn --genkey secret ta.key 这个命令可以使用 openvpn --help 照抄,在末尾就有定义或者照抄 server.conf 模板配置文件中的:"# openvpn --genkey tls-auth ta.key" 也是一样的效果
2、将 所需的证书 scp 给客户端、服务端:
其实将生成的全部都拷给客户端和服务端就行,他们会自己读取
·客户端:
scp 给客户端:scp ta.key root@47.119.161.23:/etc/openvpn //静态Keyscp myca/pki/private/ca.crt root@47.119.161.23:/etc/openvpn //CA根证书scp myca/pki/issued/client.crt root@47.119.161.23:/etc/openvpn //Client证书scp myca/pki/private/client.key root@47.119.161.23:/etc/openvpn //Client私钥
·服务端:
如果 CA不在 Openvpn Server 服务端上,也需要 scp 给服务端,还需要加上 dh.pem:
scp 给服务端scp myca/pki/dh.pem root@202.96.128.2:/etc/openvpn //dh参数scp ta.key root@202.96.128.2:/etc/openvpn //静态Key
scp myca/pki/private/ca.crt root@202.96.128.2:/etc/openvpn //CA根证书
scp myca/pki/issued/server.crt root@202.96.128.2:/etc/openvpn //server 证书
scp myca/pki/private/server.key root@202.96.128.2:/etc/openvpn //server 私钥 # 如果CA在服务端上,就只需要 cp 到 /etc/openvpn 目录即可 cp ta.key /etc/openvpn cp myca/pki/dh.pem /etc/openvpn cp myca/pki/private/ca.crt /etc/openvpn cp myca/pki/issued/server.crt /etc/openvpn cp myca/pki/private/server.key /etc/openvpn
3、配置 server.conf:
信任 CA根证书:cp myca/pki/private/ca.crt /usr/loca/share/ca-certificatesupdate-ca-certificates# 配置 server.conf:cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf //复制模板vim /etc/openvpn/server.conf## 配置文件中没有被注释的都不需要删除
将注释和可选项删除后的简化版:

实践上只修改了 dev tun0,server 192.168.2.0 255.255.255.0。其它的都是默认的
4、配置 client.conf:
信任 CA根证书:cp myca/pki/private/ca.crt /usr/loca/share/ca-certificatesupdate-ca-certificates# 配置 client.conf:cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/client.conf //复制模板vim /etc/openvpn/client.conf## 配置文件中没有被注释的都不需要删除
将注释和可选项删除后的简化版:
实践上只修改了 dev tun0、remote 其它的都是默认的
5、启动 openvpn 服务:
systemctl restart openvpn@server systemctl restart openvpn@clientsystemctl enable openvpn@serversystemctl enable openvpn@client
6、(可选配置)修改 OpenVPN 使用 TCP 进行建立连接:
很简单,将 协议改为 TCP 即可(服务端 客户端 都一样)
四、配置 网段为 /24 (指定的网段)
openvpn 的网段默认只能为 /32位,要想配置为指定的网段,需要在 server上开启:
vim /etc/openvpn/server.conf# 只需要在服务端上配置
五、修改隧道协议为TCP:
1、服务端配置:
vim /etc/openvpn/server.conf
systemctl restart openvpn@server
2、客户端配置:
vim /etc/openvpn/client.conf
六、配置 push dns:
参考技术网址:https://community.openvpn.net/openvpn/wiki/Pushing-DNS-to-clientshttps://github.com/alfredopalhares/openvpn-update-resolv-confhttps://github.com/jonathanio/update-systemd-resolved
1、(可选)服务端配置:
查看日志是有push dns的,但是客户端接收不到,可以不配置,但是就怕评分时要查看服务器是否成功push dns
vim /etc/openvpn/server.conf
2、客户端配置(手动编写脚本):
不建议使用官方提供的默认脚本,因为只能push 隧道的dns,但是无法还原为原来的dns。而且还需要额外下载软件包
(1)先手动编辑两个脚本:
vim 1.sh
注意 #! /bin/bash 一定要有,而且命令需要是绝对路径,否则openvpn无法执行该脚本
vim 2.sh
(2)编辑配置文件,引用脚本:
chmod 777 1.shchmod 777 2.shvim /etc/openvpn/client.conf# 添加在末尾即可:(就是跟网卡配置文件一样的 up、down)
当 tun0 接口启用时,就会执行 1.sh脚本当 tun0 接口关闭时,就会执行 2.sh脚本
script-security 2 表示允许执行用户自定义的脚本(不配置的话将无法执行脚本)也可以额配置 script-security 3(script-security 3 会比 2更加宽松,允许更多的脚本命令)
使用 man openvpn 或 man 8 openvpn 可以查看到示例:
·(不推荐)使用官方的脚本push dns:
在 服务端配置 push dns:vim /etc/openvpn/server.conf
apt install -y resolvconfvim /etc/openvpn/client.conf# 客户端配置文件末尾中添加:script-security 2up /etc/openvpn/update-resolv-confdown /etc/openvpn/update-resolv-conf
官方的脚本只能够push 有时无法将DNS恢复到原本的(准确的来说就是不稳定,因此不使用)