FRP

CentOS 7部署FRP服务,实现内网穿透

Posted on 2021-02-09,4 min read

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

如果您用过类似花生壳的服务,对FRP这个名词可能不陌生,FRP可实现公网穿透到内网,即使您内网机器不支持公网IP也可以实现。不过花生壳之类的服务通常是限制流量或者需要额外付费,并且存在一定安全风险。如果您自己有VPS也可以轻松搭建FRP,此处分享的是一个来自Github上的开源项目,这篇文章以CentOS 7 X64为例。

前提说明

FRP分服务端和客户端两部分组成,接下来我们这篇文章需要实现的目的就是穿透到内网来连接Windows PC,在开始之前先看下FRP结构图。

img

安装FRP Server

作者已经提供了编译好的二进制包,下载解压 - 然后修改配置文件即可。

#下载server端
wget https://github.com/fatedier/frp/releases/download/v0.25.0/frp_0.25.0_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.25.0_linux_amd64.tar.gz
#进入目录
cd frp_0.25.0_linux_amd64

解压后我们会看到里面有好几个文件,Server端我们只需要下面2个

-rwxrwxr-x 1 mysql mysql 11026848 Mar 11 17:15 frps
-rw-rw-r-- 1 mysql mysql       26 Mar 11 17:19 frps.ini

继续编辑frps.ini这个文件,写入以下内容:

[common]
bind_port = 7000

[mstsc]
listen_port = 3389
auth_token = 123456
  • bind_port: 主服务需要监听的端口,这里使用7000
  • listen_port : 需要转发的端口,这里使用3389
  • auth_token: 相当于验证密码,这里使用123456,也可以不填写

配置文件完成后输入命令./frps -c ./frps.ini 启动服务端,当然也别忘记在防火墙放行端口哦。如果需要服务在后台运行,可以将命令替换为:nohup ./frps -c ./frps.ini &

#iptables放行端口
iptables -A INPUT -p tcp --dport 7000 -j ACCEPT
iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
service iptables save
#firewalld放行端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=3389/tcp --permanent
firewall-cmd --reload

安装Windows 客户端

上面已提到FRP分服务端和客户端,上面的步骤已经完成服务端安装,接下来我们在Windows上安装客户端。

解压之后我们需要下面2个文件

frpc.exe
frpc.ini

修改配置文件frpc.ini内容如下:

[common]
server_addr = 1.1.1.1
server_port = 7000

[mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389
auth_token = 123456
  • server_addr: 为服务器公网IP
  • server_port: FRP主服务监听的端口
  • local_ip: 本地电脑IP
  • local_port: 本地电脑监听的端口(Windows远程桌面服务默认监听3389)
  • remote_port: Server端需要转发的端口
  • auth_token: 验证密码,上个步骤我们设置的123456

cmd窗口下进入FRP客户端目录,然后执行命令frpc.exe -c frpc.ini,如果不报错,那么客户端也正常运行了。假如您服务器IP是1.1.1.1,当您连接1.1.1.1:3389时,就可以映射到内网的127.0.0.1:3389,从而实现内网穿透。

总结

上面的方法适合本地申请不到公网IP的童鞋,如果本地已经有公网IP,直接使用光猫或路由器的端口映射 功能即可。上面的工作只是转发了TCP流量,FRP的用途远不止这些,如果有兴趣可以自行深入研究。

  • Github项目地址:https://github.com/fatedier/frp
  • 最新版服务端/客户端下载:https://github.com/fatedier/frp/releases
  • 此文部分内容参考了:https://github.com/fatedier/frp/blob/master/README_zh.md

下一篇: jiacrontab 2.x发布,简单可信赖的任务管理工具,支持秒级定时任务→