如何建立一个OpenVPN服务器在Ubuntu 14.04

介绍

想要在连接到不受信任的网络(例如酒店或咖啡店的WiFi)时从智能手机或笔记本电脑安全地访问互联网吗? 一个虚拟专用网络 (VPN)允许,如果你是一个安全的专用网络上你私下地穿过不受信任的网络到您DigitalOceanDroplet。 交通从Droplet出现并且继续它的旅行到目的地。

当结合HTTPS连接 ,这种设置可以让你保护你的无线登录和交易。 您可以规避地理限制和审查,并屏蔽您的位置和未加密的HTTP流量从不受信任的网络。

OpenVPN的是一个全功能的开源安全套接字层(SSL)VPN,可容纳各种配置的解决方案。 在本教程中,我们将在Droplet上设置OpenVPN服务器,然后配置从Windows,OS X,iOS和Android的访问。 本教程将尽可能简化这些设置的安装和配置步骤。

注:OpenVPN的可以自动在你的Droplet通过添加安装这个脚本启动时,它的用户数据。 查看本教程以了解更多有关Droplet的用户数据。

先决条件

唯一的先决条件是有一个Ubuntu 14.04 Droplet建立和运行。 您需要root权限才能完成本指南。

  • 可选:本教程完成后,这将是创建一个标准用户帐户是一个好主意Sudo权限的服务器上执行常规维护。

第1步 - 安装和配置OpenVPN的服务器环境

完成服务器端设置的这些步骤。

OpenVPN配置

在我们安装任何包之前,首先我们将更新Ubuntu的存储库列表。

apt-get update

然后我们可以安装OpenVPN和Easy-RSA。

apt-get install openvpn easy-rsa

这个例子VPN服务器配置文件需要被提取到/etc/openvpn ,所以我们可以将其纳入我们的设置。 这可以使用一个命令:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf

一旦提取,打开server.conf在文本编辑器。 本教程将使用Vim,但您可以使用任何您喜欢的编辑器。

vim /etc/openvpn/server.conf

在此文件中有几个更改。 您将看到如下所示的部分:

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem

编辑dh1024.pem地说:

dh2048.pem

这将使生成服务器和客户端密钥时使用的RSA密钥长度加倍。

仍然在server.conf ,现在看这个部分:

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

取消注释push "redirect-gateway def1 bypass-dhcp"所以VPN服务器传递客户的网络流量到其目的地。 完成后应该看起来像这样:

push "redirect-gateway def1 bypass-dhcp"

下一个编辑是在这方面:

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses.  CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

取消注释push "dhcp-option DNS 208.67.222.222"push "dhcp-option DNS 208.67.220.220" 完成后应该看起来像这样:

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

这告诉服务器推出的OpenDNS来连接的客户端的DNS解析在可能的情况。 这可以帮助防止DNS请求泄漏到VPN连接之外。 但是,在客户端设备中指定所需的DNS解析器也很重要。 虽然OpenDNS是OpenVPN默认使用的,但您可以使用任何您喜欢的DNS服务。

在修改的最后一个领域server.conf是在这里:

# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup

取消注释无论user nobodygroup nogroup 完成后应该看起来像这样:

user nobody
group nogroup

默认情况下,运行的OpenVPN以用户身份 ,从而对系统进行完全的root访问权限。 我们将代替限制OpenVPN的用户nobody和组nogroup。 这是一个没有默认登录功能的非特权用户,通常保留用于运行不受信任的应用程序,如面向Web的服务器。

现在保存您的更改并退出Vim。

数据包转发

这是一个sysctl的设置,它告诉服务器的内核转发来自客户端设备投放到互联网。 否则,流量将在服务器停止。 通过输入以下命令在运行时启用包转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

我们需要使此永久,所以服务器仍然在重新启动后转发流量。

vim /etc/sysctl.conf

靠近sysctl文件的顶部,您将看到:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

取消注释net.ipv4.ip_forward 完成后应该看起来像这样:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

保存更改并退出。

不复杂的防火墙(ufw)

ufw是iptables的前端,并设置ufw不难。 它被默认包括在Ubuntu 14.04中,所以我们只需要做一些规则和配置编辑,然后打开防火墙。 至于UFW更多的用途参考,请参阅如何安装的Ubuntu和Debian云服务器与UFW防火墙

