使用树莓派Raspberry Pi搭建VPN并实现远程访问

树莓派英语:Raspberry Pi),是一款基于Linux的单板机电脑。它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件促进学校的基本计算机科学教育。

基本上,我们可以把树莓派理解为一个价格非常便宜(最贵也只需要35美元,大约200多人民币)的Linux电脑。只要配上一张Micro SD卡作为储存介质,我们就可以搭建起一台基于Raspbian系统(或其他系统)的个人计算机。

本教程基于开源虚拟专用网络软件包OpenVPN,使用价格仅10美元的树莓派Zero W在自己的家里来搭建一个属于自己的VPN网络,并利用此VPN实现对家庭网络的访问。如果你的家里有连接到家庭局域网的智能设备,那你就可以在任何有互联网的地方使用这个VPN来实现对该智能设备的访问和控制,而不必借助该智能设备供应商提供的云服务。

你也可以使用基于思科服务器的香港威伯斯云提供的免费VPN服务访问境外网站,中国大陆地区可以合法下载使用。扫描下面的二维码可以免费领取120分钟使用时间。

材料清单

  1. 树莓派Raspberry Pi Zero W (10美元)
  2. 树莓派电源
  3. Micro-SD储存卡(至少Class4级,4G容量),可能需要Micro-SD转换器
  4. 树莓派Zero W外壳
  5. USB有线鼠标和键盘*
  6. Micro USB集线器*
  7. Micro HDMI – HDMI 转接器* + 支持HDMI视频输入的显示器* + 一根HDMI连接线
  8. 一台连接到家庭局域网的电脑

Note: 打*号的是初始配置的必要材料,树莓派配置好以后可以不再需要。

材料说明

1. 树莓派Raspberry Pi Zero W

任何第三代的树莓派都可以用本教程的方式来搭建一个VPN服务器。而我选择Zero W的原因主要是以下几点:

  • 价格便宜(10美元),比B型树莓派3(35美元)价格低了许多
  • 支持Wifi,省却了树莓派Zero连接网线的麻烦
  • 体积轻便,不占空间(装上外壳也大概只有一只打火机那么大)

2. 树莓派电源

树莓派利用Micro USB接口实现5V直流电源供电。也可以利用GPIO口供电,但是比较麻烦。市面上可以买到直接插在家用电源插座上的直流电源供应器。树莓派官方推出的电源可以点击这里。你甚至可以使用自己的移动电源跟手机充电线来给自己的树莓派供电,当然,前提是你的移动电源可以达到5V, 2A的稳定电流输出。Zero W正常情况的功率只有0.5W,以现在市面上可以带上国内航班充电宝最大容量的100Wh计算,理想情况下一台充电宝可以让我们的树莓派Zero W工作200小时,约合一周多。(不过这个充电宝的真实容量嘛……还是推荐大家使用家用电源插座来给树莓派供电)。

3. Micro-SD 储存卡

树莓派官方推荐使用8G大小的Micro-SD储存卡,且卡的等级需要至少达到class 4。对于本教程的VPN服务而言,一张4G的储存卡就足够了,因为我们不需要图形界面,使用的Raspbian Lite系统,系统所需空间就大大缩小了。当然用一张8G卡安装图形界面的Raspbian系统会更容易操作。如果你的电脑上读卡器只有SD口的话,你还需要一个Micro-SD转换器,如下图所示。

4. Zero W外壳

起到保护作用,建议还是使用上。

5. USB有线鼠标和键盘*

在最初配置树莓派Zero W使用。

6. Micro USB集线器*

树莓派Zero系列除了电源外就只有一个micro USB接口。使用Micro USB hub用来连接有线鼠标和键盘。配置完成后可以使用其他电脑登录树莓派,如果是Zero W的话也可以使用蓝牙鼠标跟键盘。如果你选择了B型树莓派3,板子上会有4个USB2.0接口,足够我们的日常使用,不需要再使用USB集线器。

7. Micro HDMI – HDMI 转接器* + 支持HDMI视频输入的显示器* + 一根HDMI连接线

在最初配置树莓派的时候需要用上。鉴于本教程中我们给树莓派安装的是没有图形界面的Raspbian Lite系统,配置完成后一般我们不再需要用上HDMI转换器和显示器。当然你也可以选择安装界面更友好更易于操作的Raspbian系统。

材料购买

除了欧时电子(RS)和e络盟(Element14)以外,目前树莓派基金会在国内没有代理经销商。建议大家从正规渠道,也就是欧时电子以及e络盟官网购买树莓派。

