一看就懂的保姆级教程:open vn设置 (亲测通过)

这篇具有很好参考价值的文章主要介绍了一看就懂的保姆级教程:open vn设置 (亲测通过)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenVPN是一款优秀用于创建虚拟私人网络的软件,但是由于其涉及了服务器证书、TLS密钥、防火墙等一堆衍生概念,因此设置显得比较复杂。本文化繁为简,仅以 “能连通” 这个最低要求,完整地展示了一遍OpenVPN的安装调试过程。万事开头难,在实现了连通的基础上再来探索更多的功能是一种比较好的学习路径。


一、概述

在安装openvpn的时候之前,大概说下它的结构,整个安装流程涉及以下4个部分:

  1. Server / Client 服务器端程序

  2. Easyrsa 证书生成程序

  3. Server端配置文件

  4. Client 端配置文件

openvn,运维,Centos,服务器,linux,运维

观察上图,其实OpenVPN的服务器端和客户端是合二为一的,并没有采用独立的服务器端程序或者客户端程序来区分其角色,它是通过配置文件来实现功能差异的。因此无论服务器端还是客户端,启动程序都相同,Linux下为openvpn,在windows下则为openvpn.exe。

Easyrsa是一个证书生成器,它是一个独立程序,它可以为OpenVPN生成各种所需要的证书和密钥,所谓的证书就是一种绑定了额外信息的公钥,密钥则可以理解为私钥。这里不做深入解释,有兴趣的同学可以搜索一下非对称加密的相关知识。注意:其中一个tls密钥 ta.key 并非由Easyrsa 而是由OpenVPN主程序生成的。

至于Server 服务器端配置文件以及 Client 客户端配置文件,则由我们手动用记事本输入生成。


二、 前置操作及程序安装
  1. 目录创建

    与其他软件安装不同,OpenVPN的安装过程中将要产生许多临时文件,因此我们最好专门创建一个目录来存放他们:

    mkdir -p ~/ovpn
    mkdir -p ~/ovpn/keys
    

  1. 软件安装

    一般来说,我们的OpenVPN服务器安装在Linux上,而客户端则五花八门,可能是Windows PC或者iOS、安卓等系统。现在先说服务器端安装,以Centos为例:

    安装OpenVPN:

    dnf -y install openvpn

    安装Easyrsa:

    cd ~/ovpn
    wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.1.7/EasyRSA-3.1.7.tgz
    tar xvf EasyRSA-3.1.7.tgz
    mv EasyRSA-3.1.7 easyrsa
    cd easyrsa
    

    客户端方面,OpenVPN官网有两个版本,可以理解为完整版和精简版,完整版下载地址:
    https://openvpn.net/community-downloads/
    以上链接包含了所有OpenVPN功能,其中包含了Server和Client。

    此外,官网还有一个称为 OpenVPN Connect 的软件,它是一个精简版本,只能实现Client (客户端)功能,下载地址是:
    https://openvpn.net/vpn-client/

    最后,还有一个类似精简版的第三方程序叫做Pritunl,下载地址是:

    https://github.com/pritunl/pritunl-client-electron/releases

    PS: 本文以官网完整版for windows 64bit为例。


三、证书生成
  1. 根证书生成:

    cd ~/ovpn/easyrsa
    ./easyrsa init-pki [初始化,程序将自动创建pki目录]
    

    现在,编辑easyrsa的配置文件 vars:

    nano pki/vars

    将整个文件清空,只留下两行,并存盘退出:

    set_var EASYRSA_ALGO "ec"
    set_var EASYRSA_DIGEST "sha512"
    

    输入以下命令,生成根证书:

    ./easyrsa build-ca

    牢记PEM pass phrase,这个就是根证书密码,后面好几个步骤需要用到它
    出现 “Common Name” 的时候直接敲回车默认即可。


  2. 服务器证书生成:

    ./easyrsa gen-req server nopass

    Common Name直接回车使用默认名称:server

    签署服务器证书:

    ./easyrsa sign-req server server

    出现 “Type the word ‘yes’ to continue” 的时候输入: yes
    然后输入刚才在上一步设置的根证书密码。


  3. 客户端证书生成:

    ./easyrsa gen-req client1 nopass

    Common Name直接回车使用默认名称:client1

    ./easyrsa sign-req client client1

    类似的,先输入 yes,然后输入根证书密码


  4. tls密钥生成:

    openvpn --genkey secret ta.key

    这个密钥由openvpn主程序生成,起作用是用密钥取代密码输入