首先设置ufw以允许SSH。 在命令提示符下, ENTER

ufw allow ssh

本教程将使用OpenVPN的通过UDP,所以UFW还必须允许通过端口的UDP流量1194

ufw allow 1194/udp

ufw转发策略也需要设置。 我们将在ufw的主配置文件中执行此操作。

vim /etc/default/ufw

寻找DEFAULT_FORWARD_POLICY="DROP" 这必须从DROP改变为接受 完成后应该看起来像这样:

DEFAULT_FORWARD_POLICY="ACCEPT"

接下来,我们将为连接的客户端的网络地址转换和IP伪装添加额外的ufw规则。

vim /etc/ufw/before.rules

让你的顶部before.rules文件看起来像下面。 红色 OpenVPN的规则的区域必须补充说:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter

随着对ufw的更改,我们现在可以启用它。 进入命令提示符:

ufw enable

启用ufw将返回以下提示:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

y 结果将是这个输出:

Firewall is active and enabled on system startup

检查ufw的主要防火墙规则:

ufw status

status命令应返回以下条目:

Status: active

To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

第2步 - 创建证书颁发机构和服务器端证书和密钥

OpenVPN使用证书来加密流量。

配置和构建证书颁发机构

现在是设置自己的证书颁发机构(CA)并为OpenVPN服务器生成证书和密钥的时候了。 OpenVPN支持基于证书的双向认证,意味着客户端必须认证服务器证书,并且服务器必须在建立相互信任之前认证客户端证书。 我们将使用我们之前复制的Easy RSA脚本来做到这一点。

首先复制Easy-RSA生成脚本。

cp -r /usr/share/easy-rsa/ /etc/openvpn

然后使密钥存储目录。

mkdir /etc/openvpn/easy-rsa/keys

Easy-RSA有一个变量文件,我们可以编辑创建我们的人,业务或我们选择的任何实体专用的证书。 此信息将复制到证书和密钥,并将有助于以后标识密钥。

vim /etc/openvpn/easy-rsa/vars

下面以红色标记的变量应根据自己的喜好进行更改。

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="sammy@example.com"
export KEY_OU="MYOrganizationalUnit"

在同vars文件,也可以编辑如下这一行。 为简单起见,我们将使用server的键名。 如果要使用不同的名称,你还需要更新引用OpenVPN的配置文件server.keyserver.crt

export KEY_NAME="server"

我们需要生成Diffie-Hellman参数; 这可能需要几分钟。

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

现在让我们改变目录,以便我们直接从Easy-RSA的脚本移动到之前的第2步。

cd /etc/openvpn/easy-rsa

初始化PKI(公钥基础设施)。 注意点(。)空格前面./vars命令。 这表示当前工作目录(源)。

. ./vars

上述命令的输出如下所示。 因为我们还没有产生的任何keys目录然而,该警告是没有什么可担心。

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys

现在我们将清除任何可能的旧密钥或示例密钥的工作目录,以便为我们的新密钥。

./clean-all

此最终命令通过调用交互式OpenSSL命令构建证书颁发机构(CA)。 输出将提示您确认先前输入Easy-RSA变量文件(国家名称,组织等)中的可分辨名称变量。

./build-ca

只需按ENTER通过每个提示。 如果必须更改某些内容,您可以在提示中进行更改。

生成服务器的证书和密钥

从仍在工作/etc/openvpn/easy-rsa ,现在输入命令来构建服务器的密钥。 如果您看到server标记为红色是export KEY_NAME我们易于RSA的设置变量vars早些时候在第2步中的文件。

./build-key-server server

类似的输出,当我们跑产生./build-ca ,你可以再次按ENTER确认专有名称的每一行。 但是,此时还有两个其他提示:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

双方应留空白,所以只需按ENTER通过每一个。

在最后两个额外的查询要求正( y )回应:

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

上面的最后一个提示应该完成:

Write out database with 1 new entries
Data Base Updated

移动服务器证书和密钥

OpenVPN的希望看到服务器的CA,证书和关键/etc/openvpn 让我们将它们复制到正确的位置。

cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn

您可以通过以下方式验证复制是否成功:

ls /etc/openvpn

您应该看到服务器的证书和密钥文件。