至于包括电源、Micro-SD卡,外壳等树莓派配件,淘宝上也可以很便宜地买到。

配置树莓派

Micro-SD卡

在你的电脑上,插入Micro-SD卡,格式化Micro-SD卡后确认该卡至少有4G空间,并为FAT32的文件格式。在树莓派Raspberry官网上,下载系统安装器NOOBS Lite版本。解压后将NOOBS Lite的文件内容拷贝到Micro-SD卡上,在将Micro-SD插到树莓派Zero W上。

(本教程默认读者在配置树莓派的时候有无线网连接。如果只有有线网络的话,需要一个Ethernet转USB的转换器。如果根本没有互联网的话,那就算了吧……)

组装

  1. 将树莓派Zero W安装到Zero外壳里。
  2. 连接上HDMI转接器,HDMI线和显示器。
  3. 连接USB集线器,连接有线鼠标和键盘
  4. 连接电源到树莓派的Micro USB电源接口,但暂时不要把插头插到插座上

安装系统

将树莓派电源插到插座上后,等待片刻后系统安装器NOOBS Lite会自动运行,出现如下图所示的界面:

按下键盘W键或用鼠标点击屏幕上Wifi Network图标,进入无线网设置界面。连接上你的家庭无线网后,勾且仅勾选Raspbian Lite。在窗口下部可以看到安装该系统需要占用多少Micro-SD卡的空间,以及剩余可用的空间。点击Install,进入安装界面,等待安装完成。

安装过程中会询问树莓派的用户名和密码。默认的用户名是pi,密码是raspberry,全部小写。到此为止我们已经不再需要鼠标了。

配置

安装完成后,在命令行中输入

$sudo raspi-config

再敲回车键,进入树莓派配置页面,如下图所示。

用键盘上下方向键选择第5项 Interfacing Options,将所有交互界面设置为Enable,尤其是SSH

你还可以在raspi-config界面里修改其他的参数,比如密码、时区等等。

按下Finish退出以后,在命令行中输入

hostname -I

再敲回车键会显示你的树莓派的IP地址和MAC地址。记录下你的树莓派的IP地址。通常是192.168.1.XX。你也可以在电脑浏览器中输入192.168.1.1(通常是这个IP地址),进入你的无线路由器管理页面,查看分配给树莓派的IP地址。

到此为止,启用SSH服务后,我们也不需要键盘和显示器了。

SSH连接

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。使用频率最高的场合类Unix系统,但是Windows操作系统也能有限度地使用SSH。2015年,微软宣布将在未来的操作系统中提供原生SSH协议支持

在电脑上利用SSH连接树莓派,需要电脑和树莓派在同一网络中,外网是无法访问内网的树莓派的。(这也是我们配置VPN的原因,可以让我们在任意地点都可以访问到家中的网络)

Windows电脑连接SSH

在Windows电脑上,下载PuTTY,安装后选择SSH连接。在HostName里输入你的树莓派的IP地址,也就是192.168.1.XX。端口号默认为22(注意此处的端口号跟你之前设置的VPN服务器端口号是两回事。)

点击下方的Open键就可以用SSH连接到你的树莓派了。

Mac 或Linux电脑连接SSH

简单了,打开终端.app或者命令提示符就好。

以Mac上的终端.app为例,打开终端,在命令行输入

ssh pi@192.168.1.XX

其中192.168.1.XX是你的树莓派地址。按下回车,提示输入密码。输入密码后按下回车,我们就成功进入了树莓派。如果跳出安全提示,输入y按下回车即可。如图所示。

搭建VPN

SSH连接

在电脑上打开命令提示符。在Windows电脑上是cmd.exe,当然你也可以使用PuTTY,在Mac电脑上是终端.app。本教程以Mac为例演示。

在终端窗口输入

ssh pi@192.168.1.XX

其中,XX是你的树莓派在家庭网络中的IP地址。然后按下回车键。再输入密码按下回车后即可进入到树莓派Zero W的系统中,如下图所示。Pi0W是我给我的树莓派Zero W在家庭网络上取的名字。

系统升级

进入树莓派的Raspbian Lite系统后,在命令行输入

sudo apt-get update

再按下回车,等待系统包列表更新完成。

接下来在命令行输入

sudo apt-get dist-upgrade

再按下回车,升级系统包到最新版本,等待升级完成。命令行会提示系统升级所需要占用的空间,询问是否继续升级。按下Y键再按回车即可。

