Loading... ## 什么是内网穿透 内网,就是在公司或者家庭内部,建立的局域网络或者是办公网络,</br>可以实现多台电脑之间的资源共享,包括设备、资料、数据等。</br>而外网则是通过一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,常见的就是我们日常使用的互联网。</br>简单来说就是给没有固定ip的网络设备服务分配一个固定ip 举个简单的例子: [![pFrH5wQ.png](https://s21.ax1x.com/2024/03/07/pFrH5wQ.png)](https://imgse.com/i/pFrH5wQ) 在济南同一路由下的设备可以相互访问,也可以访问一个有公网ip的服务器 [![pFrb9YR.png](https://s21.ax1x.com/2024/03/07/pFrb9YR.png)](https://imgse.com/i/pFrb9YR) 但不可以访问所属东营ip的设备,因为没有申请固定的ip,当路由重启时会重新获取ip ## 为什么使用内网穿透 原因 - 假设因为特殊原因在东营有一台电脑运行了MySQL数据库(192.168.4.3),在济南(192.168.3.3)进行访问这个数据库很显然是无法访问的 - 在济南(192.168.3.4)访问东营远程桌面(192.168.4.4::3389) - 不同局域网下网络无法互通 ## 如何使用内网穿透 实现不同局域网下网络互通 [![pFrbKfI.png](https://s21.ax1x.com/2024/03/07/pFrbKfI.png)](https://imgse.com/i/pFrbKfI) ### 使用frp进行反向代理,进行内网穿透 实现原理:通过拥有公网 IP 的节点进行中转 [![pFrb010.png](https://s21.ax1x.com/2024/03/07/pFrb010.png)](https://imgse.com/i/pFrb010) > 东营(192.168.4.3:3306)-> 阿里云(123.56.78.9:13306)将本地的3306映射到阿里云13306</br> > 济南(192.168.3.3)-> 阿里云(123.56.78.9:13306)济南即可访问东营数据库 ### 服务端搭建过程 前期准备: - 有公网ip的服务器一台(以ubuntu为例) - 服务器防火墙放行端口 - frp服务端口:7000(可自定义) - frp面板端口:8000(可自定义) - 下载程序到服务器选择合适的版本(以ubuntu为例 https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz) - 下载地址(https://github.com/fatedier/frp/releases/tag/v0.54.0) 1. 服务器端口放行 [![pFrLCM6.png](https://s21.ax1x.com/2024/03/07/pFrLCM6.png)](https://imgse.com/i/pFrLCM6) 2. 获取程序压缩包 [![pFrLtWn.png](https://s21.ax1x.com/2024/03/07/pFrLtWn.png)](https://imgse.com/i/pFrLtWn) ```bash wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz ``` 3. 解压 [![pFrLwLT.png](https://s21.ax1x.com/2024/03/07/pFrLwLT.png)](https://imgse.com/i/pFrLwLT) ```bash tar -zxvf frp_0.54.0_linux_amd64.tar.gz cd frp_0.54.0_linux_amd64 ``` 其中 frps frps.toml 为服务端程序</br> frpc frpc.toml 为客户端程序(暂时忽略) 4. 编辑配置文件 frps.toml [![pFrLfOK.png](https://s21.ax1x.com/2024/03/07/pFrLfOK.png)](https://imgse.com/i/pFrLfOK) 示例配置文件 ``` 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' # 客户端访问验证密码 ``` 5. 启动测试 ```bash ./frp_0.54.0_linux_amd64/frps -c ./frp_0.54.0_linux_amd64/frps.toml # -c 为选择配置文件 ``` [![pFrLITe.png](https://s21.ax1x.com/2024/03/07/pFrLITe.png)](https://imgse.com/i/pFrLITe) 访问面板 [![pFrL4eO.png](https://s21.ax1x.com/2024/03/07/pFrL4eO.png)](https://imgse.com/i/pFrL4eO) ![1709804091170.png](https://img2.imgtp.com/2024/03/07/mhVL53zL.png) 6. 启动成功后,可以使用进程守护等或其他方式,允许在后台运行即可 ### 客户端访问过程 1. 准备客户端程序(以win10为例) 下载地址:https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_windows_amd64.zip 2. 更改配置文件 其中 frps frps.toml 为服务端程序(暂时忽略)</br> frpc frpc.toml 为客户端程序 编辑 frpc.toml(记事本等即可) ![1709804333645.png](https://img2.imgtp.com/2024/03/07/MbCil7o4.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](https://img2.imgtp.com/2024/03/07/Qx9yBvhy.png) 3. 启动(远程电脑启动测试) 服务需保持后台运行 ```bash frpc.exe -c frpc.toml # -c 为选择配置文件 ``` ![1709804908590.png](https://img2.imgtp.com/2024/03/07/cD5r488N.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](https://img2.imgtp.com/2024/03/07/RepR7zVe.png) 面板数据 ![1709805350584.png](https://img2.imgtp.com/2024/03/07/hBSU4bDq.png) 最后修改:2024 年 03 月 11 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