frp内网穿透

1.frp介绍

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

2.frp原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成:服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

frp 支持的代理类型。
类型描述
tcp单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
udp单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。
http针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。
https针对 HTTPS 应用定制了一些额外的功能。
stcp安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
sudp安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
xtcp点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。
tcpmux支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。

3.frp代理自定义域名web服务(systemd管理)

3.1 systemd 控制 Frps启动

如Linux服务端上没有安装 systemd,可以使用 yum 或 apt 安装 systemd

# yum
yum install -y systemd
# apt
apt install -y systemd

3.2 下载

https://github.com/fatedier/frp/releases

3.3 服务端(公网)

  • 解压
mkdir /usr/local/frp    #创建frp目录
tar -zxvf frp_0.47.0_linux_amd64.tar.gz    #解压
mv frp_0.47.0_linux_amd64 /usr/local/frp    #将压缩包移动到frp目录中
cd /usr/local/frp    #移动到frp目录下
#如果解压报二进制文件错误,基本就是下错版本,重新下载操作系统对应的版本
  • 编辑frps.ini
vim frps.ini    #配置frps服务端
  • 写入内容
[common]
# 用于客户端和服务端连接的端口(公网现需要开通端口)
bind_port = 5680
# 服务端仪表板的端口(公网现需要开通端口)
dashboard_port = 5681
# token
token = 554554
# 可视化界面用户名
dashboard_user = root
# 可视化界面密码
dashboard_pwd = Theshy554
# 是否提供 Prometheus 监控接口(需要同时启用了 Dashboard 才会生效)
enable_prometheus = true
# 这个端口就是服务器开放到外网的,业务端口(公网现需要开通端口)
vhost_http_port = 5682
# frp日志保存目录
log_file = /usr/local/frp/frps.log
# 日志等级
log_level = info
# 日志保存天数
log_max_days = 3
  • frps启动配置(systemd)
# frp下创建system文件
mkdir /usr/local/frp system
# 进入system文件
cd system
  • 编辑frps.service
vim frps.service
  • 写入内容
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
# 需修改为frp的安装目录
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
  • 启动服务
sudo cp frps.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start frps.service
sudo systemctl enable frps.service

3.4 客户端(内网)

  • 解压
mkdir /usr/local/frp    #创建frp目录
tar -zxvf frp_0.47.0_linux_amd64.tar.gz    #解压
mv frp_0.47.0_linux_amd64 /usr/local/frp    #将压缩包移动到frp目录中
cd /usr/local/frp    #移动到frp目录下
#如果解压报二进制文件错误,基本就是下错版本,重新下载操作系统对应的版本
  • 编辑frps.ini
vim frpc.ini    #配置frps服务端
  • 写入内容
[common]
# 服务端 IP 地址
server_addr = *****
#  服务端端口,即服务端配置文件中的 bind_port
server_port = 5680
# 服务端设置的密码,即服务端配置文件中的 token
authentication_method = token
token = 554554

[web]
# 协议类型,tcp/udp/http/https/stcp/sudp
type = http
# 本地 IP 地址,即客户端 IP
local_ip = 127.0.0.1
# 本地端口,即需要从外网访问客户端的真实端口
local_port = 80
# 远程端口,即外网访问客户端时的端口
remote_port = 5682
# FRP服务器IP(可以不需要域名) 也可以为二级域名<your_vps_ domain>
custom_domains = *****
  • frps启动配置(systemd)
# frp下创建system文件
mkdir /usr/local/frp system
# 进入system文件
cd system
  • 编辑frps.service
vim frpc.service
  • 写入内容
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frpc \
  -c /usr/local/frp/frpc.ini
ExecReload=/usr/local/frp/frpc reload \
  -c /usr/local/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
  • 启动服务
sudo cp frpc.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start frpc.service
sudo systemctl enable frpc.service

3.5 访问

域名访问
http://<your_vps_ domain>/

IP访问
http://IP:5682/

4.frp代理自定义域名web服务(docker)

4.1 服务端(公网)

  • docker拉取frps
docker pull snowdreamtech/frps
  • 创建挂载目录
mkdir frps

cd frps
  • 创建挂载文件
vim frps.ini
  • 写入内容
[common]
# 用于客户端和服务端连接的端口
bind_port = 5680
# 服务端仪表板的端口
dashboard_port = 5681
# token
token = 554554
# 可视化界面用户名
dashboard_user = root
# 可视化界面密码
dashboard_pwd = Theshy554
# 是否提供 Prometheus 监控接口(需要同时启用了 Dashboard 才会生效)
enable_prometheus = true
# 这个端口就是服务器开放到外网的,业务端口
vhost_http_port = 5682
  • 创建docker-compose.yml
version: '3.0'
services:
  service_frps:
    image: snowdreamtech/frps:latest 
    container_name: container_frps
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./frps/frps.ini:/etc/frp/frps.ini    # 挂载数据目录
      - /etc/localtime:/etc/localtime  # 配置与系统时间一致
    # 授权
    privileged: true
    # 自启
    restart: always
    # network_mode: host(网络模式,所有容器端口都对应属主机端口,不存在映射关系)
    network_mode: host
  • 启动
docker-compose up --build -d
  • 查看日志
docker logs --tail -n -f container_frps

4.2 客户端(内网)

  • docker拉取frpc
docker pull snowdreamtech/frpc
  • 创建挂载目录
mkdir frpc

cd frpc
  • 创建挂载文件
vim frpc.ini
  • 写入内容
[common]
# 服务端 IP 地址
server_addr = *****
#  服务端端口,即服务端配置文件中的 bind_port
server_port = 5680
# 服务端设置的密码,即服务端配置文件中的 token
authentication_method = token
token = 554554

[web]
# 协议类型,tcp/udp/http/https/stcp/sudp
type = http
# 本地 IP 地址,即客户端 IP
local_ip = 127.0.0.1
# 本地端口,即需要从外网访问客户端的真实端口
local_port = 80
# 远程端口,即外网访问客户端时的端口
remote_port = 5682
# FRP服务器IP,可以不需要域名
custom_domains = *****
  • 创建docker-compose.yml
version: '3.0'
services:
  service_frps:
    image: snowdreamtech/frpc:latest 
    container_name: container_frpc
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./frpc/frpc.ini:/etc/frp/frpc.ini    # 挂载数据目录
      - /etc/localtime:/etc/localtime  # 配置与系统时间一致
    # 授权
    privileged: true
    # 自启
    restart: always
    # network_mode: host(网络模式,所有容器端口都对应属主机端口,不存在映射关系)
    network_mode: host
  • 启动
docker-compose up --build -d
  • 查看日志
docker logs --tail -n -f container_frpc
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值