准备
- 云服务器一台(或者有公网ip的机器);
- 内网服务器一台或者自己的windows电脑也可以;
- 域名一个(可选);
在云服务器上搭建服务
下载服务端软件
注意要根据自己的服务器的架构来选择,不要选错版本了 github地址:github.com/fatedier/frp 下载相应的 Release 版本
查看linux服务器体系结构方法 可以通过下面的命令查看自己的服务器的系统的架构
uname -a
如果下载的文件被windows报毒的话可以在windows security里面排除你要放置的下载的文件的目录,然后再下载就可以了
安装服务 frps
1、解压 tar -xvf \*\*\*\*.tar.gz
2、配置 vi frps.ini
只有公网ip的配置文件
[common]
# 与client通讯的端口
bind_port = 7000
vhost_http_port = 8111
# 验证的token
token = xxxx
# dashboard的端口
dashboard_port = 6600
# 用户名
dashboard_port = admin
# 密码
dashboard_pwd = xxxx
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info
有域名的配置文件
[common]
# 与client通讯的端口
bind_port = 7000
vhost_http_port = 8111
# 验证的token
token = xxxx
# dashboard的端口
dashboard_port = 6600
# 用户名
dashboard_port = admin
# 密码
dashboard_pwd = xxxx
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info
# 服务端的subdomain_host需要和客户端配置文件中的subdomain、local_port配合使用,
# 可通过{subdomain}.{subdomain_host} 的域名格式来访问自己本地的 web 服务。
# 假如服务端的subdomain_host为dev.msh.com,客户端某个配置组中的
# subdomain为a,local_port为8585,
# 则:
# 访问 a.dev.msh.com ,等同于访问本地的localhost:8585
subdomain_host = 你自己的域名
frp后台运行和停止
要先cd到对应的frp的目录下面然后再执行对应的命令才可以
# 普通启动
./frps -c frps.toml
#后台运行
nohup ./frps -c frps.ini >/dev/null 2>&1 &
#查找服务
ps -aux|grep frp| grep -v grep
ps -ef | grep frps
[1]12345
#kill进程
kill -9 12345
记得在腾讯云里面放开端口以及还需要去1panel里面放行对应的端口
自启动脚本
创建服务脚本(不起作用)
ubuntu
sudo vim /lib/systemd/frpp.service
#----------------------
[Unit]
Description=frps Service
[Service]
WorkingDirectory=/opt/frp_0.52.3_linux_amd64/
ExecStart=/opt/frp_0.52.3_linux_amd64/start.sh
# 下面的这个ubuntu就是对应的用户名
User=ubuntu
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
配置文件好像从ini变成了toml了
这个脚本必须和frps的配置文件在同一个文件夹里面,不然的话使用脚本启动就不起作用
sudo vim /opt/frp_0.52.3_linux_amd64/start.sh
#---------------
#!/bin/bash
nohup /opt/frp_0.52.3_linux_amd64/frps -c frps.toml >/dev/null 2>&1 &
chmod +x /opt/frp_0.52.3_linux_amd64/start.sh
启动脚本
cd /opt/opt/frp_0.52.3_linux_amd64/
. start.sh
花里胡哨的,还是直接命令启动最靠谱
配置客户端并运行
- 1、下载相应的 Release版本需要和服务端的版本一致
- 2、配置frpc.ini
http服务的配置
无域名的配置
[common] # 云服务器ip server_addr = 你的云服务器的ip地址 # frps服务端和frpc客户端通讯的端口 server_port = 7000 # 密码 token = xxxx [web] type = http local_ip = 127.0.0.1 # 本地需要暴露的服务的端口 local_port = 18081 # 云服务器的ip或者云服务器的域名 custom_domains = 你的云服务器的ip地址
有域名的配置
```sh [common] server_addr = 你的云服务器的ip地址 server_port = 7000 token = xxxx [web] type = http local_ip = 127.0.0.1 local_port = 18081 subdomain = a
[pandora] type = http local_ip = 192.168.100.2 local_port = 8899 subdomain = b # 配合服务端的subdomain_host 相当于b.你的域名 这个域名
**访问内网http服务**
custom\_domains:vhost\_http\_port 如:服务器ip.45:8111就可以访问到对应的本地的localhost:18081的服务了
## 远程桌面的配置
注意事项: 7005不一定要在服务器端的配置文件里面定义,只需要防火墙里面放行这个端口即可
1panel里面放行了端口还不行,一定要到腾讯云的防火墙里面放行7005的端口
这样哪怕没有域名也可以实现通过IP+不同的端口 穿透不同的服务了
```sh
[common]
# 云服务器ip
server_addr = 你的云服务器的ip地址
# frps服务端和frpc客户端通讯的端口
server_port = 7000
# 密码
token = xxxx
[RDP]
type = tcp
local_ip = 127.0.0.1
# 本地需要暴露的服务的端口(这个是远程桌面服务的端口,不要修改)
local_port = 3389
remote_port = 7005
- 3、 运行
进入到对应的目录里面,记得安全中心里面排除frp软件的目录,不然会报错cd D:\ruanjianbao\frp_0.51.3_windows_amd64\ # cmd里面这样设置 frpc.exe -c frpc.ini # powershell里面这样设置 .\frpc.exe -c .\frpc-tencent-remoteDesktop.ini
注意:
1)服务器端和内网机器端下载的版本要相同,否则可能会影响内网穿透
2)根据服务器系统选择合适的脚本
frp + nginx 配置
nginx配置文件,这样就可以直接通过域名来访问了,不需要手动的输入端口了
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
server {
#listen 11443 ssl;
listen 80;
server_name *.domain.com domain.com;
location / {
# 8111端口即为frp监听的http端口
proxy_pass http://127.0.0.1:8111;
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
# 防止爬虫抓取
if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
{
return 403;
}
}
}
所有通过domain.com域名访问的请求都会被代理到127.0.0.1的8111端口,这个端口是被frp监听的,请求会被代理到客户端的对应的服务上面
openwrt中的配置
更换服务器的ip之后,记得要把openvpn里面的配置文件更新一下
把里面的这个地方的ip和端口更换掉
修改成如下所示