系统升级可能需要花一段时间,在中国国内可能还要花更久的时间,需要耐心等待。

PiVPN

PiVPN是一个专门为树莓派设计的OpenVPN平台。我们可以在树莓派上访问PiVPN来直接将OpenVPN安装到自己的树莓派上。

SSH登陆树莓派并且完成了系统升级后,在命令行输入

curl -L https://install.pivpn.io | bash

按下回车,启动PiVPN的安装。等待一段时间后会出现如下界面。按下回车确认。

注意,在PiVPN的安装过程中,空格键用于选择,回车键用于确认当前选择并进入下一步。

接下来在网络界面选择里,选择你的网络(wifi或者Ethernet,根据树莓派联网的实际情况)。

下一步安装程序会询问你是否应用静态的IP地址。这个IP地址是你的路由器分配给树莓派使用的IP地址,通常不会改变,所以在这里选择Yes就好。

现在安装程序会要求你进行VPN服务器的参数设置。首先它会询问你,使用树莓派上的哪个用户来创建VPN服务器。通常选择pi用户就好。

接下来安装程序会询问你是否开启自动安全更新。鉴于我们的VPN服务器至少会暴露一个端口到互联网上,所以及时的安全更新还是很重要的。树莓派并不会定期重启,所以要应用最新的安全更新,我们需要不定时的手动重启树莓派。

随后需要我们选择网络协议。选择UDP就好。

接下来这一步很重要,我们要选择VPN的端口。默认的端口号是1194。但是出于网络安全的考虑,强烈建议你把端口号修改成其他数字。比如下图中的11948。

接下来一步,要设置加密密钥的长度。一般来说,2048比特的密钥就已经足够了。而4096比特长度的密钥就过于复杂,生成起来时间很久。

按下OK以后就开始生成我们VPN服务器的加密密钥了,如下图所示。正如命令行提示的那样,This is going to take a long time…….在我的树莓派Zero W上大概运行了有一个小时左右才最终生成完毕(但是在B型树莓派3上大概只花了1分钟)。所以,耐心等待吧。

加密密钥生成以后我们要设置IP。如果你的网络运营商分配给你的是一个固定IP,那选择第一项就好。如果你的网络运营商分配给你的是一个动态IP,那你就需要设置DNS入口。你需要在类似No-IP这样的网站上注册一个账号以追踪你的IP地址。注册完账号以后会分配给你一个类似xxxx.noip.com的地址,填在下面DNS Entry页面中即可。想要了解如何在No-IP上设置动态IP的DNS解析,可以参考我的这篇教程:为PiVPN设置动态IP的DNS解析

我的IP是静态固定IP,所以我选择的第一项。下图中,我家的IP地址已经被我抹去了。

下一步会询问你,你要给你的VPN用户选择哪个DNS服务器。如果你要在中国大陆使用VPN的话,建议选择最后一个自定义选项Custom。这个链接里有国内常用的DNS服务器汇总,选择一个适合自己的DNS服务器就可以。如果你主要在中国大陆以外的其他地区使用VPN,恭喜你可以直接选择Google。如果一切设定完成以后想要想修改OpenVPN的DNS服务器,可以参考我的这篇教程:如何在设定完毕后修改PiVPN的配置文件

到这里位置,VPN服务器就搭建结束了。在命令行中输入

sudo reboot

再按下回车,重启树莓派。

设置端口映射

端口映射(Port Forwarding)就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。利用PiVPN在树莓派上配置OpenVPN的最后一步,就是设置我们路由器的端口映射。

设置端口映射一般需要我们进入路由器的管理页面。

如上图所示,内部端口号和外部端口号我们都填的是之前配置VPN服务器所设置的端口号(就是默认为1194的那个 回复@Perry的打赏:内端端口映射填你之前Default OpenVPN Port的端口号);协议选择UDP或者TCP(根据你的配置)也可以选择两者都选;设备选择你用来做VPN服务器的树莓派设备。

每个人家中的无线路由器型号不同,你的界面可能与我的界面并不一致。你可以参考你的无线路由器厂家提供的配置说明来完成路由器的端口映射。

到这里,路由器的配置就结束了。

创建VPN用户文件

VPN服务器已经在树莓派上搭建完成了。在其他电子设备(电脑、手机、平板等)登陆我们的树莓派VPN服务,还需要相应的VPN凭证,也就是由我们的树莓派VPN服务器所签发的用户文件。

树莓派重启以后,在命令行中输入

