章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • linux

  • windows

  • 中间件

  • 网络

    • tcpdump 抓包分析全攻略
    • 网络代理
    • 网络工具
    • 给你的域名申请一个泛域名证书
    • tcpdump抓包教程
    • Wireshark抓包教程
    • 使用frp实现内网穿透
    • nat vps配置ddns
  • 安全

  • 存储

  • 防火墙

  • 数据库

  • 系统

  • docker

  • other

  • 监控

  • 运维
  • 网络
章工运维
2024-05-25

使用frp实现内网穿透

# 介绍

内网穿透是一种反向代理技术,允许你从任何位置访问一台处于复杂网络环境中的机器。它的应用场景有很多,例如,你在家中使用树莓派作为 Home Assistant 家庭中枢,但家庭网络的网关没有公网 IP,那么在离开家时就无法控制家中的智能设备。而在配置内网穿透后,就可以随时随地通过代理服务器的公网 IP 连接到树莓派,从而访问 Home Assistant 的服务。

内网穿透的原理是,利用一个具有固定公网 IP 的主机做跳板,让两个客户端建立 P2P 连接;如果不成功,就通过跳板主机中转,将所有流量代理到内网中的主机上。为不同需求所设计的内网穿透解决方案有很多,例如 frp (opens new window) 和 Cloudflare Tunnel。frp 允许你将内网中主机的端口映射到公网的主机上,因此使用起来非常直接。而 frp 的缺点是主机和端口都需要单独配置,如果要用多台设备组网,会有些繁琐;此外,这些端口都会直接暴露在公网上,安全性较差。另一个方案 Cloudflare Tunnel,可以直接用 Cloudflare 的节点进行中转,是非常不错的选择,但缺点和 frp 类似,在多台设备需要互相访问时很麻烦。如果需要将不同网络环境中的多台设备都配置内网穿透,并能够互相访问,那么使用 ZeroTier 搭建虚拟局域网是一个不错的选择

# 部署server端

在有公网ip的服务器部署,下载部署安装包

下载地址:https://github.com/fatedier/frp

在部署部署目录解压

tar -xf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
mkdir /etc/frp
cp frps.toml /etc/frp/
cp frps /usr/bin/
1
2
3
4
5

修改server端配置

vim /etc/frp/frps.toml



log.to = "/data/frp/frps.log"
log.level = "debug"           # 可进一步定位连接被拒绝的原因
log.maxDays = 3
bindPort = 7000                  # 通信端口必须使用下划线命名
vhostHTTPPort = 7001 #配置http代理需要开启
auth.token = "xxxx"
#token = "43884"                   # 建议改为更复杂的token
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "xxxx"
# 启用TCP多路复用
transport.tcpMux = true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#配置systemd启动服务
root@hcss-ecs-fd14:/data/frp# cat /etc/systemd/system/frps.service 
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为frps的安装路径
ExecStart = /usr/bin/frps -c /etc/frp/frps.toml

[Install]
WantedBy = multi-user.target


#启动服务
systemctl start frps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 部署client服务

在有nei网ip的服务器部署,下载部署安装包

下载地址:https://github.com/fatedier/frp

在部署部署目录解压

tar -xf frp_0.61.1_linux_amd64.tar.gz
cd frp_0.61.1_linux_amd64
mkdir /etc/frp
cp frpc.toml /etc/frp/
cp frpc /usr/bin/
1
2
3
4
5

修改客户端配置

vim /etc/frp/frpc.toml
serverAddr = "121.37.210.217"
serverPort = 7000
auth.token = "43884"

webServer.addr = "192.168.51.49"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin@123"
log.to = "/data/frp/frpc.log"
log.level = "debug"           # 可进一步定位连接被拒绝的原因
log.maxDays = 3
# 配置ssh服务
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "192.168.51.49"
localPort = 22
remotePort = 22000
[[proxies]]
name = "web01"
type = "tcp"
localPort = 10480
remotePort = 10480
[[proxies]]
name = "web02"
type = "tcp"
localIP = "192.168.51.47"
localPort = 32078
remotePort = 10482
#配置http的操作
[[proxies]]
name = "web"
type = "http"
localIP = "192.168.51.100"
localPort = 80
customDomains = ["xirang.quantchatai.top"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

启动服务

配置systemd启动服务
[root@localhost ~]# cat /etc/systemd/system/frpc.service 
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为frps的安装路径
ExecStart = /usr/bin/frpc -c /etc/frp/frpc.toml

[Install]
WantedBy = multi-user.target



#启动服务

systemctl start frpc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 在服务端配置nginx代理web

server {
    listen 80 ; 
    listen 443 ssl;
    server_name xirang.zzppjj.top; 
    index index.php index.html index.htm default.php default.htm default.html; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Host $server_name; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection $http_connection; 


  if ($scheme = http) {
          return 301 https://$host$request_uri; 
      }
      ssl_certificate /cert/zzppjj.top.crt;
      ssl_certificate_key /cert/zzppjj.top.key;
      ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1; 
      ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED; 
      ssl_prefer_server_ciphers on; 
      ssl_session_cache shared:SSL:10m; 
      ssl_session_timeout 10m; 
      error_page 497 https://$host$request_uri; 
      proxy_set_header X-Forwarded-Proto https; 
      add_header Strict-Transport-Security "max-age=31536000"; 


  location ^~ / {
      proxy_pass http://127.0.0.1:7001; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header REMOTE-HOST $remote_addr; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection $http_connection; 
      proxy_set_header X-Forwarded-Proto $scheme; 
      proxy_http_version 1.1; 
      add_header X-Cache $upstream_cache_status; 
      add_header Cache-Control no-cache; 
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

参考链接

通过自定义域名访问内网的 Web 服务 | frp (opens new window)

https://www.wxy97.com/archives/284c90ae-c88e-4928-b024-85380e995e06

微信 支付宝
上次更新: 2025/02/20, 17:21:00

← Wireshark抓包教程 nat vps配置ddns→

最近更新
01
shell脚本模块集合
05-13
02
生活小技巧(认知版)
04-29
03
生活小技巧(防骗版)
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式