共计 1990 个字符,预计需要花费 5 分钟才能阅读完成。
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
如果您用过类似花生壳的服务,对 FRP 这个名词可能不陌生,FRP 可实现公网穿透到内网,即使您内网机器不支持公网 IP 也可以实现。不过花生壳之类的服务通常是限制流量或者需要额外付费,并且存在一定安全风险。如果您自己有 VPS 也可以轻松搭建 FRP,此处分享的是一个来自 Github 上的开源项目,这篇文章以 CentOS 7 X64 为例。
前提说明
FRP 分服务端和客户端两部分组成,接下来我们这篇文章需要实现的目的就是穿透到内网来连接 Windows PC,在开始之前先看下 FRP 结构图。
安装 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 上安装客户端。
- Windows 客户端下载地址:frp_0.25.0_windows_amd64.zip
解压之后我们需要下面 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