pivpn add

按下车后,执行添加用户命令。

接下来命令行会询问你用户名和密码。输入你自己的设定就好。比如你可以像我这样把用户文件取名为WindowsClient。很快树莓派就会在home/pi/ovpns文件夹里生成一个WindowsClient.ovpn的用户文件。

使用VPN用户文件进行OpenVPN连线

OpenVPN可以在Linux、Mac/iOS,Android以及Windows平台上使用。

要使用OpenVPN,需要先下载OpenVPN的客户端。在OpenVPN的官网可以下载最新版本的PC客户端。也有很多其他开源软件支持OpenVPN,比如Mac平台上的TunnelBlick。如果你是苹果手机或者安卓手机的用户,还可以在相应的应用商店搜索OpenVPN,安装到你的手机上。

安装好OpenVPN后需要将我们在上一步配置好的用户文件导入到应用程序中。有两种方式可以把树莓派上的用户文件拷到我们的电脑上。一种方式是利用SSH连接,另一种方式则是使用FTP连接。

复制VPN用户文件到本地

用SSH连接复制用户文件

在命令行(注意此时要断开之前与树莓派的SSH连接)输入

scp[空格]pi@192.168.1.XX:ovpns/你之前配置的VPN用户文件名.ovpn[空格]/你想/存放在/本机的路径/

这样我就把VPN用户文件配置到本机的指定路径了。

用FTP连接复制用户文件

更方便的一种复制方法是使用FTP连接树莓派。

FileZilla是一款开源的FTP工具软件,你可以在这里免费下载MacOS版本以及Windows版本。

下载并安装完成FileZilla后,按下图输入你的树莓派参数:

  • 在主机中,输入你的树莓派IP地址,即192.168.1.XX(前面sftp://可以不输入)
  • 用户名即为pi
  • 密码即为你所设定的树莓派密码
  • 端口默认为22

点击快速链接后我们就用FileZilla以FTP的方式访问了我们的树莓派。左边是我们的本地文件,右边是我们在树莓派上的远程文件。拖动右边ovpns文件夹里的文件到左边我们想要的路径里,就可以把树莓派上面的VPN用户文件复制到本地电脑。

导入用户文件到OpenVPN

电脑端

以Mac电脑为例,打开支援OpenVPN的应用程序Tunnelblick,点击上方状态栏的Tunnelblick的图标,点击VPN详情,在弹出的窗口左下角点击加号+,选择我们刚刚复制到本地电脑上的VPN用户文件。

手机端

以iOS系统为例,在应用商店里下载OpenVPN到手机,将手机连接到电脑上并打开iTunes同步,将电脑上的VPN用户文件传输到手机的OpenVPN里即可。

VPN连线

在外网环境下,打开TunnelBlick或者OpenVPN,选中我们的VPN用户文件,点击连接,输入之前配置的用户文件的密码,等待片刻即可连接成功。如果没有连接成功,要检查一下路由器的端口映射是否配置正确。

在VPN连线的条件下,我们可以访问家庭局域网内的任何成员,就像我们身处在家庭局域网中一样,这样我们就可以远程控制家里的联网设备,比如扫地机器人、智能空调、智能电视、安防摄像头等。也可以读取存放在家中电脑的文件。如果我们的VPN服务器设置在境外,还有可能绕过长城防火墙,顺利访问境外网站。(友情提示:使用VPN,请遵守当地法律。)

《使用树莓派Raspberry Pi搭建VPN并实现远程访问》有12个想法

  1. chown: 无法访问’/etc/openvpn/easy-rsa’: 没有那个文件或目录
    mkdir: 无法创建目录 “/etc/openvpn/easy-rsa/pki”: 没有那个文件或目录
    main: 第 825 行:cd: /etc/openvpn/easy-rsa: 没有那个文件或目录
    创建密钥的时候出现这个是为什么啊

    1. 最后一部分 VPN连线 章节有介绍,在其他网络环境下用openvpn配合之前设定的配置文件就可以开启vpn了

  2. 尝试在pi4b上安装pivpn,在install pivpn时出现错误。原因应该是现在国内无法连接上github导致。请问这一步要如何解决?是否能下载pivpn 安装程序,然后在本地安装?还是有其他方法连上安装程序?期待指点。

    1. 我查了一下Github在国内被墙了但是pivpn.io没有,如果是通过curl -L https://install.pivpn.io | bash 这个命令安装在树莓派上应该是不需要通过Github的。有什么报错提示吗?

发表评论