至此,我们就完成了全部所需证书文件的生成,下面将这些零散的文件集中聚合到 keys 目录中去:

cp ~/ovpn/easyrsa/pki/ca.crt ~/ovpn/keys
cp ~/ovpn/easyrsa/ta.key ~/ovpn/keys
cp ~/ovpn/easyrsa/pki/private/server.key ~/ovpn/keys
cp ~/ovpn/easyrsa/pki/issued/server.crt ~/ovpn/keys
cp ~/ovpn/easyrsa/pki/private/client1.key ~/ovpn/keys
cp ~/ovpn/easyrsa/pki/issued/client1.crt ~/ovpn/keys

四、编辑Server和Client端配置文件
  1. 编辑Server端配置文件:

    nano ~/ovpn/keys/server.conf

port 8080
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh none
tls-crypt ta.key

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"

cipher AES-256-GCM
auth SHA256

keepalive 10 120
verb 3
explicit-exit-notify 0

这个文件的原始版本内容很多,不过里面注释部分占了90%,有兴趣的同学可以通过这个路径找到默认的源文件:

/usr/share/doc/openvpn/sample/sample-config-files/server.conf
server 10.8.0.0 255.255.255.0 表示将虚拟网段设定在10.8.0.1 ~ 10.8.0.X之间(服务器网关占用1号主机)
可能让人费解的是这两行:
push “dhcp-option DNS 1.1.1.1”
push “dhcp-option DNS 1.0.0.1”

意思是说让客户端使用这两个由 Cloudflare 提供的DNS服务器。


  1. 编辑Client端配置文件:

    nano ~/ovpn/keys/client1.ovpn

    client
    dev tun
    proto tcp
    remote 123.123.123.123 8080
    resolv-retry infinite
    
    nobind
    persist-key
    persist-tun
    
    ca ca.crt
    cert client1.crt
    key client1.key
    remote-cert-tls server
    tls-crypt ta.key 1
    
    cipher AES-256-GCM
    auth SHA256
    
    key-direction 1
    
    verb 3
    

    同样的,以上也是精简版本,源文件在这里:

    /usr/share/doc/openvpn/sample/sample-config-files/client.conf

    其中唯一需要改动的地方是将 123.123.123.123 改为你自己的OpenVPN服务器地址即可。

    注意,服务器端与客户端配置文件需要保持一致,例如:

    1. dev tun (如果服务器端是dev tun 而 客户端为dev tap则会报错)

    2. proto tcp (本文以udp为例,如果此处改为tcp,则两边都必须为tcp)

    3. tls-crypt (有些教程此处为tls-auth也是可以的,但两边注意同步)


五、连通性测试

在服务器上输入这条命令开启OpenVPN Server:

cd ~/ovpn/keys
openvpn --config ~/ovpn/keys/server.conf

如果没有问题的话,最后一行将会显示:

Initialization Sequence Completed

如果配置有误,则需要仔细排查看看到底问题出在哪。


回到客户端这边,首先将 ~/ovpn/keys 中的这5个文件通过ftp或者别的什么方式拷贝到客户端PC:

  • ca.crt

  • ta.key

  • client1.crt

  • client1.key

  • client1.ovpn

然后将这5个文件拷贝到OpenVPN for Windows的安装文件夹:

C:\Program Files\OpenVPN\config

打开OpenVPN GUI ,鼠标右键单击右下角OpenVPN图标,然后选 ”连接“,则会弹出一个Log窗口,如果最后也是显示 Initialization Sequence Completed 的话,则说明基本问题不大了。

<题外话1>

