使用frp进行内网穿透

Posted 已注销

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用frp进行内网穿透相关的知识,希望对你有一定的参考价值。

1. frp概念

  • frp 是一个专注于内网穿透的高性能的反向代理应用
  • frp分为两部分

    • frpc 客户端,工作在内网服务器上
    • frps 服务器端,工作在公网服务器上
  • 一个代理对应一个服务,frpc可以支持多个代理
  • 项目地址

2. 使用frp部署内网穿透服务

2.1 下载frp部署文件

  • 在frp项目的release页面,下载特定版本的frp项目文件,将项目两件分别放入公网服务器与内网服务器,并解压,进入解压后的项目文件

2.2 公网服务器配置

  • frps.ini
echo "
[common]
bind_port = ${bind_port}
# validation, same in frpc.
initoken = ${token}
# Dashboard config
dashboard_port = ${dashboard_port}
dashboard_user = ${user}
dashboard_pwd = ${passwd}
# http://{dashboard_addr}/metrics will provide prometheus monitor
data.enable_prometheus = true" > /opt/frps.ini
  • 项目目录执行 sudo nohup ./frps -c /opt/frps.ini
  • 可选的配置:proxy_bind_addr = 127.0.0.1

    • 解释:将内网服务映射到公网主机的内网IP上,而不是公网IP,在使用nginx或OpenResty做公网服务代理的时候,只需要将请求转发到公网服务器的特定端口即可,因此无需将内网服务映射到公网IP,提升安全性
    • 注意不要与bind_addr=127.0.0.1混淆,后者表示的是frps与frpc通信的绑定地址(网卡)

2.3 内网服务器配置

  • frpc.ini
echo "
[common]
server_addr = ${public_ip}
server_port = ${bind_port}token = ${token}
# set admin address for control frpc\'s action by http api such as reload
admin_addr = 127.0.0.1
admin_port = 7400
[ssh]
type = tcp
local_ip = ${local_ip}
local_port = ${local_ssh_port}
# remote port listen by frps
remote_port = ${public_ssh_port}" > /opt/frpc.ini
  • 项目根目录执行 nohup ./frpc -c ./frpc.ini
  • 备注:

    • bind_port是frp客户端与服务器端通讯的端口
    • 访问ssh_public_port端口的流量将会被转发到本地服务对应的端口${local_ip}:${local_ssh_port}
    • 在项目根目录执行./frpc reload -c ./frpc.ini进行配置文件的热更新

3. 使用案例与其他特性补充

  • 场景:内网三台主机,IP分别为:10.107.1.3010.107.1.3110.107.1.32,公网主机一台,IP为${public_ip},要对内网的三台主机的ssh服务做内网穿透
  • frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400
server_addr = ${public_ip}
server_port = 7000
[range:ssh]
type = tcp
local_ip = 127.0.0.1
# 按照先后顺序保持对应
local_port = 22,61274
remote_port = 61001,61274
[bd2-ssh]
type = tcp
local_ip = 10.107.1.31
local_port = 22
remote_port = 61002
[bd3-ssh]
type = tcp
local_ip = 10.107.1.32
local_port = 22
remote_port = 61003
  • 注意:

    • 只需在一台服务器的frpc进行即可完成三台同一网段的主机的内网穿透,关键在于:remote_port不能冲突[bd2-ssh]方框内的名字不能冲突
  • frps.ini
[common]
dashboard_port = 61000
dashboard_user = dockerhub
dashboard_pwd = ${password}
# validation, same in frpc.
initoken = ${token}
enable_prometheus = true
bind_port = 7000

4. Docker部署

4.1 准备上述的两个配置文件,并进行自定义配置

  • frpc.ini
  • frps.ini

4.2 在公网主机执行下述操作

docker run \\
--restart=always \\
--network host \\
-d \\
-v /opt/frps.ini:/etc/frp/frps.ini \\
--name frps \\
snowdreamtech/frps

4.3 在内网主机执行下述操作

docker run \\
--restart=always \\
--network host \\
-d \\
-v /opt/frpc.ini:/etc/frp/frpc.ini \\
--name frpc 
snowdreamtech/frpc

5. 其他特性补充

  • frp获取用户真实IP
  • frp支持url路由

6. 配置frp注意事项

  • 在配置跳板机服务器的端口映射时,注意放行跳板机的对应端口,并设置端口放行类型: 例如配置WireGuard映射内网端口到公网跳板机上时,在跳板机上放行UDP类型的映射端口

原文地址

以上是关于使用frp进行内网穿透的主要内容,如果未能解决你的问题,请参考以下文章

内网穿透神器frp

frp内网穿透怎么做到可以满足多个设备啊,我有个lede和nas都想进行内网穿透,可以吗?

树莓派使用FRP实现内网穿透教程

Frp---树莓派4B内网穿透

云服务器frp内网穿透配置说明

frp内网穿透