FRP实现内网穿透

发布于 2021-10-28  1140 次阅读


# Info.

frp 的终极目的,是使内网机器能通过公网进行访问,所以大前提是得有另外一台拥有独立ip的公网机器(当然你要把10.1穿到192.168我也没意见),服务端和客户端系统 win&linux 皆可。

整个过程类似路由器的端口映射,只不过变成了不同机器上的配置文件和命令的方式

服务器端文件为 frps*,客户端文件为 frpc* 。下文配置文件部分,win&linux 通用


# Do it.

操作环境如下

  • 内网机:centos7.6 8c8g 家用宽带100M
  • 公网机:centos7.6 4c4g 公网5M

Part.1 服务端配置(公网端)

1. 到项目地址下载心仪版本并解压,mv到合适路径并改名

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

tar -zxvf frp_0.38.0_linux_amd64.tar.gz &&rm -rf frp_0.38.0_linux_amd64.tar.gz

mv frp_0.38.0_linux_amd64 frp

  • 服务器端删除 frpc* 文件
  • frps.ini 配置文件
  • frps_full.ini 记录所有可配置项示例

2. 修改配置文件

服务器端至少需要设置服务监听端口,其他配置根据需要添加,这里额外配置token验证和仪表盘

vim frps.ini

[common]
bind_port = 12345  #frp服务监听端口

#启用token验证,token可自定义
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = 123456

#启用简易面板、登录验证(可选)
dashboard_port = 54321
dashboard_user = admin
dashboard_pwd = admin

3. 启动服务

基本启动命令:./frps -c frps.ini

win命令

※此时所有log将输出到shell,后台运行等配置可参考 Part.3


Part.2 客户端部署

1. 到项目地址下载心仪版本并解压,mv到合适路径并改名

wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz

tar -zxvf frp_0.38.0_linux_amd64.tar.gz &&rm -rf frp_0.38.0_linux_amd64.tar.gz

mv frp_0.38.0_linux_amd64 frp

  • 客户端删除 frps* 文件
  • frpc.ini 配置文件
  • frpc_full.ini 记录所有可配置项示例

2. 修改配置文件

客户端需要设置服务器信息、穿透设置

以下是基本配置项释义和示例

vim frpc.ini

[common]
server_addr = 8.8.8.8 #服务器ip
server_port = 2333	#服务端监听端口

#如服务端开启token验证,则此处也如是配置
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = 123456

#格式示例:
#
#[自定义名称]
#type = tcp #类型:tcp/udp
#local_ip = 192.168.1.2 #本机ip
#local_port = 本机将被映射出去的端口
#remote_port = 从外部访问所用端口
#
#最终效果为,访问 server_addr:remote_port 将被指向 local_ip:local_port

#实用示例:
#
[ssh]
type = tcp
local_ip = 192.168.1.2
local_port = 22
remote_port = 10086


[web]
type = tcp 
local_ip = 192.168.1.2
local_port = 80
remote_port = 80

3. 启动服务

基本启动命令:./frpc -c frpc.ini

※此时所有log将输出到shell,后台运行等配置可参考 Part.3
使用frp应先启动服务端再启动客户端


Part.3 进程守护

这里示例 后台运行systemctl进程守护 两种方式
建议使用进程守护,相对更易管理

1. nohup后台运行

启动后台运行:nohup ./frps -c ./frps.ini &

查看进程id:jobs -l

关闭进程:kill -9 id

2. systemctl进程守护

vim /lib/systemd/system/frps.service

*注意frps和frpc

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target


[Service]
Type=simple
ExecStart=/root/frp/frpc -c /root/frp/frpc.ini #此处写启动命令


[Install]
WantedBy=multi-user.target

保存退出即可使用 systemctl 管理命令即可


Q.E.D