C:\Program Files\OpenVPN\bin 这个文件夹里有一个名为openvpn.exe 的文件,其作用与Linux下的 openvpn命令 一样。因此我们可以绕开图形化界面,直接在cmd终端下使用:openvpn.exe --config client1.ovpn 命令进行连接。

<题外话2>
即使我们在服务器设置了子网掩码是 /24 即 255.255.255.0,实际上客户端会收到一个 /30 的子网掩码:255.255.255.252,这是正常现象。OpenVpn这样做的目的,首先可以简化服务器的路由表,因为服务器只需要为每个客户端维护一个小型子网。同时可以隔离客户端,有助于隔离每个客户端的流量,使其更加安全。

现在打开Windows 的cmd,输入 ping 10.8.0.1 看看能否ping通服务器网关,如果能连通则说明客户端到服务器之间已经可以正常通讯了,但是此时客户端还不能正常上网,因为服务器还没有进行NAT设置。


六、路由及NAT设置

这项工作是在服务器上进行的,一般来说与客户端无关。
首先关闭系统自带防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld

通常别的教程都是以 iptable 为例,笔者对这个老工具不甚了解,因此无法提供相应的命令组合或者脚本,下面提供一个 nftables 脚本,其作用与 iptable 一样:

题外话:nftables的默认脚本有多个,位置在: /etc/nftables
实际启动脚本在是 /etc/sysconfig/nftables.conf,在这个脚本里通过 include “/etc/nftables/main.nft” 类似的命令进行脚本聚合。 此处我们不对 nftables 进行深究,只需要将默认脚本修改为我们的即可。

nano /etc/sysconfig/nftables.conf

输入以下内容:

flush ruleset
table inet filter{


        chain input {
                # 允许udp 8080通过
                udp dport 8080 accept
        }

        chain forward {
                type filter hook forward priority 0; policy drop;
                ct state related,established accept
                iifname tun0 oifname ens3 accept

        }

}

table ip nat {
        chain postrouting {
                type nat hook postrouting priority 100;

                # 对10.8.0.0网段的地址进行NAT
                iifname tun0 oifname ens3 ip saddr 10.8.0.0/24 masquerade

        }

        chain prerouting {
                type nat hook prerouting priority 0;

        }

}

这个脚本需要修改两个地方都很简单:
tun0 为OpenVPN创建的虚拟网卡名称,将它改成你自己的即可。
ens3 为本机的真实网卡名称,改为你自己的即可。
这两个名称可以通过:ip addr 命令获知。

接着让脚本生效:nft -f /etc/sysconfig/nftables.conf
查看是否生效:nft list ruleset (如果显示的内容和上面的脚本一致,说明OK)
然后输入:systemctl enable nftables (确保 nftables 是自启动的)

  • PS:如果不打算修改系统自带的防火墙规则,也然后用这条临时方法加载:
    先将以上脚本存为一个文件,例如:openvpn.nft
    然后输入指令:nft -f openvpn.nft

接下来,别忘了允许服务器转发:

nano /etc/sysctl.conf

新增或者修改一行: net.ipv4.ip_forward=1 ,存盘退出。

PS: 建议最好reboot一次。

现在在服务器启动openvpn:

cd ~/ovpn/keys
openvpn --config ~/ovpn/keys/server.conf

回到Windows,重启客户端软件。

如果一切顺利,客户端就可以正常上网了。至此OpenVPN的基础设置就完成了,接下来再来完善一些细节。


七、服务器自启动设置
  1. 将服务器所需的所有文件拷贝到OpenVPN默认目录:

    cp ~/ovpn/keys/ca.crt /etc/openvpn/server
    cp ~/ovpn/keys/ta.key /etc/openvpn/server
    cp ~/ovpn/keys/server.crt /etc/openvpn/server
    cp ~/ovpn/keys/server.key /etc/openvpn/server
    cp ~/ovpn/keys/server.conf /etc/openvpn/server
    

如果决定将来以服务形式启动openvpn,记得修改server端配置文件的时候使用这个路径:
nano /etc/openvpn/server/server.conf

  1. 修改openvpn-server服务文件:

