Background
树莓派通常会(通过LAN 或者 WIFI)连接到一个路由器上,如果我们不方便在路由器上配置端口映射(或者这个路由器之外还有另外的 NAT),当我们不在这个内网时,就无法管理我们的树莓派。
这时候,我们可以考虑使用用于内网穿透的反向代理应用。
如果你有一个拥有公网 IP 的机器,比如云主机、VPS 等。那么最稳定的方式就是在这个机器上自己架设中转节点。
Approach1 - frp
Architecture
原生
配置并启动 server
去 https://github.com/fatedier/frp/releases 下载,我的server 是 Mac,所以选择 frp_0.31.1_darwin_amd64.tar.gz。
修改 frps.ini 文件,这里使用了最简化的配置:
# frps.ini
[common]
bind_addr = xxx.xxx.xxx.xxx # 你的 frp server 的公网 IP
bind_port = 7000
# Optional
dashboard_port = 7500
dashboard_user = <你的仪表盘用户名>
dashboard_pwd = <你的仪表盘密码>
# Optional, for security reasons
privilege_token = <u5gYrhw!k$3R6%!t>
注意,
- xxx.xxx.xxx.xxx为 frps 所运行机器的公网 IP。
- 配置 dashboard_port、dashboard_user、dashboard_pwd信息后,可以更方便查看流量信息。
- privilege_token是验证凭据,服务端和客户端的凭据必须一样才能连接,当然为了安全还是设置长一点。
启动 frps:
$ ./frps -c ./frps.ini
配置并启动 client
我的 client 在树莓派,所以选择https://github.com/fatedier/frp/releases/download/v0.31.1/frp_0.31.1_linux_arm.tar.gz
修改 frpc.ini 文件,xxx.xxx.xxx.xxx 处填写你的 frp server 的公网 IP:
# frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 7000
# Optional, for security reasons
privilege_token = u5gYrhw!k$3R6%!t
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
启动 frpc:
$ ./frpc -c ./frpc.ini
通过 ssh 访问内网机器,<the user of ssh> 为
$ ssh -oPort=6000 <the user of ssh>@xxx.xxx.xxx.xxx
# e.g.,
$ ssh -oPort=6000 test@xxx.xxx.xxx.xxx
通过 dashboad 可以查询流量信息:
使用 Docker
下载镜像导入 从项目中下载docker images后导入,阿里云镜像下载:
wget --no-check-certificate https://code.aliyun.com/clangcn/frp-docker/raw/master/frps-docker/frps-docker.tar
github镜像下载地址:
wget --no-check-certificate https://github.com/clangcn/frp-docker/raw/master/frps-docker/frps-docker.tar
镜像导入命令
docker load < frps-docker.tar
启动命令
docker run -h="frps-docker" --name frps-docker -d \
-p 6443:5443/tcp \
-p 6443:5443/udp \0.
-p 7443:5445/tcp \
-e set_token=password \
-e set_log_level=info \
-e set_log_max_days=3 \
"frps-docker:latest"
端口说明
Docker内定义 | Docker内默认值 | 描述 |
---|---|---|
bind_port | 5443(TCP) | frps服务端口 |
kcp_bind_port | 5443(UDP) | KCP加速端口 |
bind_udp_port | 5444(UDP) | udp端口帮助udp洞洞穿nat |
dashboard_port | 5445(TCP) | Frps控制台端口 |
vhost_http_port | 80(TCP) | http穿透的端口。 |
vhost_https_port | 443(TCP) | https穿透服务的端口 |
变量说明(变量名区分大小写)
变量名 | 默认值 | 描述 |
---|---|---|
set_token | password | frps的认证密码,用于客户端连接 |
set_subdomain_host | frps子域名设置,默认为空,可以输入类似abc.com这样的域名 | |
set_dashboard_user | admin | frps控制台用户名 |
set_dashboard_pwd | admin | frps控制台密码 |
set_max_pool_count | 50 | 最大连接池数,貌似不用这个了 |
set_max_ports_per_client | 0 | 允许连入的最大客户端,0为不限制 |
set_authentication_timeout | 900 | 验证时间,单位为秒,默认900s |
set_log_level | info | 日志等级,可选项:debug, info, warn, error |
set_log_max_days | 3 | 日志保存天数,默认保存3天的 |
set_tcp_mux | true | TCP 多路复用 |
安装
sudo chmod 777 /var/run/docker.sock
Approach2 - ngrok
进入 ngrok.com,注册并登录,下载ngrok,树莓派选择 Linux(ARM)
$ unzip /home/pi/Downloads/ngrok.zip
$ cd /home/pi/Downloads
访问 https://dashboard.ngrok.com/,以获得 authtoken。
$ ./ngrok authtoken <your authtoken>
// e.g.,
$ ./ngrok authtoken 1WqMjP9yw0fsseUdb6tVdUNgTiN_56d8svuRSDF142bDorTgg
运行 ngrok:
$ ./ngrok tcp 22
我们需要记住Forwarding这行。
当你在外网时,访问这个树莓派的ssh的方式:
$ ssh <your respaberry acount>@<domain and port>
// e.g.,
$ ssh pi@0.tcp.ngrok.io -p 11911
Approach3 - 花生壳
下载:http://hsk.oray.com/download/download?id=25
在树莓派上下载安装包后,通过cd命令进入对应下载目录,输入下面的命令进行安装:
$ dpkg -i phddns_rapi_3.0.3.armhf.deb
+--------------------------------------------------+
| Oray PeanutHull Linux 3.0.4 |
+--------------------------------------------------+
| SN: RAPI60c80c54ecac Default password: admin |
+--------------------------------------------------+
| Remote Management Address http://b.oray.com |
+--------------------------------------------------+
启动:
$ phddns start
sudo chmod 777 /var/run/docker.sock
在服务器端部署frps
docker run --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
在客户端部署frpc
docker run –network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini –name frpc snowdreamtech/frpc
Reference
- https://service.oray.com/question/2680.html
- https://github.com/clangcn/frp-docker/tree/master/frps-docker
- https://www.jianshu.com/p/5f7e71121a4f