Skip to content

内网穿透 #4

@mindcont

Description

@mindcont

所谓“内网穿透”,旨在使我们能够通过公网固定IP端口转发的方式,远程访问内网中的计算机。当前有许多内网穿透的工具,其中以开源的ngrokfrp最为广泛。

本文以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 协议。

安装

根据对应的操作系统及架构,从 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

服务器端启动

$ ./frps -c frps.ini

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

树莓派端启动

$ ./frpc -c frpc.ini

观察日志输出。
正确运行后,分别在服务器端 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions