Fork me on GitHub

树莓派搭建家庭内网穿透服务器(frp实现)

目录

  • 背景

  • 第一部分 环境准备

  • 第二部分 FRP介绍

  • 第三部分 实现步骤

  • 参考文献及资料

背景

对于目前家庭网络,有下面两个迫切需求:

  • 需要远程(比如在单位、路途等)SSH访问家里PC服务器、后续实现远程唤醒服务器。
  • 后续部署自制家庭监控,需要远程访问监控web界面。

鉴于上面的需求,技术上需要实现外网访问内网(即内网穿透)。下面详细介绍具体实现步骤。

第一部分 环境准备

  • 一台树莓派主机。由于耗电较少,适合长期开机,作为中转服务器。

  • 一个公网IP。由于电信宽带不提供公网IP,只能自己想办法。正好有一台外网VPS服务器(独有公网IP)

另外顺便打个不收钱的广告:VPS可以使用vultr的虚机,支持支付宝,非常方便。

第二部分 FRP介绍

实现内网穿透有很多方法:frp软件、ngrok软件、还有花生壳。关于frp有详细的官方介绍文档 ,不再赘述。

第三部分 实现步骤

第一步:配置VPS服务器

VPS操作系统为Ubuntu,下载linux_amd64版本:

1
root@vultr:~# wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz

解压缩:

1
2
3
4
5
6
7
8
9
10
11
12
root@vultr:~# tar -zxvf frp_0.16.1_linux_amd64.tar.gz
frp_0.16.1_linux_amd64/
frp_0.16.1_linux_amd64/frpc_full.ini
frp_0.16.1_linux_amd64/LICENSE
frp_0.16.1_linux_amd64/frpc.ini
frp_0.16.1_linux_amd64/frps.ini
frp_0.16.1_linux_amd64/frpc
frp_0.16.1_linux_amd64/frps_full.ini
frp_0.16.1_linux_amd64/frps
root@vultr:~# cd frp_0.16.1_linux_amd64/
root@vultr:~/frp_0.16.1_linux_amd64# ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE

对于VPS服务端只有两个文件是需要的:frps (服务)和frps.ini (配置文件)是需要的,我们拷贝到/bin目录下面(这一步主要是集中放在bin目录便于管理)。

frpcfrpc.ini是客户端服务和配置文件,后面介绍。

1
2
root@vultr:~/frp_0.16.1_linux_amd64# cp frps /bin/frps
root@vultr:~/frp_0.16.1_linux_amd64# cp frps.ini /bin/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
28
29
30
31
32
33
root@vultr:/bin# vi frps.ini
#修改配置文件
[common]
bind_addr = 10.66.2.137
#VPS公网IP地址(为了保护隐私,上面地址是虚构的)
bind_port = 7000
#frp服务端口,用户自己定于一个空闲端口(不要和其他应用服务端口冲突)。需要注意的是必须与frpc.ini相同
vhost_http_port = 80
#http服务端口
vhost_https_port = 443
#https服务端口
dashboard_port = 7500
#web控制台端口,10.66.2.137:7500可以访问控制界面
#下面两个参数是控制界面的用户名和密码
dashboard_user = admin
dashboard_pwd = Password123!

privilege_token = Password123!
#特权模式密钥,需与frpc.ini相同

log_file = /bin/frps_log/frps.log
#日志文件存储路径
log_level = info
#日志记录级别
log_max_days = 7
#日志最大存储天数
max_pool_count = 5
#后端连接池最大连接数量
#口令超时时间
authentication_timeout = 900

#subdomain_host = frp.com #服务端绑定域名
tcp_mux = true

保存修改后的配置文件,后台启服务端进程,下面是命令格式:

1
2
3
4
5
root@vultr:/bin# nohup ./frps -c ./frps.ini &
#查看服务进程:
root@vultr:/bin# ps -ef|grep frp
root 1339 1 0 Mar25 ? 00:03:54 ./frps -c ./frps.ini
root 5320 4958 0 11:42 pts/1 00:00:00 grep --color=auto frp

以上完成服务端配置。

第二步:配置树莓派客户端

注意:树莓派的CPU处理器是ARM的,所以注意下载的版本包。

1
root@raspberrypi:~# wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_arm.tar.gz

解压缩下载的包:

1
2
3
4
5
6
7
8
9
10
11
12
root@raspberrypi:~# tar -zxvf frp_0.16.1_linux_arm.tar.gz 
frp_0.16.1_linux_arm/
frp_0.16.1_linux_arm/frpc_full.ini
frp_0.16.1_linux_arm/LICENSE
frp_0.16.1_linux_arm/frpc.ini
frp_0.16.1_linux_arm/frps.ini
frp_0.16.1_linux_arm/frpc
frp_0.16.1_linux_arm/frps_full.ini
frp_0.16.1_linux_arm/frps
root@raspberrypi:~# cd frp_0.16.1_linux_arm
root@raspberrypi:~/frp_0.16.1_linux_arm# ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE

类似服务端操作将frpcfrpc.ini拷贝到/bin目录下面。

1
2
root@raspberrypi:~/frp_0.16.1_linux_arm# cp frpc /bin/frpc
root@raspberrypi:~/frp_0.16.1_linux_arm# cp frpc.ini /bin/frpc.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
28
29
30
31
32
33
34
35
36
37
38
39
root@raspberrypi:/bin# vi frpc.ini
#修改客户端配置文件
[common]
server_addr = 10.66.2.137
#VPS公网IP地址(为了保护隐私,上面地址是虚构的)
server_port = 7000
privilege_token = Password123!

log_file = /bin/frpc.log
#日志目录
log_level = info
log_max_days = 7
pool_count = 5
tcp_mux = true
#配置SSH端口映射
[ssh]
type = tcp
local_ip = 127.0.0.1
#本地端口
local_port = 22
#映射端口
remote_port = 6000

[web]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
subdomain = web
#所绑定的公网服务器域名,一级、二级域名都可以。这里没有就不用配置了
custom_domains = web.frp.com

#远程监控端口映射
[motion]
type = tcp
local_ip = 127.0.0.1
local_port = 8082
remote_port = 8000

保存修改,后台启客户端进程:

1
2
3
4
root@raspberrypi:/bin# nohup ./frpc -c ./frpc.ini &
root@raspberrypi:/bin# ps -ef|grep frp
root 4627 1 0 402 ? 00:05:19 ./frpc -c ./frpc.ini
root 13731 13669 0 19:56 pts/0 00:00:00 grep frp

第三步:验证

  • FRP管理界面(http://公网IP:7500)

显示两个端口映射都是online可用的:

下面是整体视图:

  • SSH服务

我们已经将本地访问ssh的服务端口(192.168.1.2:22)映射到外网端口(10.66.2.137:6000)。

例如使用putty工具,IP地址填写:10.66.2.137,端口:6000。

连接后使用树莓派本地ssh用户和密码即可登录。

参考文献及资料

[1] FRP官方网站 https://github.com/fatedier/frp

本文标题:树莓派搭建家庭内网穿透服务器(frp实现)

文章作者:rong xiang

发布时间:2018年03月01日 - 19:03

最后更新:2022年10月25日 - 23:10

原始链接:https://zjrongxiang.github.io/posts/1c8fb856/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%