什么是内网穿透
内网,就是在公司或者家庭内部,建立的局域网络或者是办公网络,可以实现多台电脑之间的资源共享,包括设备、资料、数据等。而外网则是通过一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,常见的就是我们日常使用的互联网。简单来说就是给没有固定ip的网络设备服务分配一个固定ip
举个简单的例子:
在济南同一路由下的设备可以相互访问,也可以访问一个有公网ip的服务器
但不可以访问所属东营ip的设备,因为没有申请固定的ip,当路由重启时会重新获取ip
为什么使用内网穿透
原因
- 假设因为特殊原因在东营有一台电脑运行了MySQL数据库(192.168.4.3),在济南(192.168.3.3)进行访问这个数据库很显然是无法访问的
- 在济南(192.168.3.4)访问东营远程桌面(192.168.4.4::3389)
- 不同局域网下网络无法互通
如何使用内网穿透
实现不同局域网下网络互通
使用frp进行反向代理,进行内网穿透
实现原理:通过拥有公网 IP 的节点进行中转
东营(192.168.4.3:3306)-> 阿里云(123.56.78.9:13306)将本地的3306映射到阿里云13306
济南(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)
- 服务器端口放行
- 获取程序压缩包
wget https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_linux_amd64.tar.gz
- 解压
tar -zxvf frp_0.54.0_linux_amd64.tar.gz
cd frp_0.54.0_linux_amd64
其中 frps frps.toml 为服务端程序
frpc frpc.toml 为客户端程序(暂时忽略)
- 编辑配置文件 frps.toml
示例配置文件
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' # 客户端访问验证密码
- 启动测试
./frp_0.54.0_linux_amd64/frps -c ./frp_0.54.0_linux_amd64/frps.toml # -c 为选择配置文件
访问面板
- 启动成功后,可以使用进程守护等或其他方式,允许在后台运行即可
客户端访问过程
- 准备客户端程序(以win10为例)
下载地址:https://github.com/fatedier/frp/releases/download/v0.54.0/frp_0.54.0_windows_amd64.zip - 更改配置文件
其中 frps frps.toml 为服务端程序(暂时忽略)
frpc frpc.toml 为客户端程序
编辑 frpc.toml(记事本等即可)
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 # 映射到服务端端口(服务器许放行)
- 启动(远程电脑启动测试)
服务需保持后台运行
frpc.exe -c frpc.toml # -c 为选择配置文件
如果被访问的设备无法启动客户端可以通过更改配置文件
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为例
面板数据
此处评论已关闭