如何在Ubuntu 16.04上设置OpenVPN


在本文中,我们将学习如何在Ubuntu Linux上配置OpenVPN服务器。是的,我们可以使用VPN(虚拟专用网络)来安全私密地从不受信任的网络连接到工作场所。例如,如果您在酒店或咖啡馆,并希望通过智能手机或笔记本电脑使用Wi-Fi网络安全地访问工作环境。

OpenVPN是一个功能齐全的开源安全套接字层(SSL) VPN解决方案,它可以适应各种配置。

安装OpenVPN

要开始安装,我们需要一台Ubuntu机器,该机器拥有具有sudo权限的非root用户。

使用“sudo”用户登录Ubuntu机器,然后继续执行以下步骤。

由于OpenVPN在Ubuntu的默认存储库中可用,我们需要更新服务器,并将安装easy-rsa包以获取与我们的VPN服务器一起使用的内部CA(证书颁发机构)。

$ sudo apt-get update

更新服务器后,我们将安装OpenVPN和easy-rsa。

$ sudo apt-get install openvpn easy-rsa

设置CA目录

OpenVPN是一个TLS/SSL VPN。这意味着它将使用证书来加密服务器和客户端之间的流量。为了颁发可信证书,我们将设置我们自己的简单证书颁发机构(CA)。

我们将使用make-cadir命令将easy-rsa模板目录复制到我们的主目录。

$ sudo make-cadir ~/openvpn-ca

更改到新创建的目录以开始配置CA。

$ cd ~/openvpn-ca

配置CA变量

我们需要编辑目录中“vars”文件的值。现在打开文件进行编辑。

$ source vars

我们将找到一些可以调整的变量,以确定如何创建我们的证书。在这个演示中,我们将更改其中一些变量。

我们将找到一些设置,这些设置设置新证书的默认值,如下所示。

. . .
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
. . .

根据您的区域和需求编辑这些值。以下是演示目的的信息。

. . .
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="in"
export KEY_PROVINCE="AP"
export KEY_CITY="Hyderabad"
export KEY_ORG="RIG"
export KEY_EMAIL="[email protected]"
export KEY_OU="Resource Infomatics Group"
# X509 Subject Field
. . .
We will also edit the KEY_NAME value which is just below this section, for demo purpose we will call as vpn_server
export KEY_NAME="vpn_server"
Save the file and close it.

构建CA(证书颁发机构)

我们可以使用我们在easy-rsa实用程序中设置的变量来构建我们的证书颁发机构,更改到我们在前面步骤中创建的CA目录,然后使用source命令加载我们编辑过的vars文件。

$ cd ~/openvpn-
ca$ source
vars$ ./clean-all
$ ./build-ca

这将创建根证书和具有证书的授权密钥。由于我们已经在vars文件中提供了信息,只需按ENTER键即可。

