树莓派内网穿透,实现远程控制

发布 : 2017-08-19 分类 : 树莓派折腾记 浏览 :

  本篇博客讲解了树莓派的内网穿透实现 SSH远程控制。本文章出自舍予书,如需转载,请保留该声明,谢谢。

准备工作

  由于大多数树莓派是在内网环境运行,所以想实现外网访问就需要搭建一个通道。而这个通道又需要一台具有外网 IP 的服务器来做桥梁。这个桥梁可以使用自己的服务器或者使用 花生壳 来实现。而这两种方法都有各自的不足之处,下面就分别讲解下两种不同的实现方法。

拥有外网服务器:通过 FRP 实现内网穿透

  使用自己的外网服务器做内网穿透,可以做的多端口映射。但是对于没有服务器的小伙伴来说成本比较大。

服务器端安装 FRP

下载FRP

下载地址:https://github.com/fatedier/frp/releases   下载的时候注意下,frp 会有多平台的版本,所以你要更具自己实际情况选择。如下图,如果你的服务器是linux64 位就下载frp_0.13.0_linux_amd64.tar.gz,如果是32位就下载frp_0.13.0_linux_386.tar.gz, 下载错了是无法运行的,我的服务器系统是 Centos7 64bit 下载 amd64的,树莓派下载 arm 的是都可以正常执行的。
  
屏幕快照 2017-08-17 18.58.04
  如果你尝试了几个版本都无法运行,则可以下载最下面的源码,进行源码安装。

安装

  下载下来的程序是已经编译好的可执行二进制文件。所以只需要解压即可。

解压

tar -xzvf frp_0.13.0_linux_amd64.tar.gz
解压后的文件中是包含服务器端和客户端的,处于对空间的节省考虑删除掉不必要的文件。 
cd frp_0.13.0_linux_amd64
rm frpc*

修改配置文件

vi frps.ini 在打开的文件中添加下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[common]
#bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
#dashboard_port = 7500
# assets_dir = ./static
log_file = ./frps.log
log_level = info
log_max_days = 3

privilege_mode = true
privilege_allow_ports = 2000-3000,3001,3003,4000-50000
max_pool_count = 100

[ssh]
type = tcp
#bind_addr = 0.0.0.0
listen_port = 3000

[web01]
type = http
custom_domains = www.flowlore.com

[web02]
type = http
custom_domains = wiki.flowlore.com

这里对上面的配置进行一一讲解:

  • [common]:是全局设置
  • bind_port = 7000 :是frp在服务器监听的端口,也是用来和客户端建立通信的端口。
  • vhost_http_port = 80:是http协议端口,在之后的域名后面需要加相应的端口号(ps:如果是80则不需要,注意,如果服务器有web服务,可能和web服务发送冲突。)
  • vhost_https_port = 443:https协议端口,和http的差不多,也许也需要注意和其它服务冲突。
  • log_file = ./frps.log:日志记录路径
  • log_level = info:日志记录级别
  • max_pool_count = 100:最大链接数
  • [ssh]:是对ssh进行转接配置
  • type = tcp:链接类型
  • listen_port = 3000:监听端口,建立成功后,ssh 连接时需要指定该端口。例如:ssh -oProt=3000 root@xxx.xxx.xxx.xx
  • [web01]:是对web服务器的转接,也就是实现访问内网的web页面的设置。
  • type = http:协议类型
  • custom_domains = www.flowlore.com :监视域名,这里需要将这里指定的域名 A 记录解析到该frp运行的服务器上。

这里可以设置多个Web服务器,只需修改 web0N 即可。

启动服务器端FRP

绝对路径启动

命令中的path是 你的frp所存放的路径。

/path/frp_0.13.0_linux_amd64/frps -c /path/frp_0.13.0_linux_amd64/frps.ini &

相对路径启动

cd /path/frp_0.13.0_linux_amd64/

./frps -c ./frps.ini &

客户端(树莓派)端安装 FRP

安装

  客户端的下载安装和服务器差不多,只是客户端需要删除的是 frps* 一系列文件。不过下载的时候需要注意平台版本,我使用的是树莓派,所以下载的是 arm 版。

修改配置文件

vi frpc.ini
在打开的文件中添加下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[common]
server_addr = x.x.x.x
server_port = 7000
log_file = ./frpc.log
log_level = info
log_max_days = 3

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 3000

[web01]
type = http
local_port = 9988
custom_domains = www.flowlore.com

[web02]
type = http
local_port = 8008
custom_domains = wiki.flowlore.com

下面讲解下一下重要配置:

  • server_addr = x.x.x.x:这里需要设置你的外网服务器 IP。
  • server_port = 7000:这里是外网服务器的frp监听的端口,要和服务器配置成相同的。
  • remote_port = 3000:这里要和服务器的 listen_port 设置成相同的。
  • local_port = 998:这里是你的 web 服务监听的端口。
  • custom_domains = www.flowlore.com :这里要和服务器的配置相对应。

启动客户端FRP

绝对路径启动

命令中的path是 你的frp所存放的路径。

/path/frp_0.13.0_linux_arm/frpc -c /path/frp_0.13.0_linux_arm/frpc.ini &

相对路径启动

cd /path/frp_0.13.0_linux_arm/

./frps -c ./frpc.ini &

设置开机启动

树莓派中的开机启动方法是在 /etc/rc.local 中增加一条 frp 的启动命令。

  1. 首先使用编辑工具打开 /etc/rc.local 文件。

vi /etc/rc.local

  1. 在文件最下放添加如下命令:

/path/frp_0.13.0_linux_arm/frpc -c /path/frp_0.13.0_linux_arm/frpc.ini &

设置树莓派等待网络链接正常后启动

  我设置开机启动FRP时,发现总是启动失败。查看日志提示TCP链接失败,查了相关资料发现原来,树莓派需要设置等待网络链接成功后再启动才可以进行网络链接。 首先 输入下面命令进入Raspi-config设置页面, sudo raspi-config 输入后会进入下图页面,选择 Wait for Network at Boot选项。

屏幕快照 2017-08-19 10.02.07

选择后会看到下图,选择第一个 Change Locale,该选项表示等待网络链接成功够再启动。

屏幕快照 2017-08-19 09.50.08

 至此,便设置成功了。这里要说一下,这个是我看得资料找到的方法。由于此时我的树莓派在我折腾开机重启时,已经被整得无法开机了。所以并没有实践,也许会有坑,小心。不过之后我会写一个专门的开机启动文章,到时候会详细介绍如何设置开机启动。

没有外网服务器:通过 花生壳实现内网穿透

  对于没有自己服务器的同学也不需要担心,你可以使用花生壳解析。我在点击FRP之前一直使用的都是花生壳。点击这里->花生壳linux客户端安装教程,这个教程讲的很详细了,我就不再这里赘述了,Good luck。   

本文作者 : Lojze
原文链接 : http://blog.flowlore.com/passages/shu-mei-pai-nei-wang-chuan-tou-shi-xian-yuan-cheng/
版权声明 : 版权声明: 本博客所有文章除特别声明外, 均采用 CC BY-NC-SA 4.0 许可协议. 转载请注明出自《舍予书》
留下足迹