nano /usr/lib/systemd/system/openvpn-server@.service

[Unit]
Description=OpenVPN service for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/server
ExecStart=/usr/sbin/openvpn --config server.conf
ExecStop=killall openvpn
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target

大部分内容保持默认不要动,只修改这两个地方:

ExecStart=/usr/sbin/openvpn --config server.conf
ExecStop=killall openvpn

修改完毕后,存盘退出,再执行:

rm -rf /etc/systemd/system/openvpn-server@server.service.d

因为这个地方会 Override 加载一些没有用的内容而导致加载失败,而这些功能(add-bridge等)都不是我们这个极简教程所需要的,因此将之删除,有兴趣的同学可以在备份好源文件的前提下继续深入研究。现在,重新加载OpenVPN服务:

systemctl daemon-reload
systemctl start openvpn-server@server.service

然后查看一下是否工作正常:

systemctl status openvpn-server@server.service

如果出现绿色的:Active: active (running),说明正常,如果是红色的则表示运行有误,需要排查,另外还可以通过:journalctl -fu openvpn-server@server.service 命令查看完整 log 以定位故障点。
一切无误后,输入:

systemctl enable openvpn-server@server.service

将openvpn启动脚本写入系统服务,这样就不需要每次重启都需要输入openvpn启动指令,系统将自动运行它。


八、客户端配置文件优化

尽管现在我们其实已经可以正常使用OpenVPN了,但客户端需要以下5个文件来支持:

  • ca.crt
  • ta.key
  • client1.crt
  • client1.key
  • client1.ovpn

这对单个客户端而言还不算麻烦,但是客户端一多,分发和管理的时候就很费事了,下面我们将这5个文件整合为1个以方便分发(PS: 此步骤并非必须,仅供参考)

  1. 切换到Windows 的 C:\Program Files\OpenVPN\config 文件夹

  2. 用记事本打开 client1.ovpn

  3. 用记事本打开 ca.crt

  4. 全选 ca.crt 文件内容,选 ”复制“

  5. 切换到 client1.ovpn 在文件末尾添加:

    <ca>
     在此处粘贴ca.crt的内容
    </ca>
    
  6. 依葫芦画瓢,依次打开剩下的4个文件,然后将其粘贴到client1.ovpn里即可,对应的标签分别是:

    <cert> client1.crt的内容 </cert>
    <key> client1.key的内容 </key>
    <tls-crypt> ta.key的内容 </tls-crypt>

至此client1.ovpn 里相当于加塞了4个文件的内容,现在将这4个文件删除(先备份好的前提下),只留下client1.ovpn ,重新打开 OpenVPN GUI 一样可以正常连接,功能不受影响。显然,这在分发的时候就简单清爽多了。


2023-12-22 填坑:
有些Win10客户端能用,有的又不能用,有的时好时坏,主要表现在:文章来源地址https://www.toymoban.com/news/detail-781436.html

  1. 无法自动获取网关,但 ping 网关 (10.8.0.1)又可以ping通
  2. 无法 ping 通 google
  3. 还非得给本地真实网卡强行绑定 1.1.1.1 或 8.8.8.8 DNS服务器后,故障才能排除
    初步判定为网卡的优先级问题,解决方法:
  4. 管理员运行PowerShell
    输入以下指令:
    Get-NetIPInterface
    显示如下:
    openvn,运维,Centos,服务器,linux,运维
    注意看,ifIndex 编号为12的 OpenVPN Data Channel Offload 它的优先级是25.
    现在输入:
    Set-NetIPInterface -InterfaceIndex 12 -InterfaceMetric 1
    意思就是说将编号12的网络适配器的优先级调整到最高,也就是1
    再次输入 Get-NetIPInterface ,发现优先级已经上去了:
    openvn,运维,Centos,服务器,linux,运维
    至此故障排除。

