一份借助frp实现内网穿透的简要说明
2022-12-22 # 实用教程

frp

fast reverse proxy(即快速反向代理),可以把接在NAT上的本地设备的端口映射到公网上,让本地的设备也能像服务器一样被公网访问。

软件下载

无论服务端还是客户端,下载地址都是这里。点击直达

  • 服务端: 具有公网ip的服务器
  • 客户端: 需要被公网访问的本地设备

软件使用

下载下来的压缩包解压后,进入文件目录,主要关注以下四个文件:

  • frps: 服务端的可执行文件
  • frps.ini: 服务端的配置文件
  • frpc: 客户端的可执行文件
  • frpc.ini: 客户端的配置文件

进入软件目录后,运行软件命令如下

./frps -c frps.ini

运行客户端的命令

./frpc -c frpc.ini

frps.ini

服务端的配置很简单,bind_port定义监听哪个端口,为连接到这个端口的数据做转发。

1
2
[common]
bind_port = 7000

但需注意服务器的防火墙要打开这个端口。,ubuntu系统可以用下面这个命令放行端口

sudo ufw allow “port-num”

“port-num”:填需要放行的端口号

可以通过下面这个命令查看当前防火墙策略,以检查自己要用到的端口没被防火墙过滤。

sudo ufw status

frpc.ini

客户端的配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[common]
server_addr = xxx.xxx.xxx.229 #服务器的ip地址
server_port = 7000 #服务器提供frp服务的端口

[RoadNetEdit] #这个名字随便取,主要是备注
type = tcp #端口协议,默认TCP
local_ip = 127.0.0.1 #本地ip地址
local_port = 8086 #本地需要暴露到公网的服务端口
remote_port = 30000 #服务端提供远程访问的端口

#参数同上
[RobotEdit]
type = tcp
local_ip = 127.0.0.1
local_port = 8088
remote_port = 30001

注: 原来通过”local_ip:local_port”访问本地服务,现在可通过”server_addr:remote_port”访问原来的服务。所以记得服务器的防火墙打开remote_port来提供服务!

systemd自启动

为了让程序自己开机就运行,需要把该程序写入到systemd管理的服务(Unit)中。首先以frpc为例,通过如下命令创建Uint配置文件

vi /etc/systemd/system/frpc.service

在vi界面下按i进入insert模式,然后复制以下内容到这个文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Frp Service #简单描述
After=network.target #在network.target之后启动

[Service]
Type=idle #服务类型,idle会等待所有任务处理完成后,才开始执行。
User=nobody #运行此程序的用户
Restart=on-failure #失败时重启
RestartSec=60s #重启间隔60s
ExecStart=/home/teemo/frp/frpc -c /home/teemo/frp/frpc.ini #执行的命令

[Install]
WantedBy=multi-user.target

然后执行下面的命令重载Systemd

systemctl daemon-reload

现在通过如下命令就能启动frpc服务了

systemctl start frpc

输入如下命令使能frpc服务的开机自起

systemctl enable frpc

可以通过如下命令查看服务的运行状态

systemctl status frpc

下面是成功运行的截图:
status

  • 在Loaded标签下我们可以看到enabled说明开机自起设置成功。
  • 在Active标签下我们可以在到绿色的active(running)说明程序正常运行。
  • 然后最底下我们可以看到程序的运行日志。