如今,OpenVPN不仅适用于传统的PC风格平台,也适用于运行Android或Apple iOS的智能手机和平板电脑,以及嵌入式硬件和家用路由器。对于Android,有两个应用程序:完全开源的Android OpenVPN和股份有限公司OpenVPN Technologies的官方应用程序Android OpenVPN Connect。我们将介绍这两个Android应用程序,因为使用它们有一些细微的差异。
在本章中,我们将首先探讨如何在Android和iOS上使用OpenVPN,以及如何最好地将智能手机使用集成到现有的OpenVPN设置中。
接下来,我们将探讨如何在小型硬件上使用OpenVPN,例如运行流行的基于DD-WRT Linux固件的家用路由器。我们将展示如何将家庭路由器同时用作OpenVPN客户端和OpenVPN服务器。
一个重要的注意事项是,Android和iOS都只支持tun模式。这是操作系统的限制,而不是所使用的OpenVPN应用程序的限制。幸运的是,大多数OpenVPN部署都是基于tun的,但不可能使用iOS或Android构建以太网风格的VPN或连接到桥接设置。
本章将涵盖以下主题:
OpenVPN for Android应用程序是完全开源的,基于最新的OpenVPN(Git master)代码分支。这意味着此版本的OpenVPN中有某些功能尚未进入OpenVPN的常规生产版本。
对于这个例子,我们在运行Android 4.3的三星Galaxy Note 10.1 2014平板电脑上安装了来自Google Play的OpenVPN For Android。
对于Android版OpenVPN和OpenVPN Connect,设置特殊的配置文件非常方便。然后,只需单击一下,即可将此配置文件导入OpenVPN应用程序。这适用于Android和iOS版本的应用程序,我们将在本章稍后看到。
小贴士:请注意,有两个独立的应用程序,都是由知名的OpenVPN开发人员编写的。OpenVPN Connect是股份有限公司OpenVPN技术公司的产品,由James Yonan撰写。Android版OpenVPN由Arne Schwabe编写。
要创建OpenVPN应用程序配置文件,我们将遵循以下步骤:
1、我们从 basic-udp-client.conf
配置文件开始,将所有对外部文件( tls-auth
、 ca
、 cert
和 key
)的引用替换为关键字 [inline]
。然后,我们通过分别复制和粘贴ta.key
、ca.crt
、client1.crt
和 client1.key
文件的内容,为这些文件添加内联blob。
注:由于需要将配置和证书放在一起,OpenVPN连接应用程序(甚至是iOS应用程序)都需要内联配置。这些应用程序支持多种OpenVPN配置,这可以防止需要唯一命名证书文件。
2、生成的配置文件如下:
xxxxxxxxxx
client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
remote-cert-tls server
tls-auth [inline] 1
ca [inline]
cert [inline]
key [inline]
<ca>
-----BEGIN CERTIFICATE-----
MIIEwTCCA6mgAwIBAgIJANKTMvCOv...
...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDeTCCAmECAQQwDQYJKoZIhvcNAQE...
...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3vzLCSqR3fQF...
...
-----END RSA PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
5f5b2bfff373961654089871b40a39eb
...
-----END OpenVPN Static key V1-----
</tls-auth>
3、将其保存为 basic-udp-inline.ovpn
。
4、通过传输或邮寄的方式,使文件在Android设备上可用。
注:如果您将配置文件上传到web服务器,文件类型和扩展名保持不变非常重要。如果平板电脑或手机将OpenVPN配置文件识别为纯文本文件,那么它通常会自动将其视为文本文件。在某些情况下,可能需要将 .ovpn
文件存储在ZIP文件(.zip)中,以避免这种文件类型错误。
5、在OpenVPN服务器端,使用 ipv6-udp-server.conf
配置文件启动服务器。
6、在本示例的其余部分,我们使用Android设备。
7、从设备上的Google Play下载并安装免费应用程序。
8、确保设备上也有 .ovpn
配置文件。
9、首次启动应用程序。将出现一个空白的配置文件列表。
10、单击屏幕底部的文件夹图标导入 .opvn
文件。浏览到.ovpn
文件的位置,选择它,然后单击Import。
11、返回OpenVPN应用程序主屏幕。在此屏幕上,您现在将看到可用配置文件的列表。
12、在Android设备上,单击配置文件 movpn-android-udp 一次以启动OpenVPN连接。OpenVPN for Android应用程序现在将尝试建立连接。如果日志记录设置为详细,那么主屏幕将以与桌面OpenVPN客户端非常相似的方式显示OpenVPN日志,没有时间戳。
13、OpenVPN将连接。成功建立连接后,左下角的 Vpn Status 将显示 Connected。
注:从日志文件中注意到,OpenVPN for Android也支持IPv6寻址。
14、接下来,我们验证VPN连接是否确实正常工作。
15、使用Android Ping应用程序,我们Ping VPN服务器IP地址。启动Ping应用程序并键入服务器的VPN地址。由于较新版本的Android不再支持ICMP ping消息,因此本例中使用了基于TCP的ping,目标端口为80。在VPN服务器上运行一个小型web服务器,并确保在尝试ping VPN服务器之前允许端口80上的TCP流量传入。
16、当然,您也可以使用从服务器到客户端VPN IP地址的常规ICMP ping来确保VPN连接正常工作:
xxxxxxxxxx
[server]$ ping 10.200.0.2
PING 10.200.0.2 (10.200.0.2) 56(84) bytes of data.
64 bytes from 10.200.0.2: icmp_seq=1 ttl=64 time=14.5 ms
64 bytes from 10.200.0.2: icmp_seq=2 ttl=64 time=13.2 ms
注:Android for OpenVPN应用程序可以在基于ARM内核或Intel Atom内核的智能手机和平板电脑上使用。下一节将讨论的OpenVPN Connect应用程序仅适用于基于ARM芯片的设备。
OpenVPN for Android应用程序还可以使用所谓的 PKCS#12 格式的外部公共证书/私钥对。
您可以使用以下命令将现有的公共证书(.crt
)和私钥(.key
)文件转换为PKCS#12(.p12
)文件:
xxxxxxxxxx
$ openssl pkcs12 -export -out client1.p12 \
-in client1.crt -inkey client1.key -CAfile movpn-ca.crt
Enter Export Password:
Verifying - Enter Export Password:
确保您也包含CA证书文件;否则,ca
文件必须包含在客户端配置中。
相应的客户端配置文件如下:
xxxxxxxxxx
client
proto udp
remote openvpnserver.example.com
port 1194
dev tun
nobind
remote-cert-tls server
tls-auth [inline] 1
pkcs12 client1.p12
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
5f5b2bfff373961654089871b40a39eb
...
-----END OpenVPN Static key V1-----
</tls-auth>
这种方法的优点是OpenVPN配置与客户端身份验证文件分开存储。缺点是这种方法不适用于OpenVPN Connect应用程序。
OpenVPN Connect应用程序是OpenVPN Technologies,股份有限公司的官方应用程序。我从Google Play下载并安装了免费应用程序,安装在与上一示例相同的三星Galaxy Note 10.1 2014平板电脑上。
OpenVPN Connect应用程序只能与使用 [inline]
证书和密钥对的配置文件一起使用。为此,我们使用在前面的示例中通过以下步骤创建的OpenVPN配置文件:
1、在VPN服务器端,我们使用标准的 ipv6-udp-server.conf
配置文件启动OpenVPN。
2、下载并安装后,启动应用程序并导入配置文件。
3、接下来,选择正确的配置文件并单击 Connect。
4、建立OpenVPN连接后,客户端将报告 Open VPN: Connected 。
注:请注意,适用于Android的OpenVPN Connect客户端也支持IPv6寻址。
5、验证是否可以从服务器访问VPN客户端,反之亦然,这是留给读者的练习。
对于这个例子,我在运行iOS 8.1.2的苹果iPad上以及运行iOS 8的iPhone上安装了来自苹果应用商店的OpenVPN Connect应用程序。
注:此版本的OpenVPN不是开源的。需要与苹果公司签订特别协议,才能深入了解苹果iOS网络堆栈,以便能够将OpenVPN移植到iOS。这就否定了对越狱设备的需求。
与Android版本类似,OpenVPN Connect应用程序最好与使用 [inline]
证书和密钥对的配置文件一起使用。因此,我们再次使用本章第一个示例中创建的OpenVPN配置文件。
在VPN服务器端,我们使用标准的 ipv6-udp-server.conf
配置文件启动OpenVPN。
在iOS上使用OpenVPN配置文件之前,我们必须将其传输到设备。这可以通过电子邮件或iTunes完成。最好确保您使用的是安全的传输方法。iTunes连接是安全的,但也可以使用TLS加密的电子邮件或Dropbox或Google Drive等其他传输方式。
以下是OpenVPN的示例,具体步骤如下:
1、传输 .ovpn
配置文件后,启动OpenVPN应用程序并向下滚动到 File Sharing 部分。点击 OpenVPN。
2、单击 Add… 按钮添加新配置文件。您还可以将OpenVPN配置(内联模式文件,通常扩展名为 .ovpn
)从文件夹或桌面拖放到此窗口中。
3、选择导入的配置文件,然后再次单击 Add 。
4、client.ovpn
文件现在可以作为OpenVPN Connect配置文件使用。
5、当我们在干净的iPhone或iPad上启动OpenVPN Connect应用程序时,我们将看到以下界面。
6、导入配置文件后,屏幕上会出现一个额外的部分,列出所有可用的配置文件。OpenVPN Connect用户界面起初可能有点棘手。
7、应用程序报告有可导入的配置文件,但我们可以看到警告消息,指出加载此配置文件时出错。唯一可用的选项是点击红色的X标记删除配置文件。导入正确的配置文件后,绿色的+按钮也可用。
8、点击+图标打开OpenVPN连接配置文件。
9、最后,使用Connection条目后面的滑块启动OpenVPN连接。
10、成功建立VPN连接后,我们可以看到OpenVPN Connect应用程序支持IPv4和IPv6。
11、您可以再次使用 Connection 滑块按钮停止VPN连接。
智能手机上的OpenVPN只能用作VPN客户端,这是智能手机的正常使用模式。对于Android,存在多个OpenVPN客户端应用程序。不同应用程序之间存在一些细微的差异,但它们都只支持tun模式设置,因为底层操作系统不支持tap设备。
在Android设备上使用哪个应用程序是一个难题。如果你同时使用iOS和Android设备,那么OpenVPN Connect应用程序是一个更容易的选择,因为用户界面在设备之间更加一致。如果您使用商业OpenVPN接入服务器,由于动态配置和一些服务器选项的差异,OpenVPN Connect是唯一的路由。如果你需要OpenVPN for Android应用程序的一些特殊功能,或者你想在非基于ARM的手机或平板电脑上使用OpenVPN,那么OpenVPN for安卓是合乎逻辑的选择。
从前面的示例中可以看出,使用OpenVPN的“app”版本需要进行一些更改。请注意,我们没有在服务器端进行任何更改来支持Android或iOS设备,但使用的服务器设置相对简单。正如我们在前面的例子中看到的,“应用程序”版本支持IPv4和IPv6,以及桌面OpenVPN软件的大多数其他功能。然而,特别是在涉及路由或文件共享时,生成一个单一的服务器端设置来支持所有平台可能会变得很棘手。如果需要客户端脚本来设置VPN连接,也无法运行客户端脚本。当然,可以使用受密码保护的密钥文件。
如果需要对已安装的“app”版本进行例外处理,那么建议设置一个单独的OpenVPN服务器来提供服务。因此,设置一个新的静态IP地址并连接。
在DD-WRT界面中,选择“big”版本再次升级固件,然后再次单击 Upgrade 。升级过程将再次需要几分钟,但之后DD-WRT接口应该再次可用。
您的路由器现在可以配置为OpenVPN客户端或OpenVPN服务器。
【本节以DD-WRT路由器为例,略】
在小型无线路由器上使用OpenVPN是可能的,但这在很大程度上取决于所使用的无线路由器的确切类型。在DD-WRT和OpenWRT网站上,列出了许多支持的无线路由器,但即使是其中的大多数也有缺点。需要8MB的最小闪存大小,并且还需要足够大的NVRAM空间。
然而,即使使用正确的硬件,由于此类设备的计算能力有限,OpenVPN在无线路由器上的性能也不会很好。对于想要将VPN设置到家庭地址的人来说,性能通常很好,除非你的家庭连接能够实现超过100 Mbps的上行速度。
【略】
OpenVPN现在可以在许多平台上使用,包括智能手机、平板电脑,甚至某些型号的(无线)路由器。这些设备的配置、支持和部署方法各不相同,在选择环境中支持的平台时应考虑这些差异。
在下一章中,我们将重点介绍OpenVPN配置和性能的故障排除。由于OpenVPN在智能手机和无线路由器上的配置和性能都可能很麻烦,因此学习故障排除技术将非常有用。