前言
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
GitHub:https://github.com/fatedier/frp/blob/master/README_zh.md
使用前提
有固定公网IP的服务器。
架构
使用方法
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。下载的内容包含服务端与客户端。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。(服务端)
将 frpc 及 frpc.ini 放到处于内网环境的机器上。(客户端)
根据自身的要求编辑 frps.ini 、 frpc.ini 配置文件。
开放端口(包含外部的防火墙、系统的防火墙,都需打开)。
启动frp
Linux服务端:
nohup ./frps -c ./frps.ini &
Linux客户端:
nohup ./frpc -c ./frpc.ini &
Windows服务端:(cmd到frp目录执行,或者在frp目录下建立一个批处理bat文件,输入以下命令,保存并启动即可)
frps.exe -c frps.ini
Windows客户端:(同上)
frpc.exe -c frpc.ini
附上几个批处理,方便快速搭建frp:
常用配置文件分享 (重点)
—— 使用前提 ——
frp目录下的frps_full、frpc_full 是服务端、客户端的 全部配置 的说明与指导。不明白配置的可以多看看。
以下配置示例均为最简配置。请根据自身的需求、安全性 做更改及调整。
远程桌面
访问内网中的Windows 系统
服务端配置(frps.ini):
[common] bind_port = 23333 token = lightime
bind_port 这个参数是 frp 的主端口,负责与客户端通信。
token 密码验证。服务端与客户端一致才能连接。
客户端配置(frpc.ini):
[common] server_addr = 1.1.1.1 server_port = 23333 token = lightime [rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6666
server_addr 服务器IP地址
server_port 与bind_port保持一致
local_port 远程桌面服务的本地端口
remote_port 你想要使用的外部端口,可以任意指定
最后,用:1.1.1.1:6666 就能以远程桌面访问客户端。
记住,上述所有端口防火墙都需要开放出来。
ssh
服务端配置(frps.ini):
[common] bind_port = 23333 token = lightime
客户端配置(frpc.ini):
[common] server_addr = 1.1.1.1 server_port = 23333 token = lightime [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 7777
最后,连接 服务器IP 1.1.1.1 及 端口 7777 即可。
web服务
访问内网中的web服务
服务端配置(frps.ini):
[common] bind_port = 23333 token = lightime [web] listen_port = 8888
listen_port 为你想要使用的外部端口,可以任意指定。与客户端配置中的 remote_port 相同。
客户端配置(frpc.ini):
[common] server_addr = 1.1.1.1 server_port = 23333 token = lightime [web] type = tcp local_ip = 127.0.0.1 local_port = 80 remote_port = 8888
最后浏览器访问 1.1.1.1:8888 即可。
Apache 反代 web服务
编辑 Apache 的主配置文件 httpd.conf,去掉:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
前面的 # 号,激活模块
再创建站点文件(一般位于 vhosts 文件夹下):
<VirtualHost *:80> ServerName t.abc.com ServerAlias e.abc.com ProxyPreserveHost On ProxyPass / http://127.0.0.1:81/ ProxyPassReverse / http://127.0.0.1:81/ </VirtualHost>
以上参数请自行替换。
之后重启Apache即可。
使用kcp传输模式(以远程桌面为例)
底层通信协议支持选择 kcp 协议,在弱网环境下传输效率提升明显,但是会有一些额外的流量消耗。
服务端配置(frps.ini):
[common] bind_port = 23333 kcp_bind_port = 23333 token = lightime
kcp_bind_port 为你想要使用的UDP端口,可以任意指定,可以与TCP端口相同。
客户端配置(frpc.ini):
[common] server_addr = 1.1.1.1 server_port = 23333 token = lightime protocol = kcp [RDP] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 3389
protocol 这里指定使用kcp协议。
设置 frp 开机启动(Linux)
这里以服务端frps为例子。客户端也一样,只是改下名字即可
创建 /etc/systemd/system/frps.service 文件:
vim /etc/systemd/system/frps.service
输入以下内容:
[Unit] Description=frps daemon After=network.target Wants=network.target [Service] Type=simple ExecStart=/root/frp/frps -c /root/frp/frps.ini Restart= always RestartSec=1min ExecStop=/usr/bin/killall frps [Install] WantedBy=multi-user.target
ExecStart 这里是运行的命令,注意改成自己的路径
After、Wants、Restart、RestartSec、ExecStop 这几个参数是为了确保 frp 开机时能正常启动,不受其它因素干扰
设置开机启动:
systemctl enable frps
这样Linux重启,frp也会跟着跑起来。
以后也能通过 systemctl 命令来控制 frps,如:
systemctl start frps systemctl stop frps
同理,其他的程序,也能通过这样的方式设置开机启动。
frp 开机启动(centos 6.5)
vi /etc/rc.local
在最下面加一行:
/root/frp/frps -c /root/frp/frps.ini
其中,/root/frp/ 是你 frp 的目录,请自行更改。重启就能看到 frp 自行启动了。
设置 frp 开机启动(Windows)
Windows 下我们可以用 任务计划 来实现 frp 开机启动。
因为特别简单,这里只讲几个细节。
1、需要创建的是 任务,而不是 基本任务;
2、注意选上 不管用户是否登录都要运行 ;
3、操作选项, 起始于 这里要设置 frp 的根目录。