所谓“内网穿透”,旨在使我们能够通过公网固定IP端口转发的方式,远程访问内网中的计算机。当前有许多内网穿透的工具,其中以开源的ngrok 和frp最为广泛。
本文以frp为例,借助一个有公网IP的VPS实现远程访问家中树莓派的目的。
实验平台 |
操作系统 |
说明 |
公网主机 |
Centos 7 x86_64 GNU/Linux |
可远程操作,有固定的Ipv4地址,以下用百度的主机‘111.13.101.208’ 代指 |
树莓派 |
Stretch armV7 |
内网路由下IP:192.168.155.4 |
frp 简介
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
![](https://raw.githubusercontent.com/fatedier/frp/master/doc/pic/architecture.png)
安装
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
- 将 frps 及 frps.ini 放到具有公网 IP 的机器上。
- 将 frpc 及 frpc.ini 放到处于内网环境的机器上。
更详细的配置方式,参考官方安装文档
1 服务器端
由于本文公网服务器为linux 64 位,因此下载frp_0.16.1_linux_amd64.tar.gz
,其余类型同理,输入uname -r
可查看服务器架构。
ssh vps
cd /home/pi/iot/frp
wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz
tar xvf frp_0.16.1_linux_amd64.tar.gz
# 可删除客户端程序和配置文件
rm frpc frpc.ini
服务器端配置文件示例,出于安全因素设置一个随机字符串作为privilege_token
,同时在客户端配置文件中也要加入同样的随机字符串。
[common]
bind_port = 7000
vhost_http_port = 8080
privilege_token = *******
#log_file = /home/pi/iot/frp/frps-debug.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
服务器端启动
2 树莓派端
由于树莓派为 armV7
架构,因此下载 frp_0.16.1_linux_arm.tar.gz
ssh pi
cd /home/pi/iot
mkdir frp
cd frp
https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_arm.tar.gz
tar xvf frp_0.16.1_linux_arm.tar.gz
# 可删除客户端程序和配置文件
rm frps frps.init
配置文件示例
[common]
server_addr = 你的公网主机IP地址
server_port = 7000
privilege_token = *******,同服务端一致即可
#log_file = /home/pi/iot/frp/frpc-debug.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6001
[web]
type = http
local_port = 80
custom_domains = yourdomain.com
use_compression = true
树莓派端启动
观察日志输出。
正确运行后,分别在服务器端 frps.ini
和 树莓派端frpc.ini
中#log_file
一栏中, 将前面的#
去除,以便记录日志情况。
设置开机启动
1 服务器端
在服务器端,向/etc/systemd/system/
路径下,新增frps.service
文件
$ sudo su
$ cd /etc/systemd/system/
$ nano frps.service
frps.service
文件如下,注意ExecStart
路径与你的保持一致。
[Unit]
Description=frp server daemon ,a fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/home/pi/iot/frp/frps -c /home/pi/iot/frp/frps.ini
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall frps
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
使能并设置开机启动
$ systemctl daemon-reload
$ systemctl list-unit-files | grep frps
$ systemctl enable frps.service
$ systemctl start frps.service
$ systemctl status frps.service
2 树莓派端
同服务器端设置开机启动方式类似,树莓派端新增/etc/systemd/system/frpc.service
[Unit]
Description=frp client daemon ,A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
After=syslog.target network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/home/pi/iot/frp/frpc -c /home/pi/iot/frp/frpc.ini
Restart= always
RestartSec=1min
ExecStop=/usr/bin/killall frpc
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
enjoy and have fun ~😉
更多参考推荐一款很好用的内网穿透工具--FRP