此时,OpenVPN服务器已准备就绪。 启动它并检查状态。

service openvpn start
service openvpn status

状态命令应该返回:

VPN 'server' is running

恭喜! 您的OpenVPN服务器正在运行。 如果状态消息称,VPN不运行,再看看在/var/log/syslog错误,如文件:

Options error: --key fails with 'server.key': No such file or directory

这一错误表示server.key没有复制到/etc/openvpn正确。 重新复制文件,然后重试。

第3步 - 为客户端生成证书和密钥

到目前为止,我们已经安装并配置了OpenVPN服务器,创建了一个证书颁发机构,并创建了服务器自己的证书和密钥。 在此步骤中,我们使用服务器的CA为将连接到VPN的每个客户端设备生成证书和密钥。 这些文件稍后将安装到客户端设备,如笔记本电脑或智能手机。

钥匙和证书大厦

它是理想的连接到VPN的每个客户端有自己的唯一证书和密钥。 这优于生成一个通用证书和密钥以在所有客户端设备之间使用。

注:默认情况下,OpenVPN的不允许服务器来自客户端使用相同的证书和密钥的并发连接。 (见duplicate-cn/etc/openvpn/server.conf )。

要为每一个要连接到VPN设备独立的身份验证凭据,则应该完成此步骤为每个设备,但更改下面的名称客户端1不同的东西,如客户机程序的iPhone2.1。 使用每个设备的单独凭据,如果需要,稍后可以在服务器单独停用它们。 本教程中的其余的例子将使用客户端1作为示例客户端设备的名称。

当我们与服务器的关键一样,现在我们建立一个我们的客户端1的例子。 你仍然应该制定的/etc/openvpn/easy-rsa

./build-key client1

再次,系统将要求您更改或确认可分辨名称变量,并且这两个提示应留空。 ENTER接受默认值。

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

和以前一样,在构建过程结束时这两个确认需要( y )回应:

Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]

如果密钥构建成功,输出将再次为:

Write out database with 1 new entries
Data Base Updated

示例客户端配置文件也应该复制到Easy-RSA密钥目录。 我们将使用它作为模板,将其下载到客户端设备进行编辑。 在复制过程中,我们从改变示例的文件的名称client.confclient.ovpn因为.ovpn文件扩展名是什么客户端将期望使用。

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

您可以再次重复这一部分为每个客户端,在整个相应客户端名称替换客户端1。

将证书和密钥传输到客户端设备

从上面我们创建的客户证书和密钥的步骤回想一下,他们都存储在OpenVPN服务器上/etc/openvpn/easy-rsa/keys目录。

对于每个客户端,我们需要将客户端证书,密钥和配置文件模板文件传输到本地计算机或其他客户端设备上的文件夹。

在这个例子中,我们的客户端1设备需要的证书和密钥,位于服务器上:

  • /etc/openvpn/easy-rsa/keys/ client1 .crt
  • /etc/openvpn/easy-rsa/keys/ client1 .key

ca.crtclient.ovpn文件是所有客户端的一样。 也下载这两个文件; 注意, ca.crt文件是在不同的目录比其他人。

  • /etc/openvpn/easy-rsa/keys/client.ovpn
  • /etc/openvpn/ca.crt

虽然用于完成此传输的确切应用程序将取决于您的选择和设备的操作系统,您希望应用程序在后端使用SFTP(SSH文件传输协议)或SCP(安全复制)。 这将通过加密连接传输客户端的VPN身份验证文件。

下面是一个使用我们的客户端1的例子为例SCP命令。 它放置文件client1.key到本地计算机上的下载目录。

scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/

这里有几个工具和教程,用于将文件从服务器安全地传输到本地计算机:

在本节结束时,请确保您有您的客户端设备上这四个文件:

  • client1 .crt
  • client1 .key
  • client.ovpn
  • ca.crt

第4步 - 为客户端设备创建统一的OpenVPN配置文件

有用于管理客户机文件的几种方法,但最简单的使用一个统一的文件。 这是通过修改创建client.ovpn模板文件包括服务器的证书颁发机构,并在客户端的证书和密钥。 合并后,只有单一的client.ovpn配置文件需要被导入到客户端的OpenVPN的应用程序。

