rebuild: split core into separate repo; move wg-go integration to internal/ctr/corebind

- go.mod: require git.zkcoi.com/zkcoi/meshray/core, replace => ../Meshray
- internal/ctr/corebind: EnhancedBind + registry + adapter (wg-go integration isolated)
- cmd/mr-wg migrated from old core/cmd/meshray-core
- core/ removed; CHANGELOG updated; fix checkdb vet warning
This commit is contained in:
2026-07-15 16:08:13 +08:00
parent 15dab96872
commit 59e3059246
39 changed files with 2350 additions and 4361 deletions
+106
View File
@@ -0,0 +1,106 @@
package main
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/BurntSushi/toml"
)
// Config 是 meshray-core 独立运行(类 frp 风格)的配置文件结构。
// 支持 TOML(默认,类 frp)与 JSON 两种格式,按文件扩展名自动选择解码器。
//
// TOML 示例:
//
// network_id = "net1"
// listen_port = 51820
// mtu = 1420
// private_key = "" # 留空则自动生成并写入 private_key_file
// private_key_file = "key.txt"
// interface = "10.0.0.1/24" # 本机隧道 IP
// mode = "enhanced" # enhanced=经 9 层传输接管;native=裸 WG 直连
//
// [[peers]]
// public_key = "<对端公钥 base64>"
// endpoint = "203.0.113.2:51820" # 增强模式经 9 层拨号对端;留空则仅作为接收方
// allowed_ips = ["10.0.0.2/32"]
//
// [ice]
// stun = ["stun:stun.l.google.com:19302"]
// turn = ["turn:your.turn:3478"]
//
// # 传输层级策略:auto=9 层自动降级(默认);manual=仅用下方 layers 指定的层
// layer_strategy = "auto"
// layers = ["Direct-UDP"] # 仅 manual 生效;单元素=强制固定层;多元素=自定义降级顺序
type Config struct {
NetworkID string `json:"network_id" toml:"network_id"`
ListenPort int `json:"listen_port" toml:"listen_port"`
MTU int `json:"mtu" toml:"mtu"`
PrivateKey string `json:"private_key" toml:"private_key"`
PrivateKeyFile string `json:"private_key_file" toml:"private_key_file"`
InterfaceIP string `json:"interface" toml:"interface"`
Mode string `json:"mode" toml:"mode"`
Peers []PeerConf `json:"peers" toml:"peers"`
ICE ICEConf `json:"ice" toml:"ice"`
// LayerStrategy 传输层级策略:
// "auto"(默认)= 按 DefaultLayerOrder 自动 9 层降级;
// "manual" = 仅使用 Layers 指定的层(手动),不再自动探测其它层。
LayerStrategy string `json:"layer_strategy" toml:"layer_strategy"`
// Layers 手动层级列表(仅 layer_strategy=manual 生效)。
// 单元素(如 ["TURN-TCP"]= 强制固定该层、禁用降级;
// 多元素(如 ["Direct-UDP","TURN-TCP"]= 按列表顺序自定义降级链。
Layers []string `json:"layers" toml:"layers"`
}
// PeerConf 对端配置
type PeerConf struct {
PublicKey string `json:"public_key" toml:"public_key"`
Endpoint string `json:"endpoint" toml:"endpoint"`
AllowedIPs []string `json:"allowed_ips" toml:"allowed_ips"`
}
// ICEConf STUN/TURN 服务器(增强模式打洞/中继用)
type ICEConf struct {
STUN []string `json:"stun" toml:"stun"`
TURN []string `json:"turn" toml:"turn"`
}
// loadConfig 读取并解析配置文件:按扩展名自动选择 TOML 或 JSON 解码器。
// 默认且推荐 TOML(类 frp);旧 .json 配置仍可继续使用。
func loadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
cfg := &Config{}
// 按扩展名选择解码器:先剥离可能的 .sample 模板后缀,再判扩展名,
// 避免 "meshray-core.toml.sample" 被误判为 JSON。
lower := strings.ToLower(path)
lower = strings.TrimSuffix(lower, ".sample")
ext := filepath.Ext(lower)
switch ext {
case ".toml", ".conf":
// TOML:与 frp 风格一致
if err := toml.Unmarshal(data, cfg); err != nil {
return nil, fmt.Errorf("解析 TOML 配置 %s 失败: %w", path, err)
}
default:
// JSON:兼容旧配置
if err := json.Unmarshal(data, cfg); err != nil {
return nil, fmt.Errorf("解析 JSON 配置 %s 失败: %w", path, err)
}
}
if cfg.MTU == 0 {
cfg.MTU = 1420
}
if cfg.Mode == "" {
cfg.Mode = "enhanced"
}
return cfg, nil
}