FRP实现内网穿透

1,596 阅读4分钟

FRP

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

frp服务端

CentOS7安装frps

  • 下载安装包
wget https://github.com/fatedier/frp/releases/download/v0.28.2/frp_0.28.2_linux_amd64.tar.gz
  • 解压文件
tar -xzvf frp_0.28.2_linux_amd64.tar.gz
  • 创建frps文件夹
mkdir frps
  • 拷贝服务端文件到frps文件夹
cd frp_0.28.2_linux_amd64
cp frps frps_full.ini frps.ini ../frps
  • 测试frps是否正常运行
./frps --help 

正常显示如下:

[root@hecs-centos-7 frps]# ./frps --help
frps is the server of frp (https://github.com/fatedier/frp)

Usage:
  frps [flags]

Flags:
      --allow_ports string         allow ports
      --bind_addr string           bind address (default "0.0.0.0")
  -p, --bind_port int              bind port (default 7000)
      --bind_udp_port int          bind udp port
  -c, --config string              config file of frps
      --dashboard_addr string      dasboard address (default "0.0.0.0")
      --dashboard_port int         dashboard port
      --dashboard_pwd string       dashboard password (default "admin")
      --dashboard_user string      dashboard user (default "admin")
  -h, --help                       help for frps
      --kcp_bind_port int          kcp bind udp port
      --log_file string            log file (default "console")
      --log_level string           log level (default "info")
      --log_max_days int           log max days (default 3)
      --max_ports_per_client int   max ports per client
      --proxy_bind_addr string     proxy bind address (default "0.0.0.0")
      --subdomain_host string      subdomain host
  -t, --token string               auth token
  -v, --version                    version of frpc
      --vhost_http_port int        vhost http port
      --vhost_http_timeout int     vhost http response header timeout (default 60)
      --vhost_https_port int       vhost https port
  • 编辑frps.ini

    # 下面这句开头必须要有,表示配置的开始
    [common]
    
    # frp 服务端端口,客户端通过这个端口注册到服务端(必须)
    bind_port = 7000
    
    # 仪表盘端口,只有设置了才能使用仪表盘(即后台)
    dashboard_port = 7500
    # 仪表盘访问的用户名密码,如果不设置,则默认都是 admin
    dashboard_user = admin
    dashboard_pwd = admin
    
    # http、https监听端口(端口可以自定义,外网服务器的对应端口要开放)
    vhost_http_port = 10080
    vhost_https_port = 10443
    
  • 启动frps命令

./frps -c ./frps.ini
  • 保持frps后台运行命令
nohup ./frps -c ./frps.ini &

配置systemctl 操作 frps

  • 创建frps.service
sudo vim /lib/systemd/system/frps.service
  • 在frps.service里添加一下内容 ExecStart 根据自己的实际路径填
[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/local/frps/frps -c /usr/local/frps/frps.ini  //启动服务的命令(此处写你的frps的实际安装目录)

[Install]
WantedBy=multi-user.target
  • 开启服务器开机自动启动frps
sudo systemctl enable frps
  • 启动frps
sudo systemctl start frps
  • 重启frps
 sudo systemctl restart frps
  • 停止frps
sudo systemctl stop frps
  • 查看日志
sudo systemctl status frps

访问frps控制台

http://ip:7500

frp客户端

windows安装frpc

# 下面这句开头必须要有,表示配置的开始
[common]

# frp服务端的地址
server_addr = 0.0.0.0
# frp服务端的端口
server_port = 7000

# 配置http内网穿透
# 为配置项取的别名,可以配置多个监听
[http]
# 监听类型
type = http
# 监听本地的地址
local_ip = 127.0.0.1
# 监听本地的端口
local_port = 8080
# 自定义域名(custom_domains和subdomain只能配置一个,frp根据配置的值,判断是否转发请求)
custom_domains = hw2.smilezq.cn
  • 在cmd中运行frpc.exe
D:\program\frp_0.36.2_windows_amd64>frpc.exe
2021/03/31 18:14:55 [I] [service.go:304] [9a47f97bc995ae1c] login to server success, get run id [9a47f97bc995ae1c], server udp port [0]
2021/03/31 18:14:55 [I] [proxy_manager.go:144] [9a47f97bc995ae1c] proxy added: [http]
2021/03/31 18:14:55 [I] [control.go:180] [9a47f97bc995ae1c] [http] start proxy success
  • 访问内网穿透地址
h2.smilezq.cn:10080

custom_domains和subdomain

custom_domains:

  • 自定义域名,用于定义http内网穿透时访问的地址,可以配置多个,以英文逗号分隔

    访问格式:http://custom_domains:port

  • frps.ini 配置了subdomain_hostcustom_domains不能是其子域名或者泛域名

subdomain:

  • 子域名,和frps.ini 配置的subdomain_host协作使用,实现多个内网穿透的配置

​ 访问格式:http://subdomain.subdomain_host:port

frp实现http内网穿透客户端配置

# 下面这句开头必须要有,表示配置的开始
[common]

# frp服务端的地址
server_addr = 0.0.0.0
# frp服务端的端口
server_port = 7000

# 配置http内网穿透
# 为配置项取的别名,可以配置多个监听
[http]
# 监听类型
type = http
# 监听本地的地址
local_ip = 127.0.0.1
# 监听本地的端口
local_port = 8080
# 自定义域名(custom_domains和subdomain只能配置一个,frp根据配置的值,判断是否转发请求)
custom_domains = hw2.smilezq.cn

frp实现windows远程客户端配置

# 下面这句开头必须要有,表示配置的开始
[common]

# frp服务端的地址
server_addr = 0.0.0.0
# frp服务端的端口
server_port = 7000

# 为配置项取的别名
[windowsControl]
# 监听类型
type = tcp
# 监听本地的地址
local_ip = 127.0.0.1
# 监听本地的端口
local_port = 3389
remote_port = 3389