我们将为我们下载的所有客户端文件到本地计算机上我们CLIENT1装置一个配置文件。 该本地计算机本身可以是期望的客户端或仅仅是临时工作区域以合并认证文件。 原来client.ovpn模板文件应该被复制和重命名。 如何执行此操作将取决于本地计算机的操作系统。

注意:你的重复的名称client.ovpn不需要进行相关的客户端设备。 客户端OpenVPN应用程序将使用文件名作为VPN连接本身的标识符。 相反,你应该重复client.ovpn到任何你想要的VPN的名签在你的操作系统。 例如:work.ovpn会被认定为工作 ,school.ovpn 学校 ,等等。

在本教程中,我们将其命名VPN连接DigitalOcean所以DigitalOcean.ovpn将是在这一点上引用的文件名。 一旦命名,然后我们必须打开DigitalOcean.ovpn在文本编辑器; 您可以使用任何您喜欢的编辑器。

第一个注意区域将是您的Droplet的IP地址。 接近文件的顶部,改变服务器-1,以反映你的VPN的IP。

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194

接下来,找到如下图所示的区域并取消user nobodygroup nogroup ,就像我们在server.conf第1步注:这并不适用于Windows,因此您可以跳过它。 完成后应该看起来像这样:

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

下面给出的区域需要证明被注释掉,所以我们可以代替直接包含在证书和密钥的三条线DigitalOcean.ovpn文件。 完成后应该看起来像这样:

# SSL/TLS parms.
# . . .
#ca ca.crt
#cert client.crt
#key client.key

合并单个文件到一个统一的配置文件,所述ca.crt, 客户端1 .CRT的内容以及客户端1的.key文件被直接粘贴到.ovpn使用基本类似XML语法信息。 文件末尾的XML应采用以下格式:

<ca>
(insert ca.crt here)
</ca>
<cert>
(insertclient1.crt here)
</cert>
<key>
(insertclient1.key here)
</key>

完成后,文件的结尾应类似于此缩写示例:

<ca>
-----BEGIN CERTIFICATE-----
. . .
-----END CERTIFICATE-----
</ca>

<cert>
Certificate:
. . .
-----END CERTIFICATE-----
. . .
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
. . .
-----END PRIVATE KEY-----
</key>

client1.crt文件中有一些额外的信息; 它只是包括整个文件。

保存更改并退出。 我们现在有一个统一的OpenVPN的客户端配置文件来配置我们的客户端1。

第5步 - 安装客户端配置文件

现在我们将讨论在Windows,OS X,iOS和Android上安装客户端VPN配置文件。 这些客户端指令都不相互依赖,因此您可以跳过适用于您的任何一个。

请记住,连接将被称为任何你指定的.ovpn文件。 在我们的例子,因为文件被命名为DigitalOcean.ovpn ,连接将被命名为DigitalOcean。

视窗

安装

用于Windows的OpenVPN的客户端应用程序上可以找到OpenVPN的下载页面 为您的Windows版本选择适当的安装程序版本。

注:OpenVPN的需要管理权限才能安装。

OpenVPN的安装后,统一复制DigitalOcean.ovpn配置文件:

C:\Program Files\OpenVPN\config

当您启动OpenVPN时,它将自动查看配置文件并使其可用。

OpenVPN必须在每次使用时以管理员身份运行,即使是通过管理帐户。 要做到这一点,而无需单击鼠标右键,并选择以管理员身份运行每次使用VPN时,可以预设这一点,但它必须从管理账户来完成。 这也意味着标准用户将需要输入管理员的密码才能使用OpenVPN。 另一方面,标准用户无法正确连接到服务器,除非客户端上的OpenVPN具有管理员权限,因此提升的权限是必要的。

要设置OpenVPN的应用程序始终以管理员身份运行,其快捷方式图标右键单击并转到属性 兼容性选项卡的底部,单击按钮为所有用户更改设置 在新的窗口中,检查运行此程序作为管理员

连接

每次启动OpenVPN GUI时,Windows将询问您是否允许程序更改您的计算机。 单击 启动OpenVPN客户端应用程序只会将小程序放在系统托盘中,以便VPN可以根据需要连接和断开连接; 它实际上不会建立VPN连接。

