frp 的作用
- 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
- 对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
架构
搭建过程
首先搭建服务端frps
找一台公网机器,这里我用的阿里云的服务器。
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz
解压
tar -xvf frp_0.20.0_linux_amd64.tar.gz修改 frps.ini 文件,设置 http 访问端口为 8080:
1
2
3
4# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080因为服务器的80端口被nginx占用,所以我们利用nginx做一个反向代理,这样内网映射直接可以使用域名,不用加端口号了。
1
2
3
4
5
6
7
8
9
10
11server {
listen 80;
server_name *.17wpw.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;
client_max_body_size 500M;
}
}添加开机自动启动服务
vi /etc/systemd/system/frps.service 新建此文件,并写入以下内容:1
2
3
4
5
6
7
8
9[Unit]
Description=frps daemon
[Service]
Type=simple
ExecStart=/usr/bin/frps -c /etc/frps/frps.ini
[Install]
WantedBy=multi-user.target启动并设为开机自启。
$ systemctl start frps
$ systemctl enable frps
————centos6.5及以下———————
vi /etc/rc.local
在最下面加一行/usr/sbin/frp/frps -c /usr/sbin/frp/frps.ini
其中 /usr/sbin/frp 是程序放置的目录,重启ok把内网穿透的域名解析到服务器的IP。
使用客户端frpc
根据对应的操作系统及架构,从 Release 页面下载最新版本的程序,MacOs可以使用darwin_amd64.tar.gz版本。修改 frpc.ini 文件,假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名
www.yourdomain.com:1
2
3
4
5
6
7
8
9# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.comMacOs或者linux启动 frpc:
./frpc -c ./frpc.iniwindows可以新建一个bat文件放到目录中启动。
1
2
3
4@echo off
echo run begin
frpc.exe -c ./frpc.ini
pause