关于反代和穿透工具,之前在 XTunnel 介绍 的一文中提及过frp,和项目已经被商用的xtunnel相比,frp仍然秉持开源精神,在Github上的项目至今依旧活跃,虽然没有提供GUI,但只需简单配置客户端与服务端,一行命令就能完成内网穿透,今天简单介绍一下,并记录一个frp的普通应用场景:frp Windows 客户端+frp Linux 服务端+域名,实现无公网IP PC内网网站映射外网访问
如果你是第一次接触frp,可以看下面引用自frp的官方说明文档,官方教程已经足够详细了,本文只对场景做简单记录,程序涉及到的更多配置参数见 frp Github 中文文档
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, udp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
frp 的作用
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
开始前
需要用到的工具:1台能访问外网的Windows PC电脑,1台带有公网IP的Linux VPS,1个可自主解析的域名。
服务端配置(Linux)
1.根据系统版本,从Releases 页面选择对应的程序包,登陆VPS SSH并上传或wget至服务器。
wget --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_linux_amd64.tar.gz tar zxvf frp_0.9.3_linux_amd64.tar.gz cd frp_0.9.3_linux_amd64
本次以Ubuntu 14.04 64bit为例,截止博客发文为止最新版本为0.9.3
2.删除默认服务端配置文件frps.ini,重新创建并编辑
rm frps.ini && vi frps.ini
注意:官方下载过来的压缩包内包含2个配置文件,客户端(frpc.ini)和服务端(frps.ini),本次使用Linux作为服务端,所以需要修改frps.ini,不要搞混了!
3.进入vi编辑界面,添加一个配置
[common] bind_port = 7000 vhost_http_port = 80 [web] type = http custom_domains = frp.1w.nz auth_token = 123
以上配置简单来说就是定义一个http反向代理,名为: web ,设置 http 访问端口:80,绑定自定义域名 frp.1w.nz ,其中bind_port是服务端与客户端握手时的端口,auth_token相当于验证密码,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
4.保存退出vi界面,安装 Screen,为运行frp新建一个名为frp的终端会话:
Debian & ubuntu:
apt-get -y install screen && screen -S frp
CentOS:
yum -y install screen && screen -S frp
为了方便执行其他操作,保证frp服务不被中断,需要新建一个会话,让frp保持后台运行。
5.最后启动 frp 服务端,即可完成服务端操作。
./frps -c ./frps.ini
域名绑定
将服务端配置文件中设置的域名解析至Linux VPS 的公网IP
客户端配置(Windows)
1.根据系统版本,从Releases 页面选择对应的Windows 程序包,下载解压。
https://github.com/fatedier/frp/releases/download/v0.9.3/frp_0.9.3_windows_amd64.zip
本次以Windows 10 64位为例,截止博客发文为止最新版本为0.9.3
2.清空默认客户端配置文件frpc.ini,重新添加一个客户端配置
[common] server_addr = 104.1xx.xx.xx server_port = 7000 auth_token = 123 [web] type = http local_port = 80
依然要注意服务端和客户端的配置文件区别,本次使用Windows作为客户端,所以需要修改frpc.ini,以上配置基本根据服务端相对应地填写即可,参数必须一致,需要修改的主要是server_addr(填写Linux VPS 公网 IP)和local_port(填写本地网站应用的端口),最后再确认一下客户端服务端的握手端口、以及验证码是否一致,
3.确认无误后,运行程序目录下的frpc.exe,看到成功提示即表示连接成功。
其他参数与功能
frp也同样支持多条反代记录,如果你需要和朋友共用frp,也可以在配置文件中添加一个自定义二级域名,还有更多的应用场景需要用到的参数与配置,详见 frp Github 中文文档,这里不赘述。