go实现局域网内网穿透支持将内网80端口暴露到公网单文件代码

代码语言:golang

所属分类:其他

代码描述:go实现局域网内网穿透支持将内网80端口暴露到公网单文件代码,简单易用 - 单文件部署,命令行配置 自动重连- 客户端断线自动重连 心跳保活*- 自动心跳维持连接 多隧道支持** - 支持多个并发连接 跨平台- 支持Linux/Windows/macOS 低延迟 - 直接TCP转发,性能好 稳定可靠- 完善的错误处理和日志

代码标签: go 局域网 内网 穿透 支持 内网 80 端口 暴露 公网 单文件 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开


// ## 使用说明

// ### 1. 保存代码
// 将代码保存为 `tunnel.go`

// ### 2. 编译(可选)

// ```bash
// # 编译服务端(Linux)
// GOOS=linux GOARCH=amd64 go build -o tunnel-server tunnel.go

// # 编译客户端(Windows)
// GOOS=windows GOARCH=amd64 go build -o tunnel-client.exe tunnel.go

// # 编译客户端(macOS)
// GOOS=darwin GOARCH=amd64 go build -o tunnel-client tunnel.go

// # 本地编译
// go build -o tunnel tunnel.go
// ```

// ### 3. 在公网服务器上运行服务端

// ```bash
// # 直接运行
// go run tunnel.go -mode=server -control-port=8888 -public-port=8080

// # 或使用编译后的二进制
// ./tunnel -mode=server -control-port=8888 -public-port=8080

// # 后台运行
// nohup ./tunnel -mode=server -control-port=8888 -public-port=8080 > tunnel.log 2>&1 &
// ```

// **参数说明:**
// - `-control-port=8888`:客户端连接的控制端口
// - `-public-port=8080`:外部访问的公网端口

// ### 4. 在内网机器上运行客户端

// 假设你的内网有一个HTTP服务运行在80端口:

// ```bash
// # 直接运行
// go run tunnel.go -mode=client -server-host=1.2.3.4 -control-port=8888 -local-port=80

// # 或使用编译后的二进制
// ./tunnel -mode=client -server-host=1.2.3.4 -control-port=8888 -local-port=80

// # 指定本地服务地址
// ./tunnel -mode=client -server-host=1.2.3.4 -local-host=192.168.1.100 -local-port=8000
// ```

// **参数说明:**
// - `-server-host=1.2.3.4`:公网服务器的IP地址(必需)
// - `-control-port=8888`:服务器的控制端口
// - `-local-host=127.0.0.1`:本地服务地址(默认127.0.0.1)
// - `-local-port=80`:本地服务端口

// ### 5. 访问内网服务

// 在浏览器中访问:
// ```
// http://<服务器公网IP>:8080
// ```

// 就可以访问到内网的80端口服务了!

// ## 完整示例

// ### 示例1:暴露内网Web服务

// **场景:**内网有一个运行在80端口的Web服务

// **步骤:**

// 1. 公网服务器(IP: 1.2.3.4):
// ```bash
// ./tunnel -mode=server -control-port=8888 -public-port=8080
// ```

// 2. 内网机器:
// ```bash
// ./tunnel -mode=client -server-host=1.2.3.4 -control-port=8888 -local-port=80
// ```

// 3. 访问:`http://1.2.3.4:8080`

// ### 示例2:暴露内网SSH服务

// **场景:**暴露内网22端口的SSH服务

// 1. 公网服务器:
// ```bash
// ./tunnel -mode=server -control-port=8888 -public-port=2222
// ```

// 2. 内网机器:
// ```bash
// ./tunnel -mode=client -server-host=1.2.3.4 -control-port=8888 -local-port=22
// ```

// 3. 远程SSH连接:
// ```bash
// ssh -p 2222 user@1.2.3.4
// ```

// ### 示例3:暴露数据库服务

// **场景:**暴露内网MySQL服务(3306端口)

// 1. 公网服务器:
// ```bash
// ./tunnel -mode=server -control-port=8888 -public-port=3306
// ```

// 2. 内网机器:
// ```bash
// ./tunnel -mode=client -server-host=1.2.3.4 -control-port=8888 -local-port=3306
// ```

// 3. 远程连接:
// ```bash
// mysql -h 1.2.3.4 -P 3306 -u root -p
// ```

// ## 功能特点

// ✅ **简单易用** - 单文件部署,命令行配置  
// ✅ **自动重连** - 客户端断线自动重连  
// ✅ **心跳保活** - 自动心跳维持连接  
// ✅ **多隧道支持** - 支持多个并发连接  
// ✅ **跨平台** - 支持Linux/Windows/macOS  
// ✅ **低延迟** - 直接TCP转发,性能好  
// ✅ **稳定可靠** - 完善的错误处理和日志  

// ## 进阶配置

// ### 使用systemd管理服务(Linux)

// **服务端配置** `/etc/systemd/system/tunnel-server.service`:
// ```ini
// [Unit]
// Description=Tunnel Server
// After=network.target

// [Service]
// Type=simple
// User=root
// ExecStart=/usr/local/bin/tunnel -mode=server -control-port=8888 -public-port=8080
// Restart=always
// RestartSec=5

// [Install]
// WantedBy=multi-user.target
// ```

// **客户端配置** `/etc/systemd/system/tunnel-client.service`:
// ```ini
// [Unit]
// Description=Tunnel Client
// After=network.target

// [Service]
// Type=simple
// User=root
// ExecStart=/usr/local/bin/tunnel -mode=client -server-host=1.2.3.4 -control-port=8888 -.........完整代码请登录后点击上方下载按钮下载查看

网友评论0