到了这里,关于一看就懂的保姆级教程:open vn设置 (亲测通过)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 一看就懂的装箱拆箱案例

    在C#中,装箱(Boxing)和拆箱(Unboxing)是值类型与引用类型之间相互转换的过程。 当一个值类型(如整数、结构体或枚举等)需要转换为对象(System.Object)或接口类型时,系统会自动创建一个新的对象实例,并将该值类型变量的值复制到新创建的对象中。这个过程就称为装

    2024年02月02日
    浏览(33)
  • Vue3 - 超详细 “纯前端“ 将文件上传到阿里云 OSS 对象存储,最新阿里云 SDK 上传音频、视频、图片、文档、office 等(保姆级详细示例源码教程,每行代码都有注释小白一看就懂)

    网上的教程大部分都过时了,各种不规范的写法五花八门(各种文件引入关系贼难改),对于新手来说真的无从下手。 本文站在新手的角度, 在 vue3 项目开发中,超详细 “纯前端(无需后端)” 上传各种图片图像、文档、音视频文件、压缩包到阿里云oss存储,利用 SDK 前端

    2024年02月03日
    浏览(31)
  • Google Chrome谷歌浏览器安装最新版Elasticsearch插件 图文教程 【一看就懂】

    我们在虚拟机安装了Elasticsearch后,往往还需要再安装一个可视化界面以便于使用。本文就教您如何在Google Chrome谷歌浏览器安装最新版Elasticsearch(es)插件。 | 1 如图所示,点击设置 进入如下界面,点击扩展程序 开启开发者模式后点击Chrome网上应用商店 如图所示搜索插件El

    2024年02月07日
    浏览(54)
  • python文件操作(一看就懂)

    现在我们接着上文讲,如果没有看过我上篇文章的萌新朋友们可以先去看看,不然一会儿容易读的你满脸问号。python字符编码 现在我们来思考一个问题,我们在PyCharm里敲字符,这个字符应当先存到内存中去,而内存里都存的是unicode格式的二进制,如果我们现在就把他存到硬

    2024年02月03日
    浏览(31)
  • 插入排序超详解释,一看就懂

    目录 一、插入排序的相关概念 1、基本思想 2、基本操作:有序插入 二、插入排序的种类 三、直接插入排序 1、直接插入排序的过程:顺序查找法查找插入位置 2、使用“哨兵”直接插入排序 四、 直接插入排序算法描述 五、折半插入排序 1、查找插入位置时采用折半查找法,

    2024年01月25日
    浏览(33)
  • 【数据结构】插入排序详细图解(一看就懂)

      💯 博客内容:【数据结构】插入排序详细图解(一看就懂) 😀 作  者:陈大大陈 🦉所属专栏:数据结构笔记 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,

    2024年02月07日
    浏览(39)
  • C# for循环案例1 (一看就懂)

     效果:  用f10可以清楚的看到程序执行的每一步,  #region for循环 /*   语法:     for(表达式1;表达式2;表达式3) {    循环体; } for(表达式1;表达式2;表达式3)   表达式1 定义循环的次数,可以理解为循环变量。表达式2 执行的条件。 表达式3,改变循环的条件,使循环条件不

    2023年04月11日
    浏览(37)
  • 微信小程序实现倒计时功能,一看就懂,直接用

    结构完整,直接用就可以

    2024年02月01日
    浏览(51)
  • java三层架构,有图有案例有代码,一看就懂!!!

    三层架构 三层结构解释: 视图层:主要是用于与用户进行交互,比如接收用户输入的内容将返回结果向用户展示等。 业务逻辑层:实现每个功能的特定的逻辑方法。 数据访问层:主要是与数据库进行连接,然后对数据库进行增删改查工作。 结构一: 包的层级结构: 三层结

    2024年02月03日
    浏览(36)
  • Windows 11 安卓子系统安裝教程,保姆级别一看就会!

    前言 模拟器与win11内置的安卓子系统相比,那是一个天一个地,比模拟器香多了。windows 11 自带安卓子系统发布已经有一段时间了,但是目前并没有开放给中国用户,因此、下面这个教程,教大家如何在windows 11上安装安卓子系统,安装子系统后,在windows电脑上直接就能安装安

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包