什么是内网穿透

内网,就是在公司或者家庭内部,建立的局域网络或者是办公网络,
可以实现多台电脑之间的资源共享,包括设备、资料、数据等。
而外网则是通过一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,常见的就是我们日常使用的互联网。
简单来说就是给没有固定ip的网络设备服务分配一个固定ip

举个简单的例子:

pFrH5wQ.png

在济南同一路由下的设备可以相互访问,也可以访问一个有公网ip的服务器

pFrb9YR.png

但不可以访问所属东营ip的设备,因为没有申请固定的ip,当路由重启时会重新获取ip

为什么使用内网穿透

原因

  • 假设因为特殊原因在东营有一台电脑运行了MySQL数据库(192.168.4.3),在济南(192.168.3.3)进行访问这个数据库很显然是无法访问的
  • 在济南(192.168.3.4)访问东营远程桌面(192.168.4.4::3389)
  • 不同局域网下网络无法互通

如何使用内网穿透

实现不同局域网下网络互通

pFrbKfI.png

使用frp进行反向代理,进行内网穿透

实现原理:通过拥有公网 IP 的节点进行中转

pFrb010.png

东营(192.168.4.3:3306)-> 阿里云(123.56.78.9:13306)将本地的3306映射到阿里云13306

济南(192.168.3.3)-> 阿里云(123.56.78.9:13306)济南即可访问东营数据库

服务端搭建过程

前期准备:

  1. 服务器端口放行

pFrLCM6.png

  1. 获取程序压缩包

pFrLtWn.png

wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
  1. 解压

pFrLwLT.png

tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64

其中 frps frps.toml 为服务端程序

frpc frpc.toml 为客户端程序(暂时忽略)

  1. 编辑配置文件 frps.toml

pFrLfOK.png

示例配置文件

bindPort = 7000 # 服务端口
webServer.port = 8000 # 面板端口 
webServer.user = '53c24^K%61*s78V' # 面板登录名
webServer.password = '4@X7D7p#1aEq*1Z' # 面板登录密码
webServer.addr = '172.17.16.102' # 面板访问地址(内网地址 172.17.16.102)
auth.mothod = 'token' # 客户端访问验证方式
auth.token = '*6!4k4su046WXs@3uA%7!F8&07&n*bNcK#A#^3pYO^tJriav2K' # 客户端访问验证密码
  1. 启动测试
./frp_0.54.0_linux_amd64/frps -c ./frp_0.54.0_linux_amd64/frps.toml # -c 为选择配置文件

pFrLITe.png

访问面板

pFrL4eO.png

1709804091170.png

  1. 启动成功后,可以使用进程守护等或其他方式,允许在后台运行即可

客户端访问过程

  1. 准备客户端程序(以win10为例)
    下载地址:https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_windows_amd64.zip
  2. 更改配置文件

其中 frps frps.toml 为服务端程序(暂时忽略)

frpc frpc.toml 为客户端程序

编辑 frpc.toml(记事本等即可)

1709804333645.png

serverAddr = "47.76.92.71" # 服务端ip
serverPort = 7000 # 服务端端口
auth.mothod = 'token' # 客户端访问验证方式
auth.token = '*6!4k4su046WXs@3uA%7!F8&07&n*bNcK#A#^3pYO^tJriav2K' # 客户端访问验证密码

[[proxies]]
name = "dy_mysql" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 客户端的ip(固定)
localPort = 3306 # 客户端服务端口
remotePort = 13306 # 映射到服务端端口(服务器许放行)

1709804570348.png

  1. 启动(远程电脑启动测试)

服务需保持后台运行

frpc.exe -c frpc.toml # -c 为选择配置文件

1709804908590.png

如果被访问的设备无法启动客户端可以通过更改配置文件

dy_mysql和dy_video需在同一局域网下

例如:被穿透的是一个监控摄像头(192.168.6.8:5522)

serverAddr = "47.76.92.71" # 服务端ip
serverPort = 7000 # 服务端端口
auth.mothod = 'token' # 客户端访问验证方式
auth.token = '*6!4k4su046WXs@3uA%7!F8&07&n*bNcK#A#^3pYO^tJriav2K' # 客户端访问验证密码

[[proxies]]
name = "dy_mysql" # 客户端服务名
type = "tcp" # 通讯方式
localIP = "127.0.0.1" # 客户端的ip(固定)
localPort = 3306 # 客户端服务端口
remotePort = 13306 # 映射到服务端端口(服务器需放行)

[[proxies]]
name = "dy_video" # 客户端服务名_一个监控摄像头
type = "tcp" # 通讯方式
localIP = "192.168.6.8" # 客户端的ip(固定)
localPort = 5522 # 客户端服务端口
remotePort = 15522 # 映射到服务端端口(服务器需放行)

更多示例

https://gofrp.org/zh-cn/docs/examples/

穿透测试

以访问MySQL为例

1709805120311.png

面板数据

1709805350584.png

最后修改:2024 年 03 月 11 日
如果觉得我的文章对你有用,请随意赞赏