Frp内网穿透配置

156 阅读2分钟
  1. 准备事项:
    1. 服务端:有公网IP的设备,阿里云最小的突发实例即可。
    2. 客户端:内网设备。

FRP的文档写的很清晰,非常建议去官方文档查看

  1. 下载: 在FRP github根据不同系统下载Release包,解压到目标位置,假设解压目录为 ~/frp

  2. 客户端配置

修改~/frp/frpc.ini文件为一下内容

[common]
# 你的服务器ip地址
server_addr = xx.xx.xx.xx
# 服务端的开放端口号
server_port = 7000
# 对应服务端配置的token
token = xxxxxxxxxxxx

# 下面四个配置是用户查看客户端dashboard用,配置后使用http://xx.xx.xx.xx:7400/可查看
; admin_addr = 127.0.0.1
; admin_port = 7400
; admin_user = admin
; admin_pwd = admin

# 以下配置可以开启客户端ssh能力
# 如果是mac需要注意在设置中开启共享-远程登录能力
# 如果报错可尝试将127.0.0.1修改为实际ip地址
# 文档地址:https://gofrp.org/docs/examples/ssh/
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

# 开启一个服务,方括号内为服务名,可自定义,但不要使用common和ssh
# local_port是本地web开启的端口
# custom_domains是哪个domain会访问到这个服务
# 文档地址:https://gofrp.org/docs/examples/vhost-http/
[web1]
type = http
local_port = 5173
custom_domains = your.own.domain

# 同上
; [web2]
; type = http
; local_port = 3000
; custom_domains = your.own.domain

# 以下为启动一个文件服务,注意这个服务会走公网服务器的流量
# 如果不想走公网服务器流量,建议使用点对点内网透传
# 点对点内网透传:https://gofrp.org/docs/examples/xtcp/
; [static_file]
; type = tcp
; remote_port = 9000
; plugin = static_file
# 要对外暴露的文件目录
; plugin_local_path = /your/local/file/dir
# 用户访问 URL 中会被去除的前缀,保留的内容即为要访问的文件路径
# 通过http://xx.xx.xx.xx:9000/static/即可访问文件
; plugin_strip_prefix = static
; plugin_http_user = xxxx
; plugin_http_passwd = xxxxxxxxxxxx
  1. 服务端配置
  2. 修改~/frp/frps.ini文件为以下内容
[common]
# 对应frpc.ini的remote_port,保持一致即可
bind_port = 7000
# 对应frpc.ini的token,保持一致即可
token = xxxxxxxxxxxx

# frp开放web服务的端口号,如果需要web服务则必须配置,后续在nginx代理中也会用到
vhost_http_port = 8080
# 可以开放一个统计网站
dashboard_port = 7588

# 统计网站的登录用户
dashboard_user = xxxx
dashboard_pwd = xxxxxxxxxx
enable_prometheus = true

log_file = /path/to/your/frps.log
log_level = info
log_max_days = 3
  1. 开放端口
  • 如果是在阿里云租的服务器,需要在安全组开放以下端口号
    • 所有配置过的 remote_port
    • vhost_http_port
    • bind_port
    • dashboard_port
  1. 到此,已经可以使用ssh服务了
$ ssh username@xx.xx.xx.xx

username看到网上有文档说是要用服务端的,这里我用的是我的mac的用户名

  1. 如果配置了web服务,就可以使用ip:port访问到配置的服务了

  2. 配置https 如果不需要https的小伙伴到上面就可以 FRP本身是支持https的,为本地 HTTP 服务启用 HTTPS 如果想用nginx做https,可以这样配置

server {
  listen       443 ssl;
  server_name  your.own.domain;
  ssl_certificate      /etc/ssl/certs/your.own.domain.pem; # 申请的ssl.pem文件
  ssl_certificate_key  /etc/ssl/private/your.own.domain.key; # 申请的ssl.key文件
  # 下面这四个不记得从哪里抄的了
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;
  location / {
    proxy_pass http://127.0.0.1:8080; # 8080对应vhost_http_port
    # 下边的东西忘记照哪个文档抄的了
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_max_temp_file_size 0;
    proxy_redirect off;
    proxy_read_timeout 240s;
  } 
}