OpenVPN 是一个开源的商业 VPN 服务软件,是一种可以提供访问远程资源安全的虚拟专用网络。

它可以同时给多个客户端提供服务,通过给每个客户端颁发一个鉴权证书对客户端进行验证,并在安全协议上使用了基于 SSL/TLS 的密钥交换。它的使用场景有很多,例如通过 OpenVPN 建立隧道,连接企业内网等。很多系统都集成或嵌入了 OpenVPN 服务。例如基于 DD-WRT 开源路由器操作系统就包含有 OpenVPN 功能。

OpenVPN 的客户端也支持各种平台,例如常见的 Linux、macOS 和 Windows 等。一些嵌入式 Linux 系统也支持 OpenVPN,例如稍好一点的智能家用路由器或入门企业级路由器也会含有 OpenVPN 服务。这是因为 OpenVPN 可以给小型企业作为远程接入办公网络使用,即从公网通过 OpenVPN 访问办公内网资源。 笔者当年加入创业团队,组建办公网络环境,就使用了一个不到千元的华硕路由器(印象中是 RT-AC68U 还是什么),在路由器上创建维护基于 OpenVPN 的远程访问体系,很好支撑了几十人规模的无线设备接入和在家远程访问办公室网络需求。

本文就出于学习和研究的目的,介绍一下如何 3 分钟迅速在 Ubuntu Linux 上搭建 OpenVPN 服务器。以下安装教程在 Ubuntu 16.04 和 18.04 两个 LTS 版本中亲测有效。

这里我们使用社区提供的万能脚本来进行安装和配置。

  1. 下载脚本

    1
    
    $ wget https://git.io/vpn -O openvpn-install.sh
  2. 执行安装脚本

    1
    
    $ bash openvpn-install.sh

    安装过程中会有一些交互输入:

    1
    2
    3
    
    First, provide the IPv4 address of the network interface you want OpenVPN
    listening to.
    IP address: 12.34.56.78

    按回车确定,选择当前 IP。

    1
    2
    3
    
    Which protocol do you want for OpenVPN connections?
    1) UDP (recommended)
    2) TCP

    选择 UDP。

    1
    2
    
    What port do you want OpenVPN listening to?
    Port: 1194

    使用默认 1194 端口.

    1
    2
    3
    4
    5
    6
    7
    
    Which DNS do you want to use with the VPN?
    1) Current system resolvers
    2) 1.1.1.1
    3) Google
    4) OpenDNS
    5) Verisign
    DNS [1-5]: 1

    选择1,使用系统默认的 DNS 解析配置。

    1
    2
    3
    
    Finally, tell me your name for the client certificate.
    Please, use one word only, no special characters.
    Client name: client

    client 证书的名字,默认为 client。如果只是生成一个客户端用户,保留默认值即可。

  3. 配置已经完成。按照屏幕提示按任意键开始生成即可。

    1
    2
    
    Okay, that was all I needed. We are ready to set up your OpenVPN server now.
    Press any key to continue...
  4. 确认服务运行状态。正常情况下,OpenVPN 服务就已经开始在后台运行了。可以通过查看进程确认:

    1
    2
    
    root@ubuntu:~# ps -ef | grep vpn
    nobody   14173     1  0 06:30 ?        00:00:00 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
  5. 大功告成,分发客户端配置文件。将配置文件拷到客户端。

    1
    
    $ scp <机器名>:/root/client.ovpn .

    使用 openvpn 客户端读取配置文件,并连接即可。

  6. 日常维护

    • 要停止 openvpn 服务:

      1
      
      $ systemctl stop openvpn@server
    • 启动 openvpn 服务:

      1
      
      $ systemctl start openvpn@server

至此,OpenVPN 的快速安装就完成了。