在树莓派上建立VPN(一):如何以及为何建立一个VPN服务器?
不要相信任何人,自己建立一个VPN服务器来加密Web数据从而躲过他人的窥视
虽然免费、未加密的无线AP遍地都是,但是你不应该连接这些AP来登陆你的网银账户,除非你对他人的窥视毫不在意。那么对此的解决方案是什么呢?一个虚拟专用网,也就是VPN(virtual private network)。
一个VPN可以使你的私有网络拓展至公共场所,因此即使你连接着星巴克的 Wi-Fi,你的网络浏览仍然保持着安全的加密。
有很多方法来建立VPN,包括免费以及付费的服务,但是每个解决方案都有其的优点以及缺点,这取决于VPN服务商运作的方式和服务商提供的VPN选项。
最简单及最方便的保证数据安全的方法就是完全抛弃公共Wi-Fi。但是这个解决方案对于我来说有点极端了,一部分原因是在家里建立一个VPN服务器相对容易以及划算,你只需要一个便宜的($35)小型的树莓派。
我的树莓派与智能手机差不多大小,并且它拥有一个VPN服务器所有应有的功能。这意味着不管我在哪里,我可以通过安全的网络来连接在家里的电脑和家里的内网来访问共享的文件以及媒体。这个服务器在我最近去波士顿的旅途中使生活变得十分美好,在旅途中我仍然可以观看储存在家里台式机上的视频。
在这部分文章中,说实话我希望直接带给你们一个设置树莓派VPN的教程。问题是这个优秀教程并不存在,至少目前没有一个适合大部分电脑用户的优秀教程。虽然有无数关于如何搭建树莓派VPN的教程,但极少的教程会解释这么做的目的。
我阅读了不少教程,并把好的部分整合入了这半篇教程中,来教授读者如何搭建树莓派VPN服务器。这个教程甚至连我都能理解,并完成如何搭建和为何搭建的学习。最重要的是,我认为Eric Jodoin的VPN教程更适合那些专家,但它使我的大脑直接宕机了...
那么跟随我钻进加密法的兔子洞并且开始学习吧,无论你有多么多疑,提出了创造VPNs的那个人更正是如此。
材料
硬件
Raspberry Pi Model B:以及使其工作所需要的所有硬件-一个常规电源供电器和一个放置的小盒子。小盒子可以避免树莓派硬件意外短路而损坏-这个盒子甚至可以是一个自己折叠的纸板箱。
SD card:我建议8GB及以上的容量,只是来保证你有必要的储存空间。像所有树莓派项目一样,SD卡上应该要预装上NOOBS。
五类网线:这根网线将连接树莓派的以太网接口和你的路由器的以太网接口。
软件
Open VPN:这是一个开源VPN服务软件,我们今天就要安装它。
开始项目之前的准备
1) 你需要准备好NOOBS并且安装完Raspbian。我在"鱼缸管理"项目中对此做过一个一步步的教程。因此你也可以在那里查看。
2) 你需要为树莓派设置一个在你家内网中的静态IP地址。这一步骤取决于你路由器的型号,因此你可能需要阅读你的路由器的说明书来完成这一步。如果你还没有完成这一步,你可以参照ReadWrite的教程。
3) 你需要启用SSH。我们需要通过SSH与树莓派进行连接,这是一个使我们能够从另一台电脑连接树莓派的工具。通过这种方法,我们在这个项目中不需要再为树莓派单独设置一个显示屏以及无线键盘。再提一下,看看ReadWrite的教程。
4) 你需要将路由器的1194端口映射至树莓派的内网IP地址采用UDP协议,完成这一步的方法也决定于你路由器的型号,所以阅读路由器说明书吧。如果你想用另一个端口或TCP协议,没问题,只要将此教程中提及"UDP"的地方换为"TCP",1194端口改为你需要的端口就行了。想必你也猜到了,ReadWrite为此也写了一篇教程。
你可以从上文看出,我们现在在建立一些树莓派的基础概念,这也是为什么在树莓派上搭建VPN对初学者的第一个项目来说并不是适合。
简单的一些警告
我曾经喜欢直接拷贝网上教程中的代码,但是当我自己测试这篇教程时,我发现直接的复制粘贴代码会导致一些错误,原因是复制粘贴中出现的空行以及格式变化。如果你发现在此篇教程在实际操作时出现了一些问题,我的建议是先手动输入代码试试!
First Steps
1) 启动并修改树莓派的密码。如果你还在使用树莓派的默认用户名(pi)和密码(respberry),那么接下来的安全教程就完全没有什么意义了。
打开一个terminal/PuTTY 窗口输入:
- sudo passwd
将用户名以及密码修改地既好记并难猜(微软对此有一些建议),不然的话为什么要自找麻烦搭建一个私人网络呢?
2) 为了树莓派的安全来进行软件包的升级。输入如下两条命令:
- sudo apt-get update
- sudo apt-get upgrade
这应该不会花太多时间,而且为我们排除了之后可能会产生的问题。
3) 接下来我们需要这个开源软件(OpenVPN)了。输入:
- sudo apt-get install openvpn
树莓派会询问确认,因为这用掉一点点储存空间。但是由于我们已经准备了一张8GB及以上的SD卡,我们对此完全没问题。
生成密钥
4) 你当然不想让任何发现你的VPN的人就可以连接,因此我们会为这个安全的地址准备一个来验证身份的密钥。这就像为你的家门准备一把锁一样。
OpenVPN自带了Easy_RSA,一个轻量并容易的使用RSA加密方法的包。发明于1977年,RSA是第一个沿用至今仍旧可用的加密系统。加密的密钥是公开的,解密的密钥是保密的。如果你听说过比特币的工作原理,这些对你来说应该十分熟悉。
通过使用Easy_RSA,你可以使用软件带有的算法来生成一个独一无二的密钥。
首先获得树莓派的系统权限,就是将命令提示符中的"pi@raspberrypi"转换成"root@raspberrypi"。
- sudo -s
这句命令在现有的终端中再次创建了一个拥有root权限的终端实例。我们需要获得root权限的原因是,如果我们没有root权限,树莓派将不会允许我们创建密钥。
接下来,输入:
- cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/etc/openvpn/easy-rsa
在这句命令中,"cp"代表"复制","r"代表递归。这说明我们让电脑执行:复制这个目录以及此目录下的所有文件结构及文件。
在/2.0和/etc中间的空格表示我们将第一个目录地址的文件(一个实例文件)拷贝至第二个目录地址,就是你让OpenVPN寻找密钥的地址。
- cd /etc/openvpn/easy-rsa
5) 接下来,我们需要"cd",改变所在目录(change directory),来放置我们生成的Easy_RSA文件。一旦完成这步,我们需要打开文件/etc/openvpn/easy-rsa/vars来编辑。我们可以使用nano: nano /etc/openvpn/easy-rsa/vars,由于我们已经在此目录下了,我们可以使用简写:
- nano vars
Nano是Raspbian中内置的文件编辑工具,当然也有其他工具提供给屌丝们,不过我们���在此教程中只使用nano。
现在,将你的 EASY_RSA 变量改为:
- export EASY_RSA="/etc/openvpn/easy-rsa"
对我的环境来说,这是在第13行。
为什么要修改这个变量呢?其实这是你在回答计算机的问题"你想让文件生成在哪里?"。在这个情况下,我们想要将其生成在我们保存key的同一个目录,在这里是easy-rsa文件树的顶层。
在vars文件中我们还可以做一件事,如果你对黑衣众们阅读你的邮箱这件事十分在意的话,你可以将加密方法从1024-bit改至2048-bit。在vars文件中,它明显的指出,"偏执狂请将此改为2048!"。
但是因为这个方法大大增长了生成密钥的时间,我们不会在这个教程中使用它。保持下面这个样子:
- export KEY_SIZE=1024
按下Control+X来保存修改并退出nano。