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 = 3389auth_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 ACCEPTiptables -A INPUT -p tcp --dport 3389 -j ACCEPTservice iptables save#firewalld放行端口firewall-cmd --zone=public --add-port=7000/tcp --permanentfirewall-cmd --zone=public --add-port=3389/tcp --permanentfirewall-cmd --reload
安装Windows 客户端
上面已提到FRP分服务端和客户端,上面的步骤已经完成服务端安装,接下来我们在Windows上安装客户端。
- Windows 客户端下载地址:frp_0.25.0_windows_amd64.zip
解压之后我们需要下面2个文件
frpc.exefrpc.ini
修改配置文件frpc.ini
内容如下:
[common]server_addr = 1.1.1.1server_port = 7000[mstsc]type = tcplocal_ip = 127.0.0.1local_port = 3389remote_port = 3389auth_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