EtherGuard-VPN/gencfg/example_conf.go

291 lines
8.2 KiB
Go

/* SPDX-License-Identifier: MIT
*
* Copyright (C) 2017-2021 Kusakabe Si. All Rights Reserved.
*/
package gencfg
import (
"fmt"
"io/fs"
"github.com/KusakabeSi/EtherGuard-VPN/conn"
"github.com/KusakabeSi/EtherGuard-VPN/device"
"github.com/KusakabeSi/EtherGuard-VPN/mtypes"
"github.com/KusakabeSi/EtherGuard-VPN/path"
)
func GetExampleEdgeConf(templatePath string, getDemo bool) (mtypes.EdgeConfig, error) {
econfig := mtypes.EdgeConfig{}
var err error
if templatePath != "" {
err = mtypes.ReadYaml(templatePath, &econfig)
if err == nil {
return econfig, nil
}
}
v1 := mtypes.Vertex(1)
v2 := mtypes.Vertex(2)
econfig = mtypes.EdgeConfig{
Interface: mtypes.InterfaceConf{
IType: "tap",
Name: "tap1",
VPPIFaceID: 1,
VPPBridgeID: 4242,
MacAddrPrefix: "AA:BB:CC:DD",
MTU: device.DefaultMTU,
RecvAddr: "127.0.0.1:4001",
SendAddr: "127.0.0.1:5001",
L2HeaderMode: "nochg",
},
NodeID: 1,
NodeName: "Node01",
PostScript: "",
DefaultTTL: 200,
L2FIBTimeout: 3600,
PrivKey: "6GyDagZKhbm5WNqMiRHhkf43RlbMJ34IieTlIuvfJ1M=",
ListenPort: 0,
DisableAf: conn.EnabledAf{
IPv4: false,
IPv6: false,
},
AfPrefer: 4,
LogLevel: mtypes.LoggerInfo{
LogLevel: "error",
LogTransit: false,
LogControl: true,
LogNormal: false,
LogInternal: true,
LogNTP: true,
},
DynamicRoute: mtypes.DynamicRouteInfo{
SendPingInterval: 16,
PeerAliveTimeout: 70,
DupCheckTimeout: 40,
TimeoutCheckInterval: 20,
ConnNextTry: 5,
AdditionalCost: 10,
DampingFilterRadius: 4,
SaveNewPeers: true,
SuperNode: mtypes.SuperInfo{
UseSuperNode: true,
PSKey: "iPM8FXfnHVzwjguZHRW9bLNY+h7+B1O2oTJtktptQkI=",
EndpointV4: "127.0.0.1:3000",
PubKeyV4: "LJ8KKacUcIoACTGB/9Ed9w0osrJ3WWeelzpL2u4oUic=",
EndpointV6: "[::1]:3000",
PubKeyV6: "HCfL6YJtpJEGHTlJ2LgVXIWKB/K95P57LHTJ42ZG8VI=",
EndpointEdgeAPIUrl: "http://127.0.0.1:3000/eg_api",
SuperNodeInfoTimeout: 50,
SkipLocalIP: false,
AdditionalLocalIP: []string{"11.11.11.11:11111"},
},
P2P: mtypes.P2PInfo{
UseP2P: false,
SendPeerInterval: 20,
GraphRecalculateSetting: mtypes.GraphRecalculateSetting{
StaticMode: false,
JitterTolerance: 50,
JitterToleranceMultiplier: 1.1,
TimeoutCheckInterval: 5,
RecalculateCoolDown: 5,
ManualLatency: mtypes.DistTable{
mtypes.Vertex(1): {
mtypes.Vertex(2): 1.14,
},
mtypes.Vertex(2): {
mtypes.Vertex(1): 5.14,
},
mtypes.Vertex(100): {
mtypes.NodeID_Broadcast: 1.919,
},
mtypes.NodeID_Broadcast: {
mtypes.Vertex(100): 8.1,
},
},
},
},
NTPConfig: mtypes.NTPInfo{
UseNTP: true,
MaxServerUse: 8,
SyncTimeInterval: 99999,
NTPTimeout: 3,
Servers: []string{
"time.google.com",
"time1.google.com",
"time2.google.com",
"time3.google.com",
"time4.google.com",
"time1.facebook.com",
"time2.facebook.com",
"time3.facebook.com",
"time4.facebook.com",
"time5.facebook.com",
"time.cloudflare.com",
"time.apple.com",
"time.asia.apple.com",
"time.euro.apple.com",
"time.windows.com",
"pool.ntp.org",
"0.pool.ntp.org",
"1.pool.ntp.org",
"2.pool.ntp.org",
"3.pool.ntp.org",
"cn.ntp.org.cn",
"edu.ntp.org.cn",
"hk.ntp.org.cn",
"tw.ntp.org.cn",
"ntp.aliyun.com",
"time1.cloud.tencent.com",
"ntp.tuna.tsinghua.edu.cn",
},
},
},
NextHopTable: mtypes.NextHopTable{
mtypes.Vertex(1): {
mtypes.Vertex(2): v2,
},
mtypes.Vertex(2): {
mtypes.Vertex(1): v1,
},
},
ResetEndPointInterval: 600,
Peers: []mtypes.PeerInfo{
{
NodeID: 2,
PubKey: "dHeWQtlTPQGy87WdbUARS4CtwVaR2y7IQ1qcX4GKSXk=",
PSKey: "juJMQaGAaeSy8aDsXSKNsPZv/nFiPj4h/1G70tGYygs=",
EndPoint: "127.0.0.1:3002",
PersistentKeepalive: 30,
Static: true,
},
},
}
if getDemo {
g, _ := path.NewGraph(3, false, mtypes.GraphRecalculateSetting{}, mtypes.NTPInfo{}, mtypes.LoggerInfo{})
g.UpdateLatency(1, 2, 0.5, 99999, 0, false, false)
g.UpdateLatency(2, 1, 0.5, 99999, 0, false, false)
g.UpdateLatency(2, 3, 0.5, 99999, 0, false, false)
g.UpdateLatency(3, 2, 0.5, 99999, 0, false, false)
g.UpdateLatency(2, 4, 0.5, 99999, 0, false, false)
g.UpdateLatency(4, 2, 0.5, 99999, 0, false, false)
g.UpdateLatency(3, 4, 0.5, 99999, 0, false, false)
g.UpdateLatency(4, 3, 0.5, 99999, 0, false, false)
g.UpdateLatency(5, 3, 0.5, 99999, 0, false, false)
g.UpdateLatency(3, 5, 0.5, 99999, 0, false, false)
g.UpdateLatency(6, 4, 0.5, 99999, 0, false, false)
g.UpdateLatency(4, 6, 0.5, 99999, 0, false, false)
_, _, next, _ := g.FloydWarshall(false)
econfig.NextHopTable = next
} else {
econfig.Peers = []mtypes.PeerInfo{}
econfig.NextHopTable = make(mtypes.NextHopTable)
econfig.DynamicRoute.P2P.GraphRecalculateSetting.ManualLatency = make(mtypes.DistTable)
econfig.DynamicRoute.SuperNode.EndpointV4 = ""
econfig.DynamicRoute.SuperNode.EndpointV6 = ""
econfig.DynamicRoute.SuperNode.AdditionalLocalIP = make([]string, 0)
}
return econfig, &fs.PathError{Path: "", Err: fmt.Errorf("no path provided")}
}
func GetExampleSuperConf(templatePath string, getDemo bool) (mtypes.SuperConfig, error) {
sconfig := mtypes.SuperConfig{}
var err error
if templatePath != "" {
err = mtypes.ReadYaml(templatePath, &sconfig)
if err == nil {
return sconfig, nil
}
}
v1 := mtypes.Vertex(1)
v2 := mtypes.Vertex(2)
random_passwd := mtypes.RandomStr(8, "passwd")
sconfig = mtypes.SuperConfig{
NodeName: "NodeSuper",
PostScript: "",
PrivKeyV4: "mL5IW0GuqbjgDeOJuPHBU2iJzBPNKhaNEXbIGwwYWWk=",
PrivKeyV6: "+EdOKIoBp/EvIusHDsvXhV1RJYbyN3Qr8nxlz35wl3I=",
ListenPort: 3000,
ListenPort_EdgeAPI: "3000",
ListenPort_ManageAPI: "3000",
API_Prefix: "/eg_api",
LogLevel: mtypes.LoggerInfo{
LogLevel: "error",
LogTransit: false,
LogControl: true,
LogNormal: false,
LogInternal: true,
LogNTP: true,
},
RePushConfigInterval: 30,
PeerAliveTimeout: 70,
DampingFilterRadius: 4,
HttpPostInterval: 50,
SendPingInterval: 15,
ResetEndPointInterval: 600,
Passwords: mtypes.Passwords{
ShowState: random_passwd + "_showstate",
AddPeer: random_passwd + "_addpeer",
DelPeer: random_passwd + "_delpeer",
UpdatePeer: random_passwd + "_updatepeer",
UpdateSuper: random_passwd + "_updatesuper",
},
GraphRecalculateSetting: mtypes.GraphRecalculateSetting{
StaticMode: false,
ManualLatency: mtypes.DistTable{
mtypes.Vertex(1): {
mtypes.Vertex(2): 1.14,
},
mtypes.Vertex(2): {
mtypes.Vertex(1): 5.14,
},
mtypes.Vertex(100): {
mtypes.NodeID_Broadcast: 1.919,
},
mtypes.NodeID_Broadcast: {
mtypes.Vertex(100): 8.1,
},
},
JitterTolerance: 30,
JitterToleranceMultiplier: 1.01,
TimeoutCheckInterval: 5,
RecalculateCoolDown: 5,
},
NextHopTable: mtypes.NextHopTable{
mtypes.Vertex(1): {
mtypes.Vertex(2): v2,
},
mtypes.Vertex(2): {
mtypes.Vertex(1): v1,
},
},
EdgeTemplate: "example_config/super_mode/n1.yaml",
UsePSKForInterEdge: true,
Peers: []mtypes.SuperPeerInfo{
{
NodeID: 1,
Name: "Node_01",
PubKey: "ZqzLVSbXzjppERslwbf2QziWruW3V/UIx9oqwU8Fn3I=",
PSKey: "iPM8FXfnHVzwjguZHRW9bLNY+h7+B1O2oTJtktptQkI=",
AdditionalCost: 10,
},
{
NodeID: 2,
Name: "Node_02",
PubKey: "dHeWQtlTPQGy87WdbUARS4CtwVaR2y7IQ1qcX4GKSXk=",
PSKey: "juJMQaGAaeSy8aDsXSKNsPZv/nFiPj4h/1G70tGYygs=",
AdditionalCost: 10,
},
},
}
if !getDemo {
sconfig.Peers = []mtypes.SuperPeerInfo{}
sconfig.NextHopTable = make(mtypes.NextHopTable)
sconfig.GraphRecalculateSetting.ManualLatency = make(mtypes.DistTable)
}
return sconfig, &fs.PathError{Path: "", Err: fmt.Errorf("no path provided")}
}