(2018年更新)这篇文章自2013年发表以来已进行了大幅更新。
简介
在本文中,我将向您展示如何设置一个基于linux的OpenVPN服务器。一旦这个服务器启动并运行,我将向您展示如何设置您的iOS设备,例如您的iPhone或iPad,以便它们可以连接到您的新VPN服务器。
这项工作的目标是通过VPN连接封装所有的互联网流量,这样无论你在哪里,都没有人能监控你访问的网站和你做的事情。如果你必须通过不受信任的网络资源(如公共Wi-Fi)访问互联网,这是理想的。
一些典型的场景是:
- 你可以直接在基于linux的家用路由器上运行OpenVPN服务
- 你在家用路由器后面的设备上使用端口转发运行OpenVPN服务(比如树莓派)
- 在众多云服务提供商之一托管的VPS上运行OpenVPN服务
您的iOS设备将运行OpenVPN连接这是一款可以在应用商店中找到的免费应用程序。
其他平台的注意事项:虽然本教程的重点是iOS设备,但您新的基于openvpn的VPN服务器将支持任何客户端操作系统,可能是Windows、MacOS、Android或Linux。这些其他客户机的配置超出了本文的范围。
本教程是基于OpenVPN这是一个开源产品。OpenVPN背后的公司也提供VPN服务按月收费。如果你发现设置自己的服务器太麻烦,你可以看看他们的服务.请注意,我从来没有使用过这项服务,不能担保它。
这是一个简短的概述,为了有一个完整的功能设置,你需要采取的所有步骤,包括配置客户端:
- 安装Linux服务器(超出范围)
- 安装OpenVPN软件
- 设置证书颁发机构
- 生成服务器证书
- 配置OpenVPN服务端
- 在Linux服务器上配置防火墙
- 为每个客户端(iPhone、iPad等)生成证书
- 将客户端配置复制到您的设备
- 测试客户端
工作原理
OpenVPN是基于ssl的VPN解决方案。基于ssl的vpn非常可靠,因为如果您正确设置它,只要TCP-port 443可访问,您就永远不会被任何防火墙阻止。默认情况下,OpenVPN使用UDP作为端口1194的传输,但是您可以切换到TCP-port 443,以增加您的流量不会被阻塞的机会,但代价是稍微多占用一点带宽。
身份验证
身份验证基于公钥/私钥加密。OpenVPN服务器类似于HTTPS服务器。最大的区别是你的设备不使用用户名/密码组合进行身份验证,而是使用证书。此证书存储在客户端配置文件中。
因此,在配置和启动OpenVPN服务之前,您需要设置一个证书颁发机构(CA)。通过CA,您可以为OpenVPN服务器创建服务器证书,然后生成所有客户端证书。
OpenVPN安装
默认情况下,OpenVPN可以在大多数常见的Linux发行版上使用。安装openvpn只需要apt-get安装任何Debian或Ubuntu版本的openvpn。
或者看一看在这里
我从来没有试过,但是你可以试着看一下OpenVPN安装脚本
这个脚本似乎自动化了很多步骤,比如防火墙配置、证书生成等。
提示
这超出了本教程的范围,但是您应该确保保留您的OpenVPN软件最新的,以防将来发现OpenVPN存在安全漏洞。
安全
我在一个较旧的系统上创建本教程,其中证书颁发机构和OpenVPN服务器本身的默认配置设置都不太安全。我在本教程中使用的设置是基于中的步骤这个博客.
明显的改进:
- AES256加密
- 2048位密钥大于1024位密钥
- SHA256 / sha1/md5
性能
我做了一些性能测试,每个iOS客户端大约有40-50 mb。我认为瓶颈在于我的旧HP Microserver N40L,它的CPU相对较弱。
交通影响
如果您想限制允许客户端使用多少带宽,我建议使用本教程.我已经试过了,效果很好。
创建证书颁发机构。
对于unbuntu:安装“easy-rsa”软件包,并使用“make-cadir”命令代替下面的安装说明。
我假设您将在/etc/openvpn.中设置您的OpenVPN配置在设置服务器配置之前,您需要创建一个证书颁发机构。我使用/etc/openvpn/easy-rsa文件夹作为CA的位置。
mkdir /etc/openvpn/easy-rsa
我们首先将所有这些文件复制到这个新目录:
cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0* /etc/openvpn/easy-rsa
请注意,根据您的Linux风格,这些文件可能在其他路径中找到。
接下来,对目标目录进行cd。
cd /etc/openvpn/easy-rsa
现在,用你最喜欢的文本编辑器打开“vars”文件。下面的说明直接来自OpenVPN howto.
您应该将所有值更改为适用于您的值(显然)。
export KEY_COUNTRY="US" export KEY_PROVINCE="California" export KEY_CITY="San francisco " export KEY_ORG="My Company" export KEY_EMAIL="my@mail.com" export KEY_CN=server export KEY_NAME=server export KEY_OU=home
修改KEY_SIZE参数:
出口KEY_SIZE = 2048
您希望您的证书有效期是多久(10年?)
export CA_EXPIRE=3650 export KEY_EXPIRE=3650
然后我不得不复制openssl-1.0.0.cnf到openssl.cnf,因为“vars”脚本抱怨它找不到后一个文件。
Cp openssl-1.0.0.cnf openssl.cnf
请注意我在一个较旧的Linux安装上执行了这些步骤。我不得不编辑这个文件/etc/openvpn/easy-rsa/pkitool并改变了所有的发生“sha1”来“sha256”.
现在我们“源”var并运行两个额外的命令来实际生成证书颁发机构。注意./vars前面的点。
. ./vars ./clean-all ./build-ca ./build-dh .
您必须确认这些值或在必要时更改它们。
现在我们有了一个证书颁发机构,可以创建由该颁发机构签名的新证书。
警告:对所有的关键文件要格外小心,它们应该保密。
我建议执行以下命令:
chown -R root:root /etc/openvpn chmod -R 700 /etc/openvpn . chown -R root
缺省情况下,OpenVPN以root用户运行。使用这些命令,只有根用户才能访问密钥。如果不以根用户身份运行OpenVPN,则必须为第一个命令选择适当的用户。另请参阅这篇文章.
创建服务器证书
我们创建服务器证书:
/ build-key-server服务器。
这是由你来提出一个替代“服务器”。这是存储密钥文件和证书的文件名。
生成的所有文件都可以在“/etc/openvpn/easy-rsa/keys”目录下找到。这只是一个包含服务器和客户端密钥的平面文件夹。
创建可选TLS-AUTH证书
这一步是可选的,但它不需要花费太多精力,而且它似乎添加了一个额外的安全层,而且没有显著的成本。在此步骤中,我们创建一个附加的密钥,该密钥与服务器和客户端共享。
以下步骤是基于这篇文章(使用-tls-auth)。
CD /etc/openvpn/easy-rsa/keys openvpn——genkey——secret ta.key
当我们要创建服务器配置时,我们将引用这个密钥文件。
创建客户端证书
现在我们有了一个服务器证书,我们将为iPhone(或任何其他iOS设备)创建一个证书。
iphone。/建立关键
使用默认值回答问题。别忘了回答这些问题:
在证书上签字?[y/n]:y 1 / 1的证书请求已认证,提交?[y / n] y
现在,我们已经准备好了开始创建OpenVPN配置。我们必须为服务器和客户机创建一个配置。这些配置基于可以在/usr/share/doc/openvpn/examples/中找到的示例。
服务器配置示例
这是我的服务器配置,是可操作的。保存在“/etc/openvpn/openvpn.conf”目录下
dev tun2 tls-server cipher AES-256-CBC auth SHA256 remote-cert-tls client dh easy-rsa/keys/dh2048pem ca easy-rsa/keys/ca。CRT cert easy-rsa/keys/server。CRT key easy-rsa/keys/server。密钥tls-auth easy-rsa/keys/ta。key server 10.0.0.0 255.255.255.0 log/ var/log/openvpn.log script-security 2 route-up "/sbin/ifconfig tun2 up" port 443 proto tcp-server push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8"
我相信您应该能够按原样使用这个配置。根据您自己网络中的本地ip地址,您可能必须更改服务器部分。
我使用TCP-port 443,因为这个目标端口几乎从未被阻塞,因为阻塞这个端口会破坏大多数互联网连接。(缺点是我不能再在这个ip地址上托管任何安全的网站)。
OpenVPN服务将在“服务器”部分配置的地址范围内为您的客户端提供一个ip地址。
如果需要更改任何参数,然后启动或重新启动OpenVPN服务:
/etc/init.d / openvpn重启
在“/var/log/openvpn.log”中确认服务器运行正常
如果你想使用VPN来浏览互联网,我们仍然需要配置一个基本的防火墙设置。
我假设您已经运行了某种基于iptables的防火墙。配置Linux防火墙超出了本文的范围。我将只讨论为使OpenVPN服务正常运行可能需要进行的更改。
您需要在连接到internet的接口上接受到TCP端口443的流量。
iptables -A INPUT -p tcp -m tcp——dport 443 -j ACCEPT
如果您的OpenVPN服务器位于路由器/防火墙之后,则需要在该路由器/防火墙上配置端口转发。如何做到这一点超出了本文的范围,因为不同的设备有不同的方法。
假设您将-例如-使用10.0.0.0/24网络用于VPN客户端(例如您的iPhone),您还必须创建一个NAT规则,以便VPN客户端可以使用Linux服务器的ip地址访问Internet。
iptables -t nat -A POSTROUTING -s "10.0.0.0/24" -o "eth0" -j MASQUERADE
请注意,必须将eth0更改为连接到internet的适当接口的名称。请根据实际情况修改ip地址范围。它不应该与您现有的网络冲突。
iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT
请注意,我没有测试这些规则,因为我有不同的设置。但这就足够了。并确保像这样启用转发:
Echo 1 > /proc/sys/net/ipv4/ip_forward
客户端配置示例
大多数OpenVPN客户端可以自动导入文件扩展名为.ovpn的文件。典型的配置文件类似于'iphone.ovpn'。
警告:.ovpn文件将包含用于iPhone/iPad对OpenVPN服务器进行身份验证的证书。在存放这个文件的地方要非常小心。任何能够获得该文件副本的人都将能够连接到您的VPN服务器。
这是配置文件示例,但我们不打算手工创建它,这太麻烦了。
从这个例子中,你会注意到.ovpn文件包含客户端配置和所有必需的证书:
- CA根证书
- 用于验证服务器的服务器证书
- 客户端私有证书
- TLS-AUTH证书(可选的额外安全措施)
使用脚本创建客户端配置文件(.ovpn)
您可以手动创建客户端配置文件,但这需要大量的工作。因为您需要将所有证书附加到一个文件中,该文件还包含配置设置。
因此,我们将使用一个脚本来设置客户机配置。
首先,我们要创建一个文件夹,我们的客户端配置文件将存储在其中。
Mkdir /etc/openvpn/clientconfig chmod 700 /etc/openvpn/clientconfig . Mkdir /etc/openvpn/clientconfig
现在我们将下载脚本和附带的配置模板文件。注意,链接可以自动换行。
CD /etc/openvpn wget https://raw.githubusercontent.com/欧宝体育登陆首页官网下载louwrentius/openvpntutorial/master/create-client-config.sh wget https://raw.githubusercontent.com/louwrentius/openvpntutorial/master/client-config-template chmod +x create-client-config.sh
请注意,在生成配置文件之前,您首先需要为您的设备创建证书。如果需要,请回到这一步。
还要注意您为设备使用的名称。您可以查看/etc/openvpn/easy-rsa/keys以查看设备是如何调用的。
现在,编辑这个client-config-template并在需要的地方更改适当的值。你可能只需要改变第一行:
remote <您的服务器DNS地址或IP地址>
现在您可以运行脚本并为您的设备生成配置文件。
运行此脚本时,将生成一个配置文件,并将其放置在/etc/openvpn/clientconfig文件夹中。
该脚本只是将客户端配置模板和所有必需的证书放在一个文件中。下面是它的用法:
iPhone。/ create-client-config.sh
运行脚本时,你会注意到一些输出:
user@server:/etc/openvpn# ./create-client-config.sh iphone Client's cert found: /etc/openvpn/easy-rsa/keys/iphone客户端私钥found: /etc/openvpn/easy-rsa/keys/iphone.key CA public key: /etc/openvpn/easy-rsa/keys/ca. key/etc/openvpn/easy-rsa/keys/ta. crt tls-auth Private Key found: /etc/openvpn/easy-rsa/keys/ta. crt主要完成了!/etc/openvpn/clientconfig / iphone。ovpn创建成功。
你现在应该会找到一个名为“iphone”的文件。/etc/openvpn/clientconfig目录下的Ovpn。
我们快到了。我们只需要把这个文件复制到你的iOS设备上。
你有三个选择:
- 使用iCloud Drive
- 使用iTunes
- 使用电子邮件(显然不安全,没有讨论过)
用iCloud Drive设置你的iPhone或iPad
- 首先安装OpenVPN连接申请,如果你还没有这样做。
- 将.ovpn文件从您的OpenVPN服务器复制到您的iCloud Drive。
- 打开你的设备,使用“文件”浏览器在你的iCloud驱动器中导航到你刚刚复制的。ovpn文件。
- 点击文件下载并打开。
- 现在轮到棘手的部分了:按下share符号
在iOS设备上使用OpenVPN应用程序打开文件:
当你遇到“OpenVPN想要添加VPN配置”的问题时,选择“允许”。
继续“测试您的iOS设备”步骤。
如果OpenVPN Connect客户端没有导入该文件,请将应用程序从设备上移除,然后重新安装。(这是我必须在iPad上做的事情)。
在iPhone或iPad上安装iTunes
如果您使用iCloud Drive将.ovpn配置文件复制到您的设备,则可以跳过此步骤。
您需要在您的iOS设备上获取以下文件:
iphone.ovpn
将此文件从OpenVPN服务器复制到运行iTunes的计算机。然后用数据线将你的设备连接到iTunes上。
- 打开iTunes
- 在右上方选择您的设备
- 进入应用程序选项卡
- 滚动到文件共享部分
- 选择OpenVPN应用程序
- 添加iphone.ovpn
- 同步设备
测试你的iOS设备
打开OpenVPN客户端。您将看到一条通知,提示已导入新配置,您需要接受该配置。
由于它可能不能立即工作,因此需要监视服务器上的/var/log/openvpn.log以观察任何错误。
现在试着去联系和享受。
结论
您应该能够一直启用VPN,因为电池使用开销应该是最小的。如果您在家中无法连接到您的VPN,则需要检查您的防火墙设置。
更新20130123与keepalive选项。更新20130801与额外的服务器推送选项流量重定向和DNS配置更新20180618作为原始过时文章的实质性重写。