一旦OpenVPN启动,通过进入系统托盘applet并右键单击OpenVPN小程序图标启动连接。 这将打开上下文菜单。 在菜单的顶部选择DigitalOcean(这是我们的DigitalOcean.ovpn配置文件),然后选择连接

在建立连接时,将打开一个状态窗口,显示日志输出,并在客户端连接后显示一条消息。

从VPN断开以同样的方式:进入系统托盘小程序,右键单击OpenVPN的小程序图标,选择客户端配置文件并单击断开连接

OS X

安装

的Tunnelblick是一个免费,开源的OpenVPN客户端的Mac OS X您可以从下载最新的磁盘映像的Tunnelblick下载页面 双击下载.dmg文件,并按照提示进行安装。

在安装过程结束时,Tunnelblick会询问您是否有任何配置文件。 它可以比较容易回答没有 ,并让的Tunnelblick完成。 打开Finder窗口,然后双击DigitalOcean.ovpn Tunnelblick将安装客户端配置文件。 需要管理权限。

连接

应用程序文件夹启动的Tunnelblick通过双击的Tunnelblick。 一旦Tunnelblick启动,在屏幕的右上角的菜单栏中将有一个Tunnelblick图标,用于控制连接。 点击该图标,然后在连接菜单项,启动VPN连接。 选择DigitalOcean连接。

iOS

安装

从iTunes的App Store,搜索并安装OpenVPN的连接 ,官方的iOS OpenVPN的客户端应用程序。 要将iOS客户端配置文件传输到设备上,请将其直接连接到计算机。

此处将概述使用iTunes完成传输。 在电脑上打开iTunes,点击iPhone> 应用程序 向下滚动至底部到文件共享部分,然后单击OpenVPN的应用程序。 空白窗口的右侧,OpenVPN的文档 ,是一个共享文件。 拖动.ovpn文件到OpenVPN的文档窗口。

iTunes显示VPN配置文件准备加载到iPhone上

现在在iPhone上启动OpenVPN应用程序。 系统会通知您可以汇入新的设定档。 点击绿色加号即可将其导入。

OpenVPN iOS应用程序显示准备导入的新配置文件

连接

OpenVPN现在可以使用新的配置文件。 开始滑动连接按钮,以打开位置的连接。 通过滑动同一个按钮为断开。

注意: 设置下的VPN开关不能用于连接到VPN。 如果您尝试,您将收到通知,只使用OpenVPN应用程序连接。

OpenVPN iOS应用程序连接到VPN

Android

安装

打开Goog​​le Play商店。 搜索并安装Android的OpenVPN的连接 ,官方Android OpenVPN的客户端应用程序。

.ovpn配置文件可以通过USB将Android设备连接到计算机并在复制文件传输。 或者,如果您有SD读卡器,则可以删除设备的SD卡,将配置文件复制到其中,然后将卡插入Android设备。

启动OpenVPN应用程序,然后点击菜单导入配置文件。

OpenVPN Android应用配置文件导入菜单选择

然后导航到保存的配置文件(截图中使用的位置/sdcard/Download/ ),并选择该文件。 应用程序将记录导入配置文件。

OpenVPN Android应用程序选择要导入的VPN配置文件

连接

要连接,只需点击Connect按钮。 将询问您是否信任OpenVPN应用程序。 选择确定以发起连接。 若要从VPN断开连接,回到OpenVPN的应用程序,然后选择断开连接

OpenVPN Android应用程序准备好连接到VPN

第6步 - 测试您的VPN连接

一旦一切安装,一个简单的检查确认一切正常工作。 无需启用VPN连接,打开浏览器并转到DNSLeakTest

该网站将返回由您的互联网服务提供商分配的IP地址,并显示给世界其他地方。 要检查通过同一网站的DNS设置,点击扩展的测试 ,它会告诉你哪些DNS您正在使用的服务器。

现在将OpenVPN客户端连接到您的Droplet的VPN并刷新浏览器。 现在出现VPN服务器完全不同的IP地址。 现在是你对世界的看法。 再次, DNSLeakTest的 扩展测试将检查您的DNS设置,并确认您现在使用由您的VPN推DNS解析器。

恭喜! 您现在安全地通过互联网保护您的身份,位置和流量从窥探者和审查员。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

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

支付宝扫一扫打赏

微信扫一扫打赏