介绍
OpenVPN是一个开源的虚拟私人网络(VPN)服务器/客户端应用程序,允许您安全地连接到虚拟网络(类似于LAN)。
本教程将解释如何在使用 IPv4 NAT 和路由的 FreeBSD 10.1 机器上安装和配置 OpenVPN 服务器。
到本教程结束时,你将运行自己的OpenVPN服务器,并准备下载一个客户端配置文件来连接到这个网络。
注意:从 2022 年 7 月 1 日开始,DigitalOcean 不再支持通过控制面板或 API 创建新的 FreeBSD Droplets. 但是,您仍然可以使用自定义图像创建 FreeBSD Droplets. 了解如何按照 我们的产品文档导入自定义图像到 DigitalOcean。
前提条件
- 一个 FreeBSD 10.1 服务器. 服务器的大小取决于你打算连接到 VPN 的客户端数量; 519 MB 对一些客户端来说是好的 * 根访问
在本教程中,我们使用的服务器指的是默认 freebsd 用户,然后访问 ** root** 壳:
1sudo tcsh
步骤 1 – 安装 OpenVPN
使用pkg
系统安装OpenVPN非常简单,只需执行以下命令来更新包列表并安装VPN软件:
1pkg update
2pkg install openvpn
这也应该安装easy-rsa
包,用于生成SSL密钥对。
步骤 2 – 配置 OpenVPN 服务器
对于本教程,我们将基于OpenVPN提供的样本配置文件,为OpenVPN创建配置文件夹:
1mkdir /usr/local/etc/openvpn
将示例 server.conf
文件复制到新目录中。
1cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf
安装nano
或您最喜欢的文本编辑器:
1pkg install nano
打开 config 文件来编辑:
1nano /usr/local/etc/openvpn/server.conf
注: OpenVPN 配置文件格式以半色符(;
)或哈希符(#
)为前缀,例如,半色符用于评论(禁用)配置选项,并用于评论。
如果您知道要更改的配置选项,您可以在此时这样做。
- 可选
port
:默认端口为1194,但您可以将其更改为任何您喜欢的 - 可选
proto
:选择 eithertcp
或udp
;默认是 fine user
和group
:将这些设置为nobody
通过不发表评论。
1user nobody
2group nobody
注意:每个配置只能同时运行一个端口和协议。
最后,请确保保存您的更改。
步骤 3 – 生成服务器证书和密钥
easy-rsa
使生成证件和密钥变得简单。
首先,将该程序复制到您的配置目录,因为您将修改值。
1cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
打开vars
文件来编辑:
1nano /usr/local/etc/openvpn/easy-rsa/vars
通过修改此行来更改密钥大小:
1export KEY_SIZE=2048
如今,标准是2048位密钥,尽管你也可以使用4096位密钥,这更安全,但会减慢谈判。
如果您喜欢,您也可以在此文件中设置默认证书和密钥值,以便您不必稍后输入它们。
由于我们使用的壳是tcsh
,所以出口
行需要被setenv
取代,这是在来源
之前用sed
完成的。
1cd /usr/local/etc/openvpn/easy-rsa/
更换线条:
1cat ./vars | sed -e 's/export /setenv /g' -e 's/=/ /g' | source /dev/stdin
从我们的 /usr/local/etc/openvpn/easy-rsa/
目录中,先清理目录,然后构建证书权威(CA)。
1./clean-all
2./build-ca
您将被要求设置 CA 选项. 请用您的详细信息填写这些:
1Country Name (2 letter code) [US]:GB
2State or Province Name (full name) [CA]:Somerset
3Locality Name (eg, city) [SanFrancisco]:Bath
4Organization Name (eg, company) [Fort-Funston]:Callum
5Organizational Unit Name (eg, section) [changeme]:VPN
6Common Name (eg, your name or your server's hostname) [changeme]:vpn.example.com
7Name [changeme]:Callum's VPN CA
8Email Address [[email protected]]:[email protected]
现在创建服务器密钥:
1./build-key-server server
再次,设置选项.您不需要密码或可选的公司名称。
输入y
来签名并承诺密钥:
1Country Name (2 letter code) [US]:GB
2State or Province Name (full name) [CA]:Somerset
3Locality Name (eg, city) [SanFrancisco]:Bath
4Organization Name (eg, company) [Fort-Funston]:Callum
5Organizational Unit Name (eg, section) [changeme]:VPN
6Common Name (eg, your name or your server's hostname) [server]:vpn.example.com
7Name [changeme]:Callum's VPN Server
8Email Address [[email protected]]:[email protected]
9
10Please enter the following 'extra' attributes
11to be sent with your certificate request
12A challenge password []: ENTER
13An optional company name []: ENTER
14
15Certificate is to be certified until Feb 5 14:40:15 2025 GMT (3650 days)
16Sign the certificate? [y/n]: y
17
181 out of 1 certificate requests certified, commit? [y/n] y
19Write out database with 1 new entries
20Data Base Updated
最后,必须生成 Diffie-Hellman 密钥,这可能需要一些时间,取决于密钥的大小:
1./build-dh
现在所有服务器密钥和证书都被生成,它们应该被复制到我们的OpenVPN配置目录。
1cd /usr/local/etc/openvpn/easy-rsa/keys/
2cp dh*.pem ca.crt server.crt server.key /usr/local/etc/openvpn/
你已经完成了服务器证书了!现在继续到客户端证书。
步骤 4 – 生成客户证书
每个客户端还需要一个证书和密钥,以便验证并连接到VPN. 请确保您位于/usr/local/etc/openvpn/easy-rsa/
目录中。
1cd /usr/local/etc/openvpn/easy-rsa/
執行下列命令,其中「clientName」是您想為該特定客戶端證書使用的名稱。
1./build-key clientName
您将被要求再次输入国家名称、城市名称等。该过程与服务器密钥生成相同。这将是客户端的信息,但这些都并不重要。
您不需要一个密码或公司名称. 输入y
来签署和承诺证书。
** 注意:** 对于每个客户端使用不同的证书是很好的做法,而 OpenVPN 默认情况下执行了此项操作,但是,如果需要的话,可以在 OpenVPN 配置中禁用此项操作(稍后解释)。
如果你使用的密钥大小不同于2048
,你需要修改OpenVPN配置以匹配你使用的密钥大小的文件名。
1ls /usr/local/etc/openvpn/easy-rsa/keys/dh*.pem
编辑server.conf
:
1nano /usr/local/etc/openvpn/server.conf
将dh dh2048.pem
代替为:
1dh dhSIZE.pem
如果您早些时候遵循了我们对 2048 位密钥的建议,则不需要进行任何更改。
重复此部分为您想要创建的每个单独的客户端证书。
第 5 步:配置 IPv4 NAT 路由
FreeBSD 包含「natd」作为「ipfw」防火墙的一部分,该防火墙允许 NAT 路由,可用于 OpenVPN。
1nano /etc/rc.conf
把这些内容放在底部:
1firewall_enable="YES"
2firewall_type="open"
3
4gateway_enable="YES"
5natd_enable="YES"
6natd_interface="vtnet0"
7natd_flags="-dynamic -m"
firewall_enable
允许用于natd
firewall_type="open' 的
ipfw` 防火墙,使防火墙允许作为 defaultgateway_enable
设置net.inet.ip.forwarding
到1
允许 IPv4 路由系统natd_enable
允许实际 NAT 路由器natd_interface
是向互联网的外部接口;natd_flags
使 NAT 动态,而m
保存端口号
现在重新启动您的服务器来加载ipfw
和natd
:
1reboot
重新启动后,请记住再次运行sudo tcsh
以成为 root ,如果您还没有。
步骤 6 - 配置 OpenVPN 路由配置和 DNS
默认情况下,OpenVPN没有配置来告诉客户端通过VPN路由互联网流量,我们将确保它通过OpenVPN路由流量,通过在/usr/local/etc/openvpn/server.conf
中放弃评论一些行:
1nano /usr/local/etc/openvpn/server.conf
查找和不评论这三条线:
1push "redirect-gateway def1 bypass-dhcp"
2
3push "dhcp-option DNS 208.67.222.222"
4push "dhcp-option DNS 208.67.220.220"
预设的 DNS 服务器适用于 OpenDNS,但您可以将其设置为您想要的任何 DNS (例如 Google DNS 具有8.8.8.8
和8.8.4.4
)。
** 可选设置:**
您还可以允许客户端通过不发表评论直接与对方的IP通信:
1client-to-client
如果如前所述,您想为多个客户端使用相同的密钥和证书(这是稍微不安全的),请放弃此行:
1duplicate-cn
可通过此行启用和禁用压缩:
1comp-lzo
您可以通过不评论这些行之一来手动设置加密器:
1cipher BF-CBC # Blowfish (default)
2cipher AES-128-CBC # AES
3cipher DES-EDE3-CBC # Triple-DES
** 注意:** 您使用的任何加密器都必须在我们稍后创建的客户端配置文件中定义。
其他加密码也可用,如aes-256-cbc
。
第7步:启动OpenVPN
允许 OpenVPN 通过添加以下行到 /etc/rc.conf 来启动和加载
服务`命令:
1nano /etc/rc.conf
将这些行添加到文件的底部:
1openvpn_enable="YES"
2openvpn_configfile="/usr/local/etc/openvpn/server.conf"
OpenVPN服务器现在已经完全配置,并将在启动时加载。
手动启动服务器:
1service openvpn start
预期产量:
1add net 10.8.0.0: gateway 10.8.0.2
您的 OpenVPN 服务器现在正在运行。
步骤 8 – 配置客户端文件
在 服务器 上,我们将为每个客户端创建配置文件。
首先,创建一个文件夹以在:
1mkdir -p /usr/local/etc/openvpn/clients/clientName
使clientName
成为我们之前在生成证书时设置的客户端名称(您如何设置此功能并不重要,因为它只是一个工作目录)。
转到新目录:
1cd /usr/local/etc/openvpn/clients/clientName/
将我们用easy-rsa
生成的客户端密钥和证书,以及样本client.conf
文件复制到客户端密钥和证书中,请确保您将clientName
替换为您以前使用的.key
和.crt
文件的名称:
1cp /usr/local/etc/openvpn/easy-rsa/keys/clientName.crt /usr/local/etc/openvpn/easy-rsa/keys/clientName.key ./
2cp /usr/local/share/examples/openvpn/sample-config-files/client.conf ./client.conf
3cp /usr/local/etc/openvpn/ca.crt ./
再一次,clientName
是我们以前使用的。
编辑client.conf
文件:
1nano ./client.conf
更新远程
行,以包含您的服务器的 IP 地址(可以通过ifconfig
获取)和端口号;1194
是默认值:
1remote your_server_ip 1194
注意: 如果您修改了服务器的cipher
或comp-lzo
设置,那么这必须反映在client.conf
文件中。 使用您之前所做的相同设置; 例如:
aes-256-cbc ;comp-lzo
此设置使用了
aes-256-cbc
加密并禁用了压缩。
现在有点家务;我们将将证书和密钥嵌入到单个配置文件中,这使其更容易转移到单个客户端。
在相同的「client.conf」文件中,评论证书和关键文件名称:
1;ca ca.crt
2;cert client.crt
3;key client.key
保存你的变化
最后,我们需要将ca.crt
,clientName.crt
和clientName.key
文件嵌入配置文件中,您可以使用cat
或nano
或您最舒适的任何内容来复制和粘贴内容,以及适当的变量为OpenVPN,或者您可以使用下面的单行脚本。
该脚本将您的证书和密钥文件附加到client.conf
文件中,并包含OpenVPN所期望的适当的变量名称和新闻通讯:
1echo "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
请确保您向右滚动,因为这是一个长的命令。
看看用nano
或cat
完成的client.conf
文件,你应该看到文件底部添加的密钥和证书。
您已经完成了! 现在需要做的就是将client.conf
文件分发给您的客户端. 大多数客户端更喜欢扩展到.ovpn
到.conf
,因此您将希望将文件本地重新命名为my_vpn.ovpn
或类似的东西。
默认情况下,使用单独的证书,或在每个客户端上使用相同的客户端证书,如果您喜欢的话。
结论和客户端设置
现在你应该有一个工作OpenVPN服务器!
将您在最后一步中创建的客户端配置文件(/usr/local/etc/openvpn/clients/clientName/client.conf
)下载到您的 local machine 。
在本地计算机上,安装一个OpenVPN客户端。 Tunnelblick在Mac OS X上运行得很好, OpenVPN有一个Windows客户端。
确保您的客户端配置文件按预期命名;这通常是一个名称,如my_vpn.ovpn
。
双击文件或将其移动到客户端的预期目录。
启动您的客户端并连接到相应的 OpenVPN 服务器。
要确保您的 VPN 工作,请使用 IP 地址检查器,例如 http://www.whatismyip.com/。
恭喜您!您已连接到您的新的 OpenVPN 服务器。