Country Name (2 letter code) [US]:
State or Province Name (full name) [NY]:
Locality Name (eg, city) [New York City]:
Organization Name (eg, company) [DigitalOcean]:
Organizational Unit Name (eg, section) [Community]:
Common Name (eg, your name or your server's hostname) [DigitalOcean CA]:
Name [server]:
Email Address [[email protected]]:
Creating the Server Certificate, Key and Encryption Files.
We will create the Server Certificate, Key and Encryption and also some additional files used for the encryption process.
We can use the below command to generate key certificate and key pair.
$ ./build-key-server serverCountry Name (2 letter code) [in]:
State or Province Name (full name) [ap]:
Locality Name (eg, city) [Hyderabad]:
Organization Name (eg, company) [rigaps]:
Organizational Unit Name (eg, section) [RIGAPS]:
Common Name (eg, your name or your server's hostname) [server]:
Name [RIGAPS_EasyRSA]:
Email Address [[email protected]]:
Please enter the following 'extra' attributesto be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /home/ubuntu/openvpn-ca/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :                 PRINTABLE:'in'
stateOrProvinceName :         PRINTABLE:'ap'
localityName :                PRINTABLE:'Hyderabad'
organizationName :            PRINTABLE:'rigaps'
organizationalUnitName:       PRINTABLE:'RIGAPS'
commonName :                  PRINTABLE:'server'
name :                        T61STRING:'RIGAPS_EasyRSA'
emailAddress :                IA5STRING:'[email protected]'
Certificate is to be certified until Jun 4 10:03:24 2026 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

按ENTER键接受默认值。在结束之前,也不要输入设置密码。

我们可以生成与密钥交换一起使用的Diffie-Hellman密钥。

$ ./build-dh
$./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
............................................................................................................+................++*++*
We will generate HMAC Signature to strengthen the servers TLS integrity verfication.
$ openvpn --genkey --secret keys/ta.key

生成客户端证书和密钥对

我们将使用以下命令生成客户端密钥和证书,让我们以client1为例作为演示客户端:

$ cd ~/openvpn-ca
$ source vars
$ ./build-key client1

配置OpenVPN服务

我们可以使用刚刚生成的凭据和文件配置OpenVPN。

将文件复制到OpenVPN目录

我们需要将所有生成的文件复制到/etc/openvpn。

$ cd ~/openvpn-ca/keys
$ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

然后我们需要复制并解压示例配置文件到该目录。

$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

我们需要修改服务器配置文件。

$ sudo nano /etc/openvpn/server.conf

需要取消一些指令“redirect-gateway”的注释。

…. push “redirect-gateway def1 bypass-dhcp” …. push “dhcp-option DNS 208.67.222.222” push “dhcp-option DNS 208.67.220.220” … tls-auth ta.key 0 # 此文件是秘密的

并添加以下行

key-direction 0
....

最后,通过删除“;”来取消以下行的注释。

user nobody
group nogroup

保存并关闭文件。

设置服务器网络配置

我们需要调整服务器上的一些设置,网络设置来路由OpenVPN流量。

允许服务器上的IP转发

我们将允许服务器转发传入流量,这是VPN服务器设置的重要步骤。

为此,我们需要修改/etc/sysctl.conf文件。

$ sudo nano /etc/sysctl.conf

找到net.ipv4.ip_forward行,并删除“#”以取消该行的注释。

Net.ipv4.ip_forward=1

保存文件。

要在当前会话中应用更改,请使用以下命令。

$ sudo sysctl –p

启动和启用OpenVPN服务

我们必须在服务器上启动OpenVPN服务,为此,我们将使用配置文件作为变量的实例启动OpenVPN服务器,配置文件位于服务器上的/etc/openvpn/server.conf,当我们启动服务器时,我们将在命令末尾添加@server。

$ sudo systemctl start openvpn@server

我们可以使用以下命令检查服务状态。

$ sudo systemclt status openvpn@server
$ [email protected] - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
Active: active (running) since Tue 2016-06-06 13:30:05 EDT; 37s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
Main PID: 5856 (openvpn)
Tasks: 1 (limit: 512)
CGroup: /system.slice/system-openvpn.slice/[email protected]
└─5856 /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
June 06 13:30:40 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 192.168.0.1 peer 192.168.0.2
June 06 13:30:40 openvpn2 ovpn-server[5856]: /sbin/ip route add 192.168.0.0/24 via 192.168.0.2
June 06 13:30:40 openvpn2 ovpn-server[5856]: GID set to nogroup
June 06 13:30:40 openvpn2 ovpn-server[5856]: UID set to nobody
June 06 13:30:40 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef]
June 06 13:30:40 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef]
June 06 13:30:40 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256
June 06 13:30:40 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=192.168.0.4 size=62, ipv6=0
June 06 13:30:40 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST
June 06 13:30:40 openvpn2 ovpn-server[5856]: Initialization Sequence Completed

我们可以使用以下命令检查OpenVPN tun0接口。

$ ip addr show tune0
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever

现在,我们将设置服务以在启动时自动启动。

$ sudo systemctl enable openvpn@server

创建客户端配置

我们需要创建客户端主目录来存储文件。

$ mkdir –p ~/clients/files

出于安全原因,我们需要更改文件夹权限,因为此文件夹包含客户端机器的密钥。

$ chmod 7000 ~/clients/files

创建客户端基本配置

我们可以使用示例客户端配置,为此,我们需要将文件复制到当前位置。

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client/base.conf

使用任何文本编辑器打开配置文件。

$ vi ~/client/base.conf

我们需要在文件中进行一些更改,搜索文件中的远程部分。

…….
Remote server_IP_Address 1194
(Here we needed to add our public IP address)
….
user nobody
group nogroup
(Here we needed to un-comment the above lines)
….
# ca ca.crt
# cert client.crt
# key client.key
(We needed to comment the above lines in the configuration file)
….
….
Key-direction 1
(We needed to add the key-direction to the file at the end)
Save the file

生成创建配置文件的脚本

我们将创建一个简单的脚本来生成证书、密钥和加密文件,并编译我们在前面步骤中编辑的基本配置。使用以下代码创建文件。

$ nano ~/client/generate_config.sh
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>
<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>
<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>
<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn

创建文件后,我们需要使该文件可执行。

$ chmod 7000 ~/client/generate_config.sh

生成客户端配置文件

我们将使用以下命令为client1生成客户端证书和密钥。

$ cd ~/clients
$ ./generate_config.sh client1

如果所有脚本都运行良好,我们的~/client/files目录中将有一个client.ovpn文件。

我们需要使用WinSCP将客户端文件传输到客户端机器,这里我们使用Windows机器作为客户端。

在Windows上安装客户端配置

我们需要在Windows机器上下载OpenVPN软件,并将.ovpn文件(即client1.ovpn文件)复制到c:\Program Files\OpenVPN\config。

**注意** - 我们需要以管理员权限运行OpenVPN GUI,这意味着以管理员身份运行。

OpenVPN打开后,它将启动连接并最小化到系统托盘,右键单击OpenVPN小程序图标,选择client1并选择“连接”。

我们可以使用任何客户端操作系统(例如OSX、Android、IOS等)连接到服务器。

我们需要生成客户端证书和密钥对,为每个设备生成客户端配置文件。

完成此配置和设置后,我们可以安全地连接到办公室或环境,保护身份免受窥探者和审查者的侵害。

更新于:2019年10月18日

浏览量:505

启动您的职业生涯

通过完成课程获得认证

开始
广告