Musixal/Backhaul

GitHub: Musixal/Backhaul

Backhaul是一款高性能的反向隧道解决方案,用于NAT和防火墙限制下的NAT穿透。

Stars: 834 | Forks: 148

# 回程 欢迎来到 **`Backhaul`** 项目!本项目提供了一种高性能的反向隧道解决方案,针对通过NAT和防火墙处理大量并发连接进行了优化。本README将指导您设置和配置服务器和客户端组件,包括不同传输协议的详细信息。 ## 目录 1. [简介](#introduction) 2. [功能](#features) 3. [安装](#installation) 4. [使用](#usage) - [配置选项](#configuration-options) - [详细配置](#detailed-configuration) - [TCP配置](#tcp-configuration) - [TCP多路复用配置](#tcp-multiplexing-configuration) - [UDP配置](#udp-configuration) - [WebSocket配置](#websocket-configuration) - [安全WebSocket配置](#secure-websocket-configuration) - [WS多路复用配置](#ws-multiplexing-configuration) - [WSS多路复用配置](#wss-multiplexing-configuration) 5. [使用OpenSSL生成自签名TLS证书](#generating-a-self-signed-tls-certificate-with-openssl) 6. [以服务形式运行backhaul](#running-backhaul-as-a-service) 7. [常见问题解答](#faq) 8. [基准测试](#benchmark) 9. [许可](#license) 10. [捐赠](#donation) ## 简介 本项目提供了一种强大的反向隧道解决方案,以克服NAT和防火墙限制,支持各种传输协议。它旨在实现高效率和并发性。 ## 功能 * **高性能**:针对处理大量并发连接进行了优化。 * **协议灵活性**:支持TCP、WebSocket(WS)和安全WebSocket(WSS)传输。 * **UDP over TCP**:在TCP连接上实现UDP流量封装和转发,以实现可靠的交付并内置拥塞控制。 * **多路复用**:通过SMUX在单个传输上启用多个连接。 * **NAT & 防火墙绕过**:通过反向隧道克服限制。 * **流量嗅探**:可选的网络流量监控,支持日志记录。 * **可配置的保活**:可调整保活和心跳间隔以保持稳定连接。 * **TLS加密**:通过WSS提供安全连接,支持自定义TLS证书。 * **Web界面**:通过轻量级Web界面进行实时监控。 * **热重载配置**:支持动态配置重载,无需重启服务器。 ## 安装 1. **从GitHub发行版页面**下载最新版本。 2. **解压缩存档**(如果需要,调整`filename`): tar -xzf backhaul_linux_amd64.tar.gz 3. **运行可执行文件**: ./backhaul 4. 如果您更喜欢从源代码构建,请执行以下操作: git clone https://github.com/musixal/backhaul.git cd backhaul go build ./backhaul ## 使用 本项目的主要可执行文件是`backhaul`。它需要TOML配置文件来配置服务器和客户端组件。 ### 配置选项 要开始使用此解决方案,您需要配置服务器和客户端组件。以下是设置基本配置的方法: * **服务器配置** 创建一个名为`config.toml`的配置文件: [server]# 本地,伊朗 bind_addr = "0.0.0.0:3080" # 服务器监听的地址和端口(必需)。 transport = "tcp" # 要使用的协议("tcp"、"tcpmux"、"ws"、"wss"、"wsmux"、"wssmux"。必需)。 accept_udp = false # 启用通过TCP传输传输UDP连接。(可选,默认:false) token = "your_token" # 用于安全通信的认证令牌(可选)。 keepalive_period = 75 # 发送保活数据包的间隔(秒)(可选,默认:75s) nodelay = false # 启用TCP_NODELAY(可选,默认:false)。 channel_size = 2048 # 隧道和本地通道大小。超出连接将被丢弃。(可选,默认:2048)。 heartbeat = 40 # 以秒为单位。隧道稳定性的ping间隔。最小:1s。(可选,默认:40s) mux_con = 8 # Mux并发。可以复用到单个流中的连接数(可选,默认:8)。 mux_version = 1 # SMUX协议版本(1或2)。版本2可能具有额外功能。(可选) mux_framesize = 32768 # 32 KB。可以发送到连接的帧的最大大小。(可选) mux_recievebuffer = 4194304 # 4 MB。每个连接的传入数据的最大缓冲区大小。(可选) mux_streambuffer = 65536 # 256 KB。连接中单个流的最大缓冲区大小。(可选) sniffer = false # 启用或禁用网络嗅探以监控数据。(可选,默认 false) web_port = 2060 # Web界面或监控界面的端口号(可选,设置为0以禁用)。 sniffer_log ="/root/log.json" # 用于存储网络流量和使用数据日志的文件名(可选,默认 backhaul.json) tls_cert = "/root/server.crt" # wss/wssmux的TLS证书文件路径(必需)。 tls_key = "/root/server.key" # wss/wssmux的TLS私钥文件路径(必需)。 log_level = "info" # 日志级别("panic"、"fatal"、"error"、"warn"、"info"、"debug"、"trace",可选,默认:"info")。 skip_optz = true # 跳过Backhaul执行的优化(默认:false) mss = 1360 # TCP/TCPMux:最大段大小(字节);控制TCP有效负载大小以避免分段。(默认:系统定义) so_rcvbuf = 4194304 # TCP/TCPMux:套接字接收缓冲区大小(字节);更大的缓冲区允许在接收端更高的吞吐量。(默认:系统定义) so_sndbuf = 1048576 # TCP/TCPMux:套接字发送缓冲区大小(字节);控制发送队列大小以管理外出数据流。(默认:系统定义) ports = [ "443-600", # 监听443到600范围内的所有端口 "443-600:5201", # 监听443到600范围内的所有端口并将流量转发到5201 "443-600=1.1.1.1:5201", # 监听443到600范围内的所有端口并将流量转发到1.1.1.1:5201 "443", # 监听本地端口443并转发到远程端口443(默认转发)。 "4000=5000", # 监听本地端口4000(绑定到所有本地IP)并转发到远程端口5000。 "127.0.0.2:443=5201", # 绑定到特定本地IP(127.0.0.2),监听端口443,并转发到远程端口5201。 "443=1.1.1.1:5201", # 监听本地端口443并转发到特定远程IP(1.1.1.1)的端口5201。 "127.0.0.2:443=1.1.1.1:5201", # 绑定到特定本地IP(127.0.0.2),监听端口443,并转发到远程IP(1.1.1.1)的端口5201。 ] 要启动`server`: ./backhaul -c config.toml * **客户端配置** 为客户端创建一个名为`config.toml`的配置文件: [client] # 位于NAT后面,被防火墙阻止 remote_addr = "0.0.0.0:3080" # 服务器地址和端口(必需)。 edge_ip = "188.114.96.0" # 用于CDN连接的边缘IP,特别是用于基于WebSocket的传输。(可选,默认 none) transport = "tcp" # 要使用的协议("tcp"、"tcpmux"、"ws"、"wss"、"wsmux"、"wssmux"。必需)。 token = "your_token" # 用于安全通信的认证令牌(可选)。 connection_pool = 8 # 预建立连接的数量。(可选,默认:8)。 aggressive_pool = false # 启用积极的连接池管理。(可选,默认:false)。 keepalive_period = 75 # 发送保活数据包的间隔(秒)。(可选,默认:75s) nodelay = false # 使用TCP_NODELAY(可选,默认:false)。 retry_interval = 3 # 重试间隔(秒)(可选,默认:3s)。 dial_timeout = 10 # 设置建立网络连接的最大等待时间。(可选,默认:10s) mux_version = 1 # SMUX协议版本(1或2)。版本2可能具有额外功能。(可选) mux_framesize = 32768 # 32 KB。可以发送到连接的帧的最大大小。(可选) mux_recievebuffer = 4194304 # 4 MB。每个连接的传入数据的最大缓冲区大小。(可选) mux_streambuffer = 65536 # 256 KB。连接中单个流的最大缓冲区大小。(可选) sniffer = false # 启用或禁用网络嗅探以监控数据。(可选,默认 false) web_port = 2060 # Web界面或监控界面的端口号(可选,设置为0以禁用)。 sniffer_log ="/root/log.json" # 用于存储网络流量和使用数据日志的文件名(可选,默认 backhaul.json) log_level = "info" # 日志级别("panic"、"fatal"、"error"、"warn"、"info"、"debug"、"trace",可选,默认:"info")。 skip_optz = true # 跳过Backhaul执行的优化(默认:false) mss = 1360 # TCP/TCPMux:最大段大小(字节);控制TCP有效负载大小以避免分段。(默认:系统定义) so_rcvbuf = 1048576 # TCP/TCPMux:套接字接收缓冲区大小(字节);更大的缓冲区允许在接收端更高的吞吐量。(默认:系统定义) so_sndbuf = 4194304 # TCP/TCPMux:套接字发送缓冲区大小(字节);控制发送队列大小以管理外出数据流。(默认:系统定义) 要启动`client`: ./backhaul -c config.toml ### 详细配置 #### TCP配置 * **服务器**: [server] bind_addr = "0.0.0.0:3080" transport = "tcp" accept_udp = false token = "your_token" keepalive_period = 75 nodelay = true heartbeat = 40 channel_size = 2048 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:3080" transport = "tcp" token = "your_token" connection_pool = 8 aggressive_pool = false keepalive_period = 75 dial_timeout = 10 nodelay = true retry_interval = 3 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" * **详细信息**: `remote_addr`:客户端连接到的服务器的IPv4、IPv6或域名地址。 `token`:用于在隧道内安全验证和认证客户端和服务器之间连接的认证令牌。 `channel_size`:从服务器到客户端转发数据包的队列大小。如果超出限制,则丢弃数据包。 `connection_pool`:设置预建立连接的数量,以获得更好的延迟。 `nodelay`:指TCP套接字选项(TCP_NODELAY),它提高了延迟但降低了带宽 #### TCP多路复用配置 * **服务器**: [server] bind_addr = "0.0.0.0:3080" transport = "tcpmux" token = "your_token" keepalive_period = 75 nodelay = true heartbeat = 40 channel_size = 2048 mux_con = 8 mux_version = 1 mux_framesize = 32768 mux_recievebuffer = 4194304 mux_streambuffer = 65536 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:3080" transport = "tcpmux" token = "your_token" connection_pool = 8 aggressive_pool = false keepalive_period = 75 dial_timeout = 10 retry_interval = 3 nodelay = true mux_version = 1 mux_framesize = 32768 mux_recievebuffer = 4194304 mux_streambuffer = 65536 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" * **详细信息**: `mux_session`:多路复用会话的数量。如果需要处理单个连接上的更多并发会话,请增加此值。 * 参考TCP配置以获取更多信息。 #### UDP配置 * **服务器**: [server] bind_addr = "0.0.0.0:3080" transport = "udp" token = "your_token" heartbeat = 20 channel_size = 2048 sniffer = false web_port = 2060 sniffer_log = "//backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:3080" transport = "udp" token = "your_token" connection_pool = 8 aggressive_pool = false retry_interval = 3 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" #### WebSocket配置 * **服务器**: [server] bind_addr = "0.0.0.0:8080" transport = "ws" token = "your_token" channel_size = 2048 keepalive_period = 75 heartbeat = 40 nodelay = true sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:8080" edge_ip = "" transport = "ws" token = "your_token" connection_pool = 8 aggressive_pool = false keepalive_period = 75 dial_timeout = 10 retry_interval = 3 nodelay = true sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" * **详细信息**: * 参考TCP配置以获取更多信息。 #### 安全WebSocket配置 * **服务器**: [server] bind_addr = "0.0.0.0:8443" transport = "wss" token = "your_token" channel_size = 2048 keepalive_period = 75 nodelay = true tls_cert = "/root/server.crt" tls_key = "/root/server.key" sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:8443" edge_ip = "" transport = "wss" token = "your_token" connection_pool = 8 aggressive_pool = false keepalive_period = 75 dial_timeout = 10 retry_interval = 3 nodelay = true sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" * **详细信息**: * 参考下一节以获取生成`tls_cert`和`tls_key`的说明。 #### WS多路复用配置 * **服务器**: [server] bind_addr = "0.0.0.0:3080" transport = "wsmux" token = "your_token" keepalive_period = 75 nodelay = true heartbeat = 40 channel_size = 2048 mux_con = 8 mux_version = 1 mux_framesize = 32768 mux_recievebuffer = 4194304 mux_streambuffer = 65536 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" ports = [] * **客户端**: [client] remote_addr = "0.0.0.0:3080" edge_ip = "" transport = "wsmux" token = "your_token" connection_pool = 8 aggressive_pool = false keepalive_period = 75 dial_timeout = 10 nodelay = true retry_interval = 3 mux_version = 1 mux_framesize = 32768 mux_recievebuffer = 4194304 mux_streambuffer = 65536 sniffer = false web_port = 2060 sniffer_log = "/root/backhaul.json" log_level = "info" #### WSS多路复用配置 * **服务器**: [server] bind_addr = "0.0.0.0:443" transport = "wssmux" token = "your_token" keepalive_period = 75 nodelay = true heartbeat = 40 channel_size = 2048 mux_con = 8 mux_version = 1 mux_framesize = 32768
标签:DNS解析, EVTX分析, NAT穿透, SMUX, TCPMUX, TCP协议, UDP协议, WebSocket, WSS, 依赖分析, 内核驱动, 反向隧道, 安全隧道, 底层编程, 开源项目, 性能优化, 日志审计, 检测绕过, 系统架构, 网络优化, 网络传输, 网络协议, 网络安全, 网络工具, 网络性能, 网络编程, 网络解决方案, 网络设计, 网络连接, 网络通信, 网络配置, 网络隧道, 软件开发, 防火墙绕过, 隐私保护, 高并发连接