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.
143 lines
3.1 KiB
JSON
143 lines
3.1 KiB
JSON
{
|
|
"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"
|
|
}
|
|
]
|
|
}
|
|
}
|