买的树莓派终于到了,迫不及待地折腾起来。第一步是让外网可以访问放在家里的树莓派,这样的话,树莓派就相当于一个在互联网上的主机,可以实现各种有意思的玩法。经过摸索,设置起来也不是太麻烦。另外,我用的是极路由,它本身自带的一些方便的插件,但理论上来说,别的路由器也可实现。以下是我的实现步骤:

将树莓派连接到路由器

这个没什么好说的,需要注意的一点是,为了防止路由器的DHCP可能改变树莓派的IP地址,建议设置一个静态IP,只要修改/etc/network/interfaces文件即可,以下是我的设置,供参考,因为我用的是有线网络,所以改动的是eth0,无线网络的话应该修改wlan0

1
2
3
4
5
6
7
8
9
10
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
#iface eth0 inet manual
iface eth0 inet static
address 192.168.199.177
netmask 255.255.255.0
gateway 192.168.199.1

设置路由器

下面的需要用到极路由的两个插件:“超级端口转发”和“动态域名”

极路由插件

端口转发

这一步很关键,作用是将外网对路由器的请求映射到树莓派。这里使用的是极路由,打开“超级端口转发”插件,在DMZ主机的IP地址栏输入树莓派的IP,表示所有请求都转发到树莓派,这样就不用每个端口单独设定了,如下:

DMZ

当然也可以单独指定端口,比如我下面只把22端口做转发:

端口转发

动态域名

这是极路由提供的服务,就是给你一个唯一的二级域名,指向你的wan口IP,因为电信给你分配的IP是经常变动的,如果直接使用IP访问的话就需要经常去查询最新的IP有没有变。极路由提供的动态域名服务可以自己设定喜欢的二级域名,这个很不错,比如我的是maxhis.jios.org,以后我访问这个域名就可以访问到我的树莓派了。

动态域名

如果你没有使用极路由,这里推荐一篇定期获取当前出口IP的文章,稍微麻烦点,但是可用。

设置独立域名

如果你没有独立域名,这一步可以忽略。这一步其实很简单,就是建一个CNAME到刚才申请的动态域名(当然也可以是你拿到的IP地址)。下面是我在DNSPod上的设置:

DNSPod

添加ssh public key到树莓派

其实到上一步,我已经可以通过ssh username@pi.15tar.com登陆我的树莓派了,但是每次都需要输入密码太麻烦,所以把我把电脑的ssh public key添加到树莓派。

怎么生成ssh key就不说了,下面的命令直接copy public key到树莓派:

1
ssh-copy-id -i ~/.ssh/id_rsa.pub username@pi.15tar.com

如果不出意外的话应该在树莓派的.ssh/authorized_key下看到刚刚增加的key。至此,ssh登陆的时候已经不需要输入密码了。

需要说明一点的是,OS X下默认没有ssh-copy-id,需要手动安装

设置ssh别名

还是感觉每次登陆输入这么一长串东西感觉太麻烦,于是对ssh做一个别名,简化输入。

~/.ssh/config文件下新增下面部分就可以了:

1
2
3
4
5
6
7
8
9
10
11
#Pi local
Host pil
HostName 192.168.199.177
PreferredAuthentications publickey
User username

#Pi remote
Host pir
HostName pi.15tar.com
PreferredAuthentications publickey
User username

大功告成,以后输入ssh pilssh pir就可以方便地访问树莓派了。