Administrator
发布于 2021-08-08 / 2095 阅读 / 1 评论 / 0 点赞

快速搭建frp的http和ssh的内网穿透

快速搭建frp的http和ssh的内网穿透

一、frp是个啥

中文文档:https://gofrp.org/docs/overview/

其实中文文档已经挺详细的了,但是依然还是有些坑的.

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

  • 为啥用frp?

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

二、服务器端环境

  • 一台公网服务器或者VPS
  • 一个指向到此台公网服务器的域名,本文以spacevast.com 为例(仅做ssh内网穿透不需要)
  • nginx
  • frp v0.37.1

1、先将frp专用子域名解析好

  • 取服务商的域名解析的地方,添加两条记录

*.frp.spacevast.com为A记录

frp.spacevast.com为A记录

记录值为服务器的公网ip

2、服务器端配置frp服务端

# 先切换到目录
cd /opt
# 下载到当前目录,如果下载不下来,就想办法在本地下载下来,上传上去
wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64.tar.gz

#解压
tar -zxvf frp_0.37.1_linux_amd64.tar.gz
mv frp_0.37.1_linux_amd64.tar.gz frp
cd frp
ll

image-20210808173454882

进入目录中可以看到 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE 这七个文件
• frpc:客户端可执行程序
• frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
• frpc.ini:客户端配置项
• frps:服务端可执行程序
• frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
• frps.ini:服务端配置项
• LICENSE:许可证
  • 修改服务端的配置文件frps.ini

各个参数说明详见官方文档 https://gofrp.org/docs/reference/server-configures/

[common]
bind_port = 7000
vhost_http_port = 7080

# 开启dashboard,frp提供了一个控制台,可以通过这个端口访问到控制台。可查看frp当前有多少代理连接以及对应的状态
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = xxxx

# 日志存放路径
log_file = /opt/data/frp/log/frps.log
log_level = warn
log_max_days = 7

# 服务端的subdomain_host需要和客户端配置文件中的subdomain、local_port配合使用,
# 可通过{subdomain}.{subdomain_host} 的域名格式来访问自己本地的 web 服务。
# 假如服务端的subdomain_host为frp.spacevast.com,客户端某个配置组中的
# subdomain为a,local_port为8585,
# 则访问 a.frp.spacevast.com ,等同于访问本地的localhost:8585
subdomain_host = frp.spacevast.com


uthentication_method = token
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = xxxxxx

# 开启prometheus监控
enable_prometheus = true

# 开启tcp穿透端口范围
allow_ports = 20000-30000

请一定要把端口7000/7500/7080/这三个端口在你的服务器提供商那里开放出来,如果用了宝塔,那么宝塔那边也需要开一次

  • 配置系统启动项frp
cd /etc/systemd/system
touch frps.service
vi frps.service

#把下面的内容粘贴进去
[Unit]
Description=frps service

[Service]
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=frp-service
User=root

[Install]
WantedBy=multi-user.target


#启动frp
systemctl start frps.service
  • 如果启动报错了,有可能是因为log目录没建立,请建立好log目录

log_file = /opt/data/frp/log/frps.log

mkdir -vp /opt/data/frp/log/

3、配置服务器端的nginx

server
{
    listen 80;
    server_name *.frp.spacevast.com frp.spacevast.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/frp.spacevast.com;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/frp.spacevast.com.conf;
    #REWRITE-END

    location / {
        # 7080端口即为frp监听的http端口
        proxy_pass http://127.0.0.1:7080; 
        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;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    access_log  /www/wwwlogs/frp.spacevast.com.log;
    error_log  /www/wwwlogs/frp.spacevast.com.error.log;
}
  • 重新加载nginx配置或重启nginx
nginx -s reload
#或者
systemctl restart nginx

三、客户端使用/配置

下载对应客户端的包:https://github.com/fatedier/frp/releases

image-20210808175030835

1、这里以windows为例子

  • 解压后得到如下目录

image-20210808175202037

  • 编辑客户端的ini文件frpc.ini
[common]
server_addr = 公网服务器的ip
server_port = 7000

# 开启token认证
authentication_method = token
authenticate_heartbeats = true
authenticate_new_work_conns = true
token = xxxxx(要和服务器配置的token一样)

[web01]
type = http
local_port = 81
#这里是二级域名,比如这个web01最终浏览器访问为 http://web01.frp.spacevast.com
subdomain= web01
use_encryption = true
use_compression = true
  • 命令行启动
#切换到frp所在目录
./frpc.exe
  • 出现如下信息说明启动成功

image-20210808175603015

  • 下面就可以浏览器输入

http://web01.frp.spacevast.com测试一下了~

四、dashboard

浏览器访问frp.spacevast.com,输入刚刚配置的账号密码访问

image-20210808175817520

五、通过ssh访问内网

  • 修改frps.ini文件,配置一个名为ssh的方向代理
# frps.ini
[common]
bind_port = 7000
[ssh]
listen_port = 6000
auth_token = 123456_
  • 启动frps
  • 修改frpc.ini文件
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
auth_token = 123456_
[ssh]
local_port = 22
  • 启动frpc
  • 通过ssh访问内网机器
ssh -oPort=6000 root@x.x.x.x

End.

给个一键三连呀~


评论