【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_客户端



😊你好,我是小航,一个正在变秃、变强的文艺倾年。

🔔本文讲解动手自己搭建内网穿透,期待与你一同探索、学习、进步,一起卷起来叭!

目录

  • 一、前言
  • 内网穿透是什么?
  • frp介绍:
  • 工作原理:
  • 代理:
  • 代理类型:
  • 二、部署
  • 服务端:
  • 客户端:


一、前言

内网穿透是什么?

💭内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是,当我们在端口映射时设置时,内网穿透起到了地址转换的功能,也就是把公网的地址进行翻译,转成为一种私有的地址,然后再采用路由的方式ADSL的宽带路由器,具有一个动态或者是固定的公网IP,最后ADSL直接在 交换机上,这样所有的电脑都可以共享上网。内网穿透除了可以实现内网之间机器的网络通信功通之外,还可以解决UDP中出现的数据传输不稳定问题。

简单说,就是A客户端要访问B客户端,通过一台服务器进行桥接,桥接有两种方式,一种是相互转发,另一个是告诉对方的地址,自己就当一个介绍人的角色。

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_网络_02


小明的电脑和张三家里的电脑分别处在两个不同的局域网内,如果小明想访问张三家电脑的资源,这时就需要运用到内网穿透。借助frp端口映射技术进行内网穿透

张三在家办公想用家里的电脑,访问公司的电脑资源,这时也可以借助frp工具进行内网穿透进行实现

总结:在一个可以访问互联网的设备上,访问一个内网中的资源。

frp介绍:

frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 、 http 和 https。可将一个部署在本机的web服务映射到外网。

🚩 官方文档:https://github.com/fatedier/frp/

工作原理:

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

由于内网服务缺乏公网 IP 地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的 frps,frp 负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

具体工作流程如下:

  1. 服务端运行,监听一个主端口,等待客户端的连接;
  2. 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
  3. 服务端fork新的进程监听客户端指定的端口;
  4. 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
  5. 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

代理:

在 frp 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

代理类型:

frp 支持多种代理类型,以适应不同的使用场景。以下是一些常见的代理类型:

  • TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
  • UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
  • HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
  • HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
  • STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
  • XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
  • TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。

每种代理类型适用于不同的使用情境,可以根据需求选择合适的代理类型来配置 frp。

二、部署

💭 准备条件:

  1. 云服务器或具有公网IP的服务器,用于安装frp服务端(frps),推荐开启端口:7000-7015、7500
  2. 需要内网穿透的服务器,如树莓派,将安装frp客户端(frpc),推荐开启端口:7000,7400,额外的端口号
  3. 上述1和2的服务器均安装好Docker

服务端:

mkdir -p  /data/frp
vim /data/frp/frps.ini
[common]
# 服务器开放给客户端的frp端口
bind_port = 7000
# http端口
vhost_http_port = 7010
# https端口
vhost_https_port = 7011

# 控制面板端口,用户名,密码
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin123456

# 自己用于frp服务的域名或者ip地址
subdomain_host = xxxxxxxx
# frps服务token,拥有此token的客户端才允许连接
token = ipbd
docker pull snowdreamtech/frps

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

访问服务器IP:7500,输入账号密码,就可以看到dashboard页面了

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_java_03

客户端:

Linux端:

mkdir -p  /data/frp
vim /data/frp/frpc.ini
[common]
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin123456
# 打开浏览器通过 http://127.0.0.1:7400 访问 Admin UI

# frps服务器地址,可用域名,即服务端的域名或者ip
server_addr = XXX.XXX.XXX.XXX
server_port = 7000
token = ipbd

[admin_ui]
type = tcp
local_port = 7400
remote_port = 7400

# 推荐协议使用TCP
[tcp]
type = tcp
local_ip = 127.0.0.1
# 本地端口号
local_port = 8000
# 远程端口号
remote_port = 7001

# [web]
# type = http
# local_port = 8000
# custom_domains = XXXX
docker pull snowdreamtech/frpc

docker run --restart=always --network host -itd -v /data/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc:0.50.0

连接成功:

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_内网穿透_04


本地服务测试:

docker run --name testNginx -d -p 8000:80 nginx

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_服务端_05


远程服务测试:

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_服务端_06


测试成功!

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2024.5.12
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

【搬砖实战】2024年了,还有人不会搭建内网穿透吗?_客户端_07