feat: Go port of the panel in panel-go/ — drop-in replacement for server.js
Pure-stdlib Go implementation of the whole control plane: same nexusgate.json schema (unknown fields preserved verbatim, explicit null/false tri-states modeled), same HTTP API and error strings, embedded frontend (NG_PUBLIC_DIR override), self-implemented scrypt auth, X25519 Reality keys, panel-hosted keyStore and heartbeat reconciliation included. Version stays 0.6.8. Verified: Go tests 33/33 (scrypt + Reality vectors generated from the Node implementation, subscription goldens byte-identical), Node suite 52/52 untouched, differential E2E against the Node panel 50/50 including two-way DB swap. See panel-go/PARITY.md and panel-go/INSTALL-GO.md.
This commit is contained in:
+142
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"rfEntry": {
|
||||
"id": "res_rf",
|
||||
"engine": "sing-box",
|
||||
"meta": {
|
||||
"kind": "node",
|
||||
"nodeId": "nod_rf",
|
||||
"metricsTag": "ng-nodrf-in",
|
||||
"protocol": "vless-reality-vision"
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"type": "vless",
|
||||
"tag": "ng-nodrf-in",
|
||||
"listen": "203.0.113.10",
|
||||
"listen_port": 23456,
|
||||
"users": [
|
||||
{
|
||||
"name": "ng:cus_1",
|
||||
"uuid": "11111111-2222-3333-4444-000000000001",
|
||||
"flow": "xtls-rprx-vision"
|
||||
},
|
||||
{
|
||||
"name": "ng:cus_2",
|
||||
"uuid": "11111111-2222-3333-4444-000000000002",
|
||||
"flow": "xtls-rprx-vision"
|
||||
}
|
||||
],
|
||||
"tls": {
|
||||
"enabled": true,
|
||||
"server_name": "www.amd.com",
|
||||
"reality": {
|
||||
"enabled": true,
|
||||
"handshake": {
|
||||
"server": "www.amd.com",
|
||||
"server_port": 443
|
||||
},
|
||||
"private_key": "${REALITY_PRIVATE:reality-nod_rf}",
|
||||
"short_id": [
|
||||
"abcd0001ef01",
|
||||
"abcd0002ef01"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"type": "shadowsocks",
|
||||
"tag": "ng-nodrf-exit",
|
||||
"server": "exit.example.com",
|
||||
"server_port": 23457,
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "AwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI="
|
||||
}
|
||||
],
|
||||
"routingRules": [
|
||||
{
|
||||
"inbound": [
|
||||
"ng-nodrf-in"
|
||||
],
|
||||
"action": "route",
|
||||
"outbound": "ng-nodrf-exit"
|
||||
}
|
||||
]
|
||||
},
|
||||
"rfExit": {
|
||||
"id": "res_rfx",
|
||||
"engine": "sing-box",
|
||||
"meta": {
|
||||
"kind": "node-exit",
|
||||
"nodeId": "nod_rf",
|
||||
"metricsTag": "ng-nodrf-exit-in"
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"type": "shadowsocks",
|
||||
"tag": "ng-nodrf-exit-in",
|
||||
"listen": "203.0.113.20",
|
||||
"listen_port": 23457,
|
||||
"method": "2022-blake3-aes-256-gcm",
|
||||
"password": "AwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISI="
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"type": "direct",
|
||||
"tag": "ng-nodrf-exit-direct"
|
||||
}
|
||||
],
|
||||
"routingRules": [
|
||||
{
|
||||
"inbound": [
|
||||
"ng-nodrf-exit-in"
|
||||
],
|
||||
"action": "route",
|
||||
"outbound": "ng-nodrf-exit-direct"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ssEntry": {
|
||||
"id": "res_ss",
|
||||
"engine": "sing-box",
|
||||
"meta": {
|
||||
"kind": "node",
|
||||
"nodeId": "nod_ss",
|
||||
"metricsTag": "ng-nodss-in",
|
||||
"protocol": "shadowsocks-2022-aes128"
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"type": "shadowsocks",
|
||||
"tag": "ng-nodss-in",
|
||||
"listen": "203.0.113.11",
|
||||
"listen_port": 23458,
|
||||
"method": "2022-blake3-aes-128-gcm",
|
||||
"password": "CwwNDg8QERITFBUWFxgZGg==",
|
||||
"users": [
|
||||
{
|
||||
"name": "ng:cus_1",
|
||||
"password": "FRYXGBkaGxwdHh8gISIjJA=="
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"type": "direct",
|
||||
"tag": "ng-nodss-direct"
|
||||
}
|
||||
],
|
||||
"routingRules": [
|
||||
{
|
||||
"inbound": [
|
||||
"ng-nodss-in"
|
||||
],
|
||||
"action": "route",
|
||||
"outbound": "ng-nodss-direct"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user