介绍
OpenVPN是一个开源虚拟专用网(VPN)服务器/客户端应用程序,它允许您安全地加入虚拟网络(类似于LAN)。
本教程将解释如何在FreeBSD 10.1机器上使用IPv4 NAT和路由安装和配置OpenVPN服务器。 它包括各种配置选项的简短说明。
在本教程结束时,您将运行您自己的OpenVPN服务器,并有一个客户端配置文件准备下载以连接到此网络。
先决条件
- 一个FreeBSD 10.1 Droplet。 Droplet大小取决于您打算连接到VPN的客户端数量; 519 MB适用于少数客户
- 根访问。 sudo是预装在DigitalOcean上的,所以没有什么额外的事情
本教程需要root访问权限。 在DigitalOcean,访问服务器作为默认的FreeBSD用户,然后访问root的shell:
sudo tcsh
第1步 - 安装OpenVPN
与安装OpenVPN的pkg
系统是相当简单的。 只需运行这些命令即可更新软件包列表并安装VPN软件:
pkg update
pkg install openvpn
这也应该安装easy-rsa
包,这将被用于产生SSL密钥对。
第2步 - 配置OpenVPN服务器
对于本教程,我们将基于OpenVPN提供的示例提供配置文件。 我们将为OpenVPN创建一个配置文件夹:
mkdir /usr/local/etc/openvpn
这个例子复制server.conf
文件复制到新目录中。
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf
安装nano
或者你喜欢的文本编辑器:
pkg install nano
打开配置文件进行编辑:
nano /usr/local/etc/openvpn/server.conf
注:OpenVPN的配置文件格式前缀使用分号注释(
;
)或散列(#
)。 在示例中,分号用于注释(禁用)配置选项,散列用于注释。
如果您知道要修改的配置选项,可以在此时执行此操作。
- 可选
port
:默认端口为1194,但你可以改变这个你喜欢什么 - 可选
proto
:选择使用tcp
或udp
; 默认是罚款 -
user
和group
:这些设置为nobody
通过取消注释行。 这将使OpenVPN运行的权限较少,为了安全
user nobody
group nobody
注意:每个配置可以一次运行只有一个端口和协议。
最后,请务必保存您的更改。
第3步 - 生成服务器证书和密钥
easy-rsa
使生成的证书和密钥简单。
首先,将程序复制到您的配置目录,因为您将修改值。
cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
打开vars
文件进行编辑:
nano /usr/local/etc/openvpn/easy-rsa/vars
通过修改此行更改键大小:
export KEY_SIZE=2048
这些天,标准是2048位的密钥,虽然你也可以使用4096位,这是更安全,但减慢谈判。
如果您喜欢,您还可以在此文件中设置默认证书和密钥值,以便您以后不必输入。
由于我们使用的shell是tcsh
,在export
线需要被替换setenv
。 这与做sed
的前source
。 移动到我们的easy-rsa
目录(必需)。
cd /usr/local/etc/openvpn/easy-rsa/
替换行:
cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin
尽管如此,从我们/usr/local/etc/openvpn/easy-rsa/
目录下,先清洁的目录,然后构建证书颁发机构(CA)。
./clean-all
./build-ca
系统将提示您设置CA选项。 填写您的详细信息:
Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com
Name [changeme]:Callum's VPN CA
Email Address [mail@host.domain]:callum@example.com
现在构建服务器密钥:
./build-key-server server
再次,设置选项。 您不需要密码或可选的公司名称。
输入y
签署并提交键:
Country Name (2 letter code) [US]:GB
State or Province Name (full name) [CA]:Somerset
Locality Name (eg, city) [SanFrancisco]:Bath
Organization Name (eg, company) [Fort-Funston]:Callum
Organizational Unit Name (eg, section) [changeme]:VPN
Common Name (eg, your name or your server's hostname) [server]:vpn.example.com
Name [changeme]:Callum's VPN Server
Email Address [mail@host.domain]:callum@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: ENTER
An optional company name []: ENTER
Certificate is to be certified until Feb 5 14:40:15 2025 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
最后,必须生成Diffie-Hellman密钥。 这可能需要一些时间,具体取决于密钥大小:
./build-dh
现在所有的服务器密钥和证书都生成了,它们应该被复制到我们的OpenVPN配置目录。
cd /usr/local/etc/openvpn/easy-rsa/keys/
cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/
您已完成服务器证书! 现在到客户端证书。
第4步 - 生成客户端证书
每个客户端还将需要一个证书和密钥,以便验证和连接到VPN。 请确保您在是/usr/local/etc/openvpn/easy-rsa/
目录下。
cd /usr/local/etc/openvpn/easy-rsa/
运行以下命令,其中clientName
是您要使用该特定客户端证书的名称。
./build-key clientName
系统将提示您再次输入国家名称,城市名称等。 该过程与服务器密钥生成的过程相同。 这是为客户的信息,但没有一件真的很重要。
您不需要密码或公司名称。 输入y
签署并提交证书。
注意:这是用于每个客户端不同的证书良好的实践中,这是由OpenVPN的默认执行。 但是,如果需要,可以在OpenVPN配置中禁用此功能(稍后解释)。
如果从使用不同的密钥大小2048
,您将需要修改OpenVPN的配置以匹配您使用的密钥大小的文件名。 如果你不记得,你可以查看的正确的文件名dh
与此命令文件:
ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem
编辑server.conf
:
nano /usr/local/etc/openvpn/server.conf
替换行dh dh2048.pem
有:
dh dhSIZE.pem
如果您之前遵循了我们对2048位密钥的建议,则不必进行任何更改。
对要创建的每个单独的客户端证书重复此部分。
第5步 - 配置IPv4 NAT路由
FreeBSD包含natd
作为一部分ipfw
防火墙其允许NAT路由和可用于OpenVPN的。 为了使用它,编辑/etc/rc.conf
:
nano /etc/rc.conf
在底部添加以下内容:
firewall_enable="YES"
firewall_type="open"
gateway_enable="YES"
natd_enable="YES"
natd_interface="vtnet0"
natd_flags="-dynamic -m"
-
firewall_enable
使ipfw
这是需要防火墙natd
-
firewall_type="open"
,使防火墙允许流量为默认 -
gateway_enable
套net.inet.ip.forwarding
到1
,它允许在系统上的IPv4路由 -
natd_enable
使实际的NAT路由器 -
natd_interface
朝向因特网的外部接口;vtnet0
用于DigitalOcean -
natd_flags
使得NAT动态和-m
保留端口号
现在,重新启动服务器加载ipfw
和natd
:
reboot
再次登录。 重新启动后,请记住运行sudo tcsh
再次成为root如果你没有的话。
第6步 - 配置OpenVPN路由配置和DNS
默认情况下,OpenVPN没有配置为告诉客户端通过VPN路由Internet流量。 我们将通过制作OpenVPN的肯定它路由流量通过取消注释在某些线路/usr/local/etc/openvpn/server.conf
:
nano /usr/local/etc/openvpn/server.conf
找到并取消注释这三行:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
预置DNS服务器是OpenDNS的,但你可以将其设置为你喜欢的(如与谷歌DNS任何DNS 8.8.8.8
和8.8.4.4
)。
可选设置:
您也可以允许客户端通过取消注释直接与对方的IP通信:
client-to-client
如果,如前所述,您想要为多个客户端使用相同的密钥和证书(这稍微不安全),请取消注释此行:
duplicate-cn
可以使用此行启用和禁用压缩:
comp-lzo
您可以通过取消注释以下行之一来手动设置密码:
cipher BF-CBC # Blowfish (default)
cipher AES-128-CBC # AES
cipher DES-EDE3-CBC # Triple-DES
注意:无论使用哪种密码还必须在客户端配置文件,我们将在稍后创建定义。
额外的密码也可用,如aes-256-cbc
。
第7步 - 启动OpenVPN
启用OpenVPN的开机和负载与加载service
通过添加以下行命令/etc/rc.conf
:
nano /etc/rc.conf
在文件的底部添加以下行:
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
OpenVPN服务器现在已完全配置,将在引导时加载。
使用以下命令手动启动服务器:
service openvpn start
预期输出:
add net 10.8.0.0: gateway 10.8.0.2
您的OpenVPN服务器现在正在运行。
第8步 - 配置客户端文件
在服务器上,我们会为每个客户端的配置文件。
首先,创建要在其中工作的文件夹:
mkdir -p /usr/local/etc/openvpn/clients/clientName
让clientName
我们之前设置而产生的证书的客户名称。 (这并不重要,你是如何设置的,因为它只是一个工作目录。)
移动到新目录:
cd /usr/local/etc/openvpn/clients/clientName/
拷贝中的客户端密钥和我们与生成的证书easy-rsa
和样本client.conf
文件。 确保您更换clientName
与先前的使用的名称.key
和.crt
文件:
cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.key ./
cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
cp /usr/local/etc/openvpn/ca.crt ./
再次, clientName
就是我们前面使用。
编辑client.conf
文件:
nano ./client.conf
更新remote
线,其中包括你的Droplet的IP地址(可以用获得ifconfig
)和端口号; 1194
是默认的:
remote your_server_ip 1194
注意:如果你修改了服务器的
cipher
或comp-lzo
设置,那么必须在反射client.conf
文件。 使用与以前相同的设置; 例如:cipher aes-256-cbc ;comp-lzo
此设置使用
aes-256-cbc
加密和禁用压缩。如果更改了
proto
在服务器配置线,那么这也需要在客户端中反映出来。确保这些线路匹配你先前设置; 如果您在服务器端没有更改任何内容,请不要在此处更改。
现在有点家务; 我们将在单个配置文件中嵌入证书和密钥。 这使得更容易转移到个别客户端。 或者,您可以分别将配置文件,密钥和两个证书文件下载到客户端。
在同一个client.conf
文件,注释掉证书和密钥的文件名:
;ca ca.crt
;cert client.crt
;key client.key
保存更改。
最后,我们需要嵌入ca.crt
, clientName .crt
和clientName .key
文件配置文件英寸 您可以复制并粘贴到使用内容cat
或nano
或任何你最舒服的,和适当的变量OpenVPN的,也可以使用如下所示的行脚本。
运行此脚本,并输入您clientName
提示时。 该脚本追加证书和密钥文件到client.conf
文件,用适当的变量名和换行符的OpenVPN的期待:
echo "Enter clientName:" && set CLIENTNAME = $< && printf "\n<ca>\n" >> ./client.conf && cat ./ca.crt >> ./client.conf && printf "</ca>\n" >> ./client.conf && printf "\n<cert>" >> ./client.conf && grep -v '^ ' ./$CLIENTNAME.crt | grep -v 'Certificate' >> ./client.conf && printf "</cert>\n" >> ./client.conf && printf "\n<key>\n" >> ./client.conf && cat ./$CLIENTNAME.key >> ./client.conf && printf "</key>\n" >> ./client.conf
确保你向右滚动,因为这是一个长命令。
看看成品client.conf
与文件nano
或cat
。 您应该看到在底部的文件中添加的密钥和证书。
你完成了! 所有这一切现在需要做的是在分发client.conf
文件到您的客户端。 大多数客户更愿意扩展.ovpn
到.conf
,所以你要重命名的文件在本地以my_digitalocean_vpn.ovpn
或类似的东西。
对每个客户端重复此部分。 默认情况下使用单独的证书,或者如果您愿意,可以在每个客户端上使用相同的客户端证书。
结论和客户端安装
你现在应该有一个工作的OpenVPN服务器!
下载您在上一步中创建的客户端配置文件( /usr/local/etc/openvpn/clients/ clientName /client.conf
)到本地机器 。 使用安全的方法来下载文件,如SCP或SFTP 。
同时在本地计算机上,安装一个OpenVPN客户端。 的Tunnelblick效果很好在Mac OS X和OpenVPN的有一个Windows客户端。
确保您的客户端配置文件按预期命名; 这通常是像一个名字my_digitalocean_vpn.ovpn
。
双击文件或将其移动到客户端的预期目录。
启动您的客户端并连接到相应的OpenVPN服务器。
为了确保您的VPN正常工作,使用一个IP地址检查,如http://www.whatismyip.com/ 。 您显示的IP应该与您的OpenVPN服务器的IP匹配。
恭喜! 您已连接到新的OpenVPN服务器。