介绍
我们将在CentOS 7服务器上安装和配置OpenVPN。 我们还将讨论如何在Windows,OS X和Linux上将客户端连接到服务器。
OpenVPN是一个开源VPN应用程序,它允许您通过公共Internet安全地创建和加入专用网络。
先决条件
您应该完成这些先决条件:
- CentOS 7Droplet
- 根访问服务器(几个步骤,不能只用sudo访问完成)
- 解析到您可用于证书的服务器的域或子域
在我们开始之前,我们需要安装Enterprise Packages for Enterprise Linux(EPEL)存储库。 这是因为OpenVPN在默认的CentOS存储库中不可用。 EPEL存储库是由Fedora项目管理的附加存储库,包含非标准但受欢迎的软件包。
yum install epel-release
第1步 - 安装OpenVPN
首先我们需要安装OpenVPN。 我们还将安装Easy RSA来生成我们的SSL密钥对,这将保护我们的VPN连接。
yum install openvpn easy-rsa -y
第2步 - 配置OpenVPN
OpenVPN在其文档目录中有示例配置文件。 我们将样本复制server.conf
文件作为起点为我们自己的配置文件。
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
让我们打开文件进行编辑。
vi /etc/openvpn/server.conf
我们需要在这个文件中更改几行。 大部分线路只需要注释去掉(去除)。 其他的变化被标记为红色 。
当我们后来产生我们的钥匙,以方便RSA默认的Diffie-Hellman加密长度为2048字节,所以我们需要改变dh
文件名dh2048.pem
。
dh dh2048.pem
我们需要取消对push "redirect-gateway def1 bypass-dhcp"
线,告诉客户通过我们的OpenVPN重定向所有流量。
push "redirect-gateway def1 bypass-dhcp"
接下来,我们需要向客户端提供DNS服务器,因为它将无法使用您的Internet服务提供商提供的默认DNS服务器。 我们将使用谷歌的公共DNS服务器8.8.8.8
和8.8.4.4
。
通过取消注释做到这一点push "dhcp-option DNS
线路并更新IP地址。
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
我们希望OpenVPN的与没有特权一旦开始运行,所以我们需要告诉它用的用户和组运行nobody
。 要启用此功能,您需要取消注释以下行:
user nobody
group nobody
保存并退出OpenVPN服务器配置文件。
第3步 - 生成密钥和证书
现在服务器已配置,我们将需要生成我们的密钥和证书。 Easy RSA安装一些脚本来生成这些密钥和证书。
让我们创建一个目录,让键进入。
mkdir -p /etc/openvpn/easy-rsa/keys
我们还需要将密钥和证书生成脚本复制到目录中。
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
为了让自己更容易生活,我们将编辑脚本的默认值
因此我们不必在每次都输入我们的信息。 此信息被存储
在vars
文件,以便让我们打开这个编辑。
vi /etc/openvpn/easy-rsa/vars
我们要有所改变,与启动值KEY_
。 更新以下值以使您的组织准确。
最重要的是:
-
KEY_NAME
:你应该输入server
位置; 您可以输入别的东西,但你也必须更新引用配置文件server.key
和server.crt
-
KEY_CN
:输入解析到服务器的域或子域
对于其他值,您可以根据变量名称输入组织的信息。
. . .
# 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="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="sammy@example.com"
export KEY_OU="Community"
# X509 Subject Field
export KEY_NAME="server"
. . .
export KEY_CN=openvpn.example.com
. . .
我们还将删除我们的OpenSSL配置由于版本不可检测而无法加载的机会。 我们将通过复制所需的配置文件并删除版本号来完成此操作。
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
开始产生我们的密钥和证书,我们需要进入我们的easy-rsa
目录和源在我们的新的变量。
cd /etc/openvpn/easy-rsa
source ./vars
然后我们将清除可能已经在此文件夹中的任何密钥和证书,并生成我们的证书颁发机构。
./clean-all
当你建立了证书颁发机构,您会被要求输入我们所投入的信息vars
文件,但你会看到你的选项已经被设置为默认值。 所以,你可以只按ENTER键。
./build-ca
我们需要生成的下一步是服务器的密钥和证书。 再次,你可以只是通过问题,并按ENTER键为每个使用默认值。 最后,回答Y(是)提交更改。
./build-key-server server
我们还需要生成一个Diffie-Hellman密钥交换文件。 此命令需要一两分钟时间完成:
./build-dh
这是我们的服务器密钥和证书。 将它们全部复制到我们的OpenVPN目录中。
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
我们所有的客户也需要证书才能进行身份验证。 这些密钥和证书将与您的客户端共享,最好为您打算连接的每个客户端生成单独的密钥和证书。
确保,如果你这样做,你给他们描述性的名称,但现在我们将有一个客户,所以我们只是把它client
。
cd /etc/openvpn/easy-rsa
./build-key client
这是钥匙和证书。
第4步 - 路由
为了保持简单,我们将直接使用iptables而不是新的firewalld来进行路由。
首先,确保iptables服务已安装并启用。
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables --flush
接下来,我们将向iptables添加一条规则,将我们的路由转发到我们的OpenVPN子网,并保存此规则。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
然后,我们必须启用IP转发sysctl
。 打开sysctl.conf
编辑。
vi /etc/sysctl.conf
在文件的顶部添加以下行:
net.ipv4.ip_forward = 1
然后重新启动网络服务,使IP转发生效。
systemctl restart network.service
第5步 - 启动OpenVPN
现在我们准备好运行我们的OpenVPN服务。 因此让我们将它添加到systemctl
:
systemctl -f enable openvpn@server.service
启动OpenVPN:
systemctl start openvpn@server.service
做得好; 这是为OpenVPN所做的所有服务器端配置。
接下来,我们将讨论如何将客户端连接到服务器。
第6步 - 配置客户端
无论您的客户端计算机的操作系统,您肯定需要从服务器的ca证书的副本,以及客户端密钥和证书。
找到服务器上的以下文件。 如果您生成具有唯一描述性名称的多个客户端密钥,则密钥和证书名称将不同。 在这篇文章中,我们使用client
。
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
这三个文件复制到客户机上 。 您可以使用SFTP或您的首选方法。 您甚至可以打开文本编辑器中的文件,并将内容复制并粘贴到客户端计算机上的新文件中。
只要确保你记下你保存他们的地方。
我们将创建一个名为client.ovpn
。 这是OpenVPN客户端的配置文件,告诉它如何连接到服务器。
- 您需要更改第一行,以反映您在密钥和证书中为客户提供的名称; 在我们的例子,这仅仅是
client
- 您还需要更新和IP地址
your_server_ip
到你的服务器的IP地址; 端口1194
可保持不变 - 确保密钥和证书文件的路径正确
client
dev tun
proto udp
remote your_server_ip 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca /path/to/ca.crt
cert /path/to/client.crt
key /path/to/client.key
此文件现在可由任何OpenVPN客户端用于连接到您的服务器。
视窗:
在Windows上,则需要官方的OpenVPN的社区版二进制它配备了一个图形用户界面。 然后,你把.ovpn
配置文件到正确的目录, C:\Program Files\OpenVPN\config
,然后单击连接在GUI中。 必须使用管理权限执行Windows上的OpenVPN GUI。
OS X:
在Mac OS X中,开源应用的Tunnelblick提供了类似于OpenVPN的图形用户界面在Windows界面,并配备了OpenVPN的和必要的TUN / TAP驱动程序。 与Windows,唯一需要的步骤是你的地方.ovpn
配置文件到~/Library/Application
Support/Tunnelblick/Configurations~/Library/Application
Support/Tunnelblick/Configurations~/Library/Application
目录。 或者,你可以在你双击
Support/Tunnelblick/Configurations.ovpn
文件。
Linux:
在Linux上,您应该从发行版的官方存储库安装OpenVPN。 然后,您可以通过执行以下命令来调用OpenVPN:
sudo openvpn --config ~/path/to/client.ovpn
结论
恭喜! 您现在应该具有在OpenVPN服务器上运行的完全可操作的虚拟专用网络。
您建立一个成功的客户端连接后,你可以验证你的流量正在通过VPN路由通过检查谷歌透露自己的公网IP 。