From 1c6b8f8a2b99b9ea0cd202d270203764caaef6c7 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Tue, 1 Jun 2021 19:28:01 +0000 Subject: [PATCH 1/5] add port to token --- controllers/intClientHttpController.go | 1 + controllers/networkHttpController.go | 3 ++- functions/helpers.go | 2 +- models/intclient.go | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/controllers/intClientHttpController.go b/controllers/intClientHttpController.go index fbc8718d..548a5bb6 100644 --- a/controllers/intClientHttpController.go +++ b/controllers/intClientHttpController.go @@ -147,6 +147,7 @@ func RegisterIntClient(client models.IntClient) (models.IntClient, error) { client.ServerAPIEndpoint = gcfg.APIHost + ":" + gcfg.APIPort client.ServerAddress = server.ServerAddress client.ServerPort = server.ServerPort + client.ServerGRPCPort = gcfg.GRPCPort client.ServerKey = server.ServerKey if client.ClientID == "" { diff --git a/controllers/networkHttpController.go b/controllers/networkHttpController.go index f3bed6cd..be0778c3 100644 --- a/controllers/networkHttpController.go +++ b/controllers/networkHttpController.go @@ -631,8 +631,9 @@ func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models netID := network.NetID grpcaddress := servercfg.GetGRPCHost() + ":" + servercfg.GetGRPCPort() apiaddress := servercfg.GetAPIHost() + ":" + servercfg.GetAPIPort() + wgport := servercfg.GetGRPWGCPort() - accessstringdec := grpcaddress + "|" + apiaddress + "|" + netID + "|" + accesskey.Value + "|" + privAddr + accessstringdec := wgport + "|" +grpcaddress + "|" + apiaddress + "|" + netID + "|" + accesskey.Value + "|" + privAddr accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec)) //validate accesskey v := validator.New() diff --git a/functions/helpers.go b/functions/helpers.go index c76958e7..c79cfc14 100644 --- a/functions/helpers.go +++ b/functions/helpers.go @@ -45,7 +45,7 @@ func CreateServerToken(netID string) (string, error) { privAddr = network.LocalRange } - accessstringdec := address + "|" + address + "|" + netID + "|" + accesskey.Value + "|" + privAddr + accessstringdec := " " + "|"+ address + "|" + address + "|" + netID + "|" + accesskey.Value + "|" + privAddr accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec)) diff --git a/models/intclient.go b/models/intclient.go index 649d4865..df846dec 100644 --- a/models/intclient.go +++ b/models/intclient.go @@ -12,6 +12,7 @@ type IntClient struct { ServerAPIEndpoint string `json:"serverapiendpoint" bson:"serverapiendpoint"` ServerAddress string `json:"serveraddress" bson:"serveraddress"` ServerPort string `json:"serverport" bson:"serverport"` + ServerGRPCPort string `json:"serverport" bson:"serverport"` ServerKey string `json:"serverkey" bson:"serverkey"` IsServer string `json:"isserver" bson:"isserver"` } From 3d685e15c09dde3034503b1b25d9ce6d02d01009 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Tue, 1 Jun 2021 19:32:20 +0000 Subject: [PATCH 2/5] add port to token --- controllers/networkHttpController.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/networkHttpController.go b/controllers/networkHttpController.go index be0778c3..09201945 100644 --- a/controllers/networkHttpController.go +++ b/controllers/networkHttpController.go @@ -631,7 +631,7 @@ func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models netID := network.NetID grpcaddress := servercfg.GetGRPCHost() + ":" + servercfg.GetGRPCPort() apiaddress := servercfg.GetAPIHost() + ":" + servercfg.GetAPIPort() - wgport := servercfg.GetGRPWGCPort() + wgport := servercfg.GetGRPCWGPort() accessstringdec := wgport + "|" +grpcaddress + "|" + apiaddress + "|" + netID + "|" + accesskey.Value + "|" + privAddr accesskey.AccessString = base64.StdEncoding.EncodeToString([]byte(accessstringdec)) From a8ef86bca4e8b6300cf8cb2c2beaf89046d91ba4 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Tue, 1 Jun 2021 19:33:36 +0000 Subject: [PATCH 3/5] add port to token --- servercfg/serverconf.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 4f6a5cee..58b26b50 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -110,14 +110,10 @@ func GetGRPCHost() string { } func GetGRPCPort() string { grpcport := "50051" - if IsGRPCWireGuard() { - grpcport = GetGRPCWGPort() - } else { - if os.Getenv("GRPC_PORT") != "" { - grpcport = os.Getenv("GRPC_PORT") - } else if config.Config.Server.GRPCPort != "" { - grpcport = config.Config.Server.GRPCPort - } + if os.Getenv("GRPC_PORT") != "" { + grpcport = os.Getenv("GRPC_PORT") + } else if config.Config.Server.GRPCPort != "" { + grpcport = config.Config.Server.GRPCPort } return grpcport } From be0d274ca6ca6f6a1da2f0043dd185125a24c8c3 Mon Sep 17 00:00:00 2001 From: afeiszli Date: Tue, 1 Jun 2021 18:40:04 -0400 Subject: [PATCH 4/5] making changes to grpc comms vars --- config/config.go | 1 - controllers/.networkHttpController.go.swp | Bin 0 -> 16384 bytes controllers/intClientHttpController.go | 20 ++++---- controllers/nodeGrpcController.go | 4 +- docs/_build/doctrees/environment.pickle | Bin 80971 -> 81028 bytes docs/_build/doctrees/support.doctree | Bin 16873 -> 18150 bytes docs/_build/html/_sources/support.rst.txt | 6 +++ docs/_build/html/searchindex.js | 2 +- docs/_build/html/support.html | 8 ++++ models/intclient.go | 8 ++-- netclient/config/config.go | 54 ++++++++++++---------- netclient/functions/register.go | 14 +++--- netclient/main.go | 2 +- netclient/wireguard/kernel.go | 8 ++-- servercfg/serverconf.go | 4 +- serverctl/wireguard.go | 8 ++-- 16 files changed, 78 insertions(+), 61 deletions(-) create mode 100644 controllers/.networkHttpController.go.swp diff --git a/config/config.go b/config/config.go index e66655d8..c399845c 100644 --- a/config/config.go +++ b/config/config.go @@ -55,7 +55,6 @@ type WG struct { GRPCWGInterface string `yaml:"grpciface"` GRPCWGAddress string `yaml:"grpcaddr"` GRPCWGAddressRange string `yaml:"grpcaddrrange"` - GRPCWGEndpoint string `yaml:"grpcendpoint"` GRPCWGPort string `yaml:"grpcport"` GRPCWGPubKey string `yaml:"pubkey"` GRPCWGPrivKey string `yaml:"privkey"` diff --git a/controllers/.networkHttpController.go.swp b/controllers/.networkHttpController.go.swp new file mode 100644 index 0000000000000000000000000000000000000000..906fc51c381cc24c2ae3631c25030a98924e7c92 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/controllers/intClientHttpController.go b/controllers/intClientHttpController.go index d01ab411..6743d0f6 100644 --- a/controllers/intClientHttpController.go +++ b/controllers/intClientHttpController.go @@ -138,17 +138,13 @@ func RegisterIntClient(client models.IntClient) (models.IntClient, error) { client.Address = newAddress } if client.Network == "" { client.Network = "comms" } - server, err := serverctl.GetServerWGConf() - if err != nil { - return client, err - } - gcfg := servercfg.GetConfig() - client.ServerWGEndpoint = server.ServerWGEndpoint - client.ServerAPIEndpoint = gcfg.APIHost + ":" + gcfg.APIPort - client.ServerAddress = server.ServerAddress - client.ServerPort = server.ServerPort - client.ServerGRPCPort = gcfg.GRPCPort - client.ServerKey = server.ServerKey + + wgconfig := servercfg.GetWGConfig() + client.ServerPublicEndpoint = servercfg.GetAPIHost() + client.ServerAPIPort = servercfg.GetAPIPort() + client.ServerPrivateAddress = wgconfig.GRPCWGAddress + client.ServerWGPort = wgconfig.GRPCWGPort + client.ServerGRPCPort = servercfg.GetGRPCPort() if client.ClientID == "" { clientid := StringWithCharset(7, charset) @@ -160,7 +156,7 @@ func RegisterIntClient(client models.IntClient) (models.IntClient, error) { collection := mongoconn.Client.Database("netmaker").Collection("intclients") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) // insert our network into the network table - _, err = collection.InsertOne(ctx, client) + _, err := collection.InsertOne(ctx, client) defer cancel() if err != nil { diff --git a/controllers/nodeGrpcController.go b/controllers/nodeGrpcController.go index 4f37afd6..c2d6b897 100644 --- a/controllers/nodeGrpcController.go +++ b/controllers/nodeGrpcController.go @@ -73,7 +73,7 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.ReadNodeRe } return response, nil } - +/* func (s *NodeServiceServer) GetConn(ctx context.Context, data *nodepb.Client) (*nodepb.Client, error) { // Get the protobuf node type from the protobuf request type // Essentially doing req.Node to access the struct with a nil check @@ -124,7 +124,7 @@ func (s *NodeServiceServer) GetConn(ctx context.Context, data *nodepb.Client) (* return response, nil } - +*/ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.CreateNodeReq) (*nodepb.CreateNodeRes, error) { // Get the protobuf node type from the protobuf request type // Essentially doing req.Node to access the struct with a nil check diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index bcb4f4356b0c23e5b6a5f7031462774a2e366500..65e7c3078ef3947c1e7f8b818b6543315c7ac22e 100644 GIT binary patch literal 81028 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 diff --git a/docs/_build/doctrees/support.doctree b/docs/_build/doctrees/support.doctree index 383aacd14637a6ccc6968f138fcff6d0dfcad6b6..04e3d89e5429bf9d592a28134eef2a1af68a6fef 100644 GIT binary patch delta 2308 zcmcgsZ)jUp6z@xYGts%W+N{i);+(5^gUD;tS&9^5~Kn^d4_dk`g+qYcu+h;X!n4asnwPN@2^wc_eEY zWai{-7U!cCa`(v!**pJV?E#;1`*Fv`f5oPt<0O>j;|X(DSg*o>}AMLGF2Hj!S)qYN(MtZwA6W+5Z5 zr?F|GTp>+RuB@}X(^>qClFH&Jnj*4=Oj*f*u9=0L0lA#$)aQFj=%RZ92NH3>l7s(BrN)57;aX?-(q{>yoZ+$m&ETV}{wDf`e@J*7m>Qnk z&O~n|4vOtiG(8h22?44Le(FJ!?q?lACDxS)z0`GAeGwd+eU8`{(H@s~Zo|8^_)lAg zg>x)nh(?1x&wAx^bTa4@=BOTwiyf@kB7HY_R*3MF!>xnvt4_)*8!7D#az5Ia{dw!R zweIUq*fl<{ZpLHVt0BGC{f*=Qn)`dW|Ml>%F86ni|0ei%^@3lZ4ZRQ8s~v9&?q8hC zpE&4YxTK#QCPIvM#;$l8Tzn{XE_x~)=1tfQp3No<(2lMNPm2?VHp6_?VMFv<*OB^d z*dd1X(Rg><)9>K>Ht{{x_z`M%Pi)7J(7O0pVSsnPq^L!f>8b2EMUuWEOPuf$4~Sf6-Mnh`cAoo+xBn$7i!BN zvtacjFdi_wm>~<~RdSguk!5m2HQ6v#1I#5b?|~5@@((yo!D$jq7nn{k6JW-`Tm|z! zGlhANCg-qKGO!7Iu0mD`GL~y3vLKPm5?PjbE{W%ncn*p4OPpKcyb|Y>3IqWQ$R@iT x&0(f_fN4HQZjcYSV6x(u9x9K#a$j;D=x`zR$}*_^!uzHY5km&{KD@ijHmmoSi70%J*%Xwm*A)gQUpB#F*w z-yif!9;<}&ZA75IAY`?<>0*?Y&^e9&9z8*`;$+j%<)NOTi$iuQ;tv)mp$585rWRRi znTP3uVFXv8iop6dk z%B*(*c`ib21Ey!pR^)h`9~yHR_=vAl@@SU?vR#v=Yrljx4P2@cPn>qUNi2~#+!{90v@Ge5}?Q9 zWc!5kml)vsp=L} zSZ~%3uG(Kmj=&{<13$Acqy#}kl)$_+g@<)&VFNTl2Ut=%$z$UC;4$&;@|bw^JSN@@9y1van&nhn>R7`b@)w&e BS33Xz diff --git a/docs/_build/html/_sources/support.rst.txt b/docs/_build/html/_sources/support.rst.txt index 26a7c3fd..4bdde5c4 100644 --- a/docs/_build/html/_sources/support.rst.txt +++ b/docs/_build/html/_sources/support.rst.txt @@ -21,6 +21,12 @@ How do I install the Netclient on X? As per the above, there are many unsupported operating systems. You are still welcome to try, it is just an executable binary file after all. If the system is unix-based and has kernel WireGuard installed, netclient may very well mesh the device into the network. However, the service likely will encounter problems retrieving updates. +Why MongoDB? SQL is better and smaller. +---------------------------------------- + +We are in a phase of rapid iteration. Every week the database schema changes. MongoDB makes our development process much more flexible. That said, we agree! SQL will be better for production, and indeed, we plan to switch over to SQL before v1.0, so please be patient with the resource consumption of MongoDB for the time being; it is helping to support a rapid pace of development. + + Is Netmaker a VPN like NordNPN? -------------------------------- diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 899c1178..177d299e 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["about","api","architecture","client-installation","conduct","contribute","external-clients","index","license","quick-start","server-installation","support","troubleshoot","usage"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["about.rst","api.rst","architecture.rst","client-installation.rst","conduct.rst","contribute.rst","external-clients.rst","index.rst","license.rst","quick-start.rst","server-installation.rst","support.rst","troubleshoot.rst","usage.rst"],objects:{},objnames:{},objtypes:{},terms:{"100":1,"101":10,"127":10,"172":1,"200":1,"27017":10,"50051":[2,10],"50052":9,"50555":10,"534":10,"6400":1,"8081":[1,2,10],"abstract":2,"break":3,"case":[1,2,6,7,9,10,11,13],"default":[1,2,9,10],"function":[1,2,3,10,11],"import":[2,6,9,10],"long":[0,9,11],"new":[2,9,11],"public":[2,4,8],"return":2,"static":[2,10],"switch":10,"true":10,"try":11,"var":[1,10],"while":[2,10,11],AWS:[0,11],Being:4,DNS:[2,7,9,13],For:[2,3,6,9,10],IPs:2,Not:[2,11],That:2,The:[0,1,2,3,4,6,9,10,11],Then:[9,10],There:[0,1,9,10,11],These:[2,3,9,10,11],Use:7,Used:10,Useful:10,Using:[0,1,4,7,9],Will:10,With:[2,10,11],aa3bvg0rnitirxdx:1,abil:11,abl:[1,2,10,11],abou:9,about:[2,3,9,11],abov:[2,9,10,11],absent:3,abus:4,acceler:2,accept:[3,4],access:[0,2,6,7,9,10,11,13],accesskei:1,accomplish:11,account:[4,11],achiev:[1,2,11],across:[0,3],act:[2,4,6,10],action:[1,4],actual:2,adapt:4,add:[0,1,2,9,10],added:[2,3,9,10],adding:9,addit:[2,9,10,11],addnetwork:1,address:[2,4,9,10],addressrang:[1,9],adequ:10,adm:1,admin:[0,1,2,9,10],adopt:2,advanc:[1,4,9,10],after:[3,9,11],against:10,age:4,agent:[0,2,3,7,9,10],agent_backend:10,agentbackend:10,aggreg:2,alex:11,algo:11,align:4,all:[0,1,2,3,4,6,7,8,9,10,11],allow:[1,2,3,6,9,10,13],allowedorigin:10,alreadi:[2,3,9,10],also:[0,1,2,9,10,11],altern:[2,10],alwai:10,android:2,ani:[0,2,3,4,6,9,10],anoth:[2,11],anyth:2,anywai:11,aorijqalrik3ajflaqrdajhkr:1,apach:[2,10],api:[2,9,10],api_port:10,apihost:10,apiport:10,app:11,appear:[4,9],appli:4,applic:1,appoint:4,appropri:[2,4,6,10],approv:[1,9,11],apt:10,arbitrari:0,arch:2,architectur:[9,10],arm:3,arrai:2,artifact:8,asset:10,assum:[2,10],attack:4,attent:4,attribut:7,authent:[2,9],author:1,authsourc:10,autom:0,automat:[2,3,6,10,11],avail:[3,4,8,10,11],awai:2,await:2,back:[2,6,10],backend:10,backend_url:10,background:2,backup:11,balanc:11,ban:4,bare:2,base64:9,base:[2,3,9,10,11],bash:2,basi:[2,11],basic:7,bearer:1,becaus:[0,2,10],becom:[2,10,11],been:[2,3],befor:[2,10],begin:2,behavior:4,behind:2,being:2,believ:11,below:[1,2,9,10,13],best:[4,11],better:2,between:[0,2,10],bewar:3,beyond:[10,11],bin:10,binari:[2,9,10,11],bind:10,bit:[10,11,13],blank:10,block:10,bodi:4,both:[2,4,10,11],bottom:9,bring:11,brows:11,browser:9,bug:7,build:7,built:2,bunch:11,busi:11,button:10,call:[0,2,3,7,10],callabl:3,can:[0,1,2,3,6,8,9,10,11,13],cannot:[3,6],cap_add:10,car:11,carrier:2,caus:[2,10],caution:[],center:0,cento:2,certain:[2,11],certif:10,cgnat:2,cgroup:10,challeng:10,chang:[0,1,2,3,6,9,10,11],check:[1,2,9,10],checkin:1,choos:3,chose:11,chosen:[2,3],circumst:4,clarifi:4,clear:11,click:[2,9,10],client:[0,2,9,11],client_mod:10,clientmod:10,close:11,cloud:[0,13],cluster:[10,13],code:[2,3,8],com:[4,9,10,11],come:[2,7,10],comm:10,command:[2,3,9,10],comment:[4,10],commit:4,common:[2,7],commun:[2,4,7,10,11,13],compat:[6,7,9,11],compil:[2,3],complaint:4,complet:2,complex:2,complic:2,compon:[7,10],compos:[7,9],comput:[0,2],concept:7,concern:11,conf:10,confidenti:4,config:[1,2,6,11],configur:[0,1,2,6,7,9,11],conflict:[2,9,10],conflift:[],connect:[0,2,3,6,9,10,13],consequ:10,consid:[2,4],consider:2,consist:2,consol:9,construct:4,consum:[3,10],consumpt:2,contact:[4,7],contain:[2,9,10],container_nam:10,content:1,contrast:2,contribut:4,contributor:4,control:[2,9,10],copi:[9,10],core:[0,7,11],coredn:7,corefil:10,coreo:2,corpor:11,correct:4,cors_allowed_origin:10,could:[0,4],coven:4,cover:[7,10],cpu:2,creat:[0,1,2,3,4,7,10,13],createadmin:1,creategatewai:1,createus:10,creation:0,credenti:10,critic:4,cross:13,cryptocurr:0,curl:[9,10],current:[2,10],custom:[7,10],customiz:10,cycl:[1,2],daemon:2,data:[0,2,10],databas:2,date:1,dbadminanydatabas:10,dbu:10,debian:[2,10],decis:7,decod:[2,9],deem:4,defaultkeepal:9,defin:4,delet:[1,9],deletegatewai:1,depend:[2,3,10],depends_on:10,deploi:[2,7,10],deploy:[2,10],derogatori:4,deserv:11,design:[2,3,6,7,11],desktop:[2,3,6],detail:[1,2,3,4,7,9,10],determin:[4,10,11],dev:10,develop:2,devic:[0,2,3,7,9,11],diabl:10,diagram:2,differ:[0,2,4,9,10,11,13],directli:[0,1,2,10],directori:10,disabl:[2,4],disable_remote_ip_check:10,disableremoteipcheck:10,discord:11,discuss:10,displai:9,displaynam:1,distribut:2,distributionshav:2,dns:[2,3,10],dns_mode:10,dnsconfig:10,dnsmode:10,dnsstublisten:10,doc:[9,10,11],docker:[2,7,9],document:[0,2,3,9,10],doe:[2,6,7,10],doing:0,domain:10,don:[2,3,11,13],doubl:2,down:[0,9,11],download:[9,10],dual:7,dynam:[0,2,7,11],each:[0,2,3,9,10],easi:10,easier:[2,10,11],easiest:2,easili:[0,10],echo:9,econom:11,edit:4,effect:9,effici:2,either:[2,11],electron:4,elev:10,els:11,email:11,empathi:4,enabl:[2,9],encod:9,encompass:0,encount:[2,11],encrypt:[0,2,10],end:[2,10,11],endpoint:[1,2,6,10],enforc:7,enhanc:7,enough:9,ensur:[10,11],enter:9,entir:[2,9],entireti:2,env:[1,10],environ:[0,1,2,4,10],equal:10,equival:10,escal:10,especi:10,establish:6,etc:[9,10],eth0:1,ethnic:4,evalu:11,even:[0,2,10],event:4,eventu:11,everi:[2,3,9,11],everyon:4,everyth:2,evolv:2,examin:9,exampl:[2,4,7],except:10,execut:11,exist:[0,2,9,10],expand:11,expect:[4,7,10,11],experi:4,explain:[2,7,10],explicit:4,explicitli:10,expos:2,express:4,expressvpn:11,extens:2,extern:[2,3,9,11],face:4,fact:0,fail:9,fair:4,fairli:2,faith:4,fals:10,familiar:[0,2,11],faq:7,fast:[2,7,10],faster:[0,2],featur:[7,9],fedora:2,feiszli:11,few:[3,10,11],field:9,figur:13,file:[2,6,11],filenam:1,financi:11,find:[2,13],fine:0,firewal:10,firmli:11,first:[2,9,11,13],fit:13,flag:10,flat:0,flexibl:[0,2],flow:2,focu:11,focus:4,folder:2,follow:[4,9,10,11],fork:7,form:3,forward:6,foster:4,found:[0,2,8,9],free:4,freeli:8,from:[0,1,2,3,4,9,10,11,13],front:[2,10],full:[0,2],fulli:[0,2,10,11],fundament:10,further:4,futur:[2,9,10],gain:10,gatewai:[1,2,6,10,11,13],gender:4,gener:[1,2,6,10,11],generate_config_j:10,get:[1,7,9,10,13],github:[2,7,10,11],githubusercont:[9,10],give:[2,7,9,10],given:[0,2,9,10],goe:0,going:9,golang:2,good:[4,11,13],googl:10,gracefulli:4,grade:2,gravitl:[4,9,10,11],grpc:[2,9],grpc_port:10,grpcaddr:10,grpcaddrrang:10,grpcendpoint:10,grpchost:10,grpcifac:10,grpcport:10,grpcwg:10,guid:[0,2,9,10],guidelin:11,hack:11,hand:7,handl:0,harass:4,hard:11,harm:4,has:[0,2,3,10,11,13],hasadmin:1,have:[0,2,3,4,9,10,11,13],header:1,health:11,heart:3,heavi:2,heaviest:2,heavili:2,help:[1,2,7,10,11,13],here:[2,4,8,9,10,11,13],high:2,hold:[0,2,3],home:[0,2],hook:6,host:[2,3,9,10,11],host_ip:[9,10],hous:1,how:[2,3,7,10],howev:[1,2,3,9,10,11],html:10,http:[1,9,10,11],http_port:10,hub:[0,2,10],idea:11,ident:4,imag:10,imageri:4,immedi:11,impact:[2,11],inappropri:4,incid:4,includ:[2,4,6,7,10,11],inclus:4,incompat:2,incorrect:10,increas:[2,10],independ:6,individu:[4,10],industri:2,info:[2,4,10,11],inform:[2,3,4,9],ingress:[6,11],initi:11,insert:[9,10],instal:[0,2],instanc:[1,2,4,9,10],instead:[0,6,9,10],instruct:[9,10],insult:4,intact:3,intend:3,interact:[0,2],interest:[4,11],interfac:[1,10],internet:[0,2,11],intro:13,introduc:[2,11],introduct:7,invalid:9,investig:4,invis:2,iot:[0,2],iphon:2,ipsec:2,ipv6:[7,10],issu:[4,7,10],its:[0,2,3,4,6,9,10],itself:[2,3],join:[9,10],journalctl:10,json:1,just:[0,2,3,9,10,11],jwt:1,keep:[1,10],kei:[2,10],kernel:[0,2,10,11],keynam:1,keyrequir:10,keyupd:1,know:[10,11,13],known:2,kubernet:[0,7],lack:10,languag:4,laptop1:1,laptop:6,larg:2,larger:10,last:1,lastmodifi:1,latenc:2,later:[2,10],latest:[2,6,10],layer:0,layout:2,lead:11,leadership:4,learn:9,least:0,leav:9,left:10,less:2,let:[0,11,13],level:[2,4,10],light:10,lighter:2,lightweight:2,like:[0,2,3,9,10],likewis:10,limit:[7,10,11],line:2,link:[7,10],linux:[2,3,7,9,11],list:[0,2,10],listenport:1,littl:[2,11],load:[2,10,11],local:[2,3,7,9,10],localaddress:1,localhost:1,locat:[0,2,10],login:[9,10],look:11,lot:[2,11],lxc:10,mac:10,macaddress:1,machin:[0,2,3,6,9,10],made:[0,2],mai:[1,2,3,4,9,10,11],mail:4,main:[],mainfram:[],maintain:[4,11],make:[0,2,4,6,9,10,11],man:6,manag:[0,2,6,7,10,13],mandatori:10,mani:[0,2,10,11,13],manual:[2,9,11],map:10,master:[9,10],master_kei:10,masterkei:[1,10],match:[3,10],mean:[2,3,6,10,11],media:4,member:[4,13],memori:2,mesh:[0,6,11,13],meshclient:1,metal:2,method:[1,2,3,6,9],mgmt:1,middl:6,might:[0,2,10],mind:10,mint:2,minu:10,miss:2,mix:3,mode:[2,7,9],model:[0,2],modif:10,modifi:[1,2,3,9,10,11],monet:11,mongo:10,mongo_admin:10,mongo_host:10,mongo_initdb_root_password:10,mongo_initdb_root_usernam:10,mongo_opt:10,mongo_pass:10,mongo_port:10,mongoadmin:10,mongoconn:10,mongopass:10,mongovol:10,more:[0,1,2,7,9,10,11],most:[1,2,3,10,11],mostli:2,mount:10,move:11,much:[0,2],mullvad:11,mullvadvpn:11,multipl:[0,9,10],must:[1,2,3,9,10],mykei:[1,9],mynet:9,name:[1,9,10],nameserv:[2,3,10],nat:2,nation:4,navig:9,nebula:0,necessari:[3,4,9,10],need:[0,1,2,9,10,11],neighborhood:0,neither:2,net_admin:10,netclient:[0,6,7,10],netid:1,netmak:[1,3,6,8,10],network:[0,6,7,9,10,11],network_mod:10,next:9,nginx:[2,10],noclient:10,node:[7,10,11],nodn:10,non:[2,3,10],none:0,noonewillguessthi:1,nordvpn:11,note:[1,3,6,7],notifi:2,now:[0,9,10,11],number:[2,9,10,11],oblig:4,obtain:1,off:[2,10],offens:4,offic:[0,13],offici:[1,4,9],offlin:4,onc:9,one:[2,3,6,9,10],onli:[1,2,6,9,11],onlin:4,onto:10,open:[2,4,10,11],openvpn:2,oper:[2,3,10],opt:10,option:[2,7,11],order:[2,11],orient:4,origin:10,osi:11,other:[0,2,3,4,6,9,10,11],otherwis:[0,3,4],our:[7,10],out:[0,2,9,10,11,13],outlin:[2,10],output:9,outsid:7,over:[0,2,10],overlai:[0,7],overrid:10,overridden:[2,10],overview:[2,7,13],overwhelm:13,own:2,page:2,pai:11,pair:[2,10],pane:9,part:[2,3,10],partial:2,particip:4,particular:2,pass:[2,10],password:[1,9,10],path:[1,10,11],peer:[2,3,13],pend:[1,9],peopl:11,per:11,perform:[1,2,10],period:2,perman:4,permiss:[4,9],permit:9,persistenkeepal:9,person:4,perspect:[0,2],phone:[2,3,6,11],physic:4,pick:[2,9],pictur:2,pidof:9,ping:9,pivpn:11,place:10,plan:10,platform:[2,7],pleas:[3,9,11],pledg:7,point:[2,11],polici:4,polit:4,popul:10,port:[2,9,10],posit:4,possibl:[2,7,9],post:[1,2,4],practic:2,pre:[9,10],preced:2,prefer:10,prereqisit:7,prerequisit:[7,10],present:9,previou:2,primari:10,prior:10,privaci:11,privat:[2,4,7,9,10,11,13],privatekei:10,privileg:10,privkei:10,probabl:[0,11],problem:[10,11],proce:[],process:[7,9,10],product:10,profession:4,project:[1,4,7,11],proof:0,properli:3,properti:3,provid:[0,2,10],pubkei:10,publickei:[1,10],publish:[4,8],pull:[2,3,6],push:[3,6],put:1,pwd:10,quick:10,quickli:[7,9],race:[4,11],rang:[9,10],rangestr:1,rapidli:2,raspian:2,raw:[9,10],reach:[0,2,3,6],reachabl:[2,6,9,10],reactj:2,read:10,readwriteanydatabas:10,reallysecret:1,reason:[2,4,10,11],reccommend:10,recent:2,reciev:[1,2],recommend:[1,3,6,10],reconfigur:[2,3],reduc:2,refer:[2,9],regard:[2,4],regardless:4,regist:2,regular:11,reiter:2,reject:4,rel:2,relai:[2,6,10,11],releas:[2,10],reli:[0,2,3],relianc:2,religion:4,remot:[0,10],remov:[1,2,4,9,10],removenetwork:1,repeat:9,repercuss:4,replac:[2,10],report:[2,4],repositori:[2,8],repres:4,represent:4,request:[1,2,7,10],requir:[1,2,3,9,10],resolv:[2,3,10],resolvectl:[3,10],resourc:[6,7],respect:4,respons:[2,7],rest:10,rest_backend:10,restart:10,restbackend:10,restrict:[10,11],result:4,retriev:[0,1,2,3,9,11],review:4,rhel:2,right:[0,4,11],road:11,role:10,root:[9,10],rout:[0,2],router:2,run:[0,1,2,3,6,7,9,10,11],runnin:6,runtim:10,said:[2,11],same:[0,3,9,10],sampl:0,save:9,scenario:[9,10],scope:7,screen:9,script:[2,9,10],second:9,secret:[1,9],secretkei:10,section:[9,10],secur:[0,1,2,7,9],securebetween:[],sed:[9,10],see:[1,2,3,9,10,11],select:[9,13],self:11,send:[2,3,10],sens:[2,11],sensibl:[0,2,9],separ:[2,4,10,13],serv:[2,10],server:[0,3,6,8,9,11],server_api_host:10,server_grpc_host:10,server_grpc_wg_address:10,server_grpc_wg_address_rang:10,server_grpc_wg_interfac:10,server_grpc_wg_keyrequir:10,server_grpc_wg_port:10,server_grpc_wg_privkei:10,server_grpc_wg_pubkei:10,server_grpc_wireguard:10,server_host:10,server_http_host:10,servic:[2,3,6,10,11],set:[1,2,3,4,9,10,11,13],setup:[0,2,7],sever:[2,10],sexual:4,sfl:[9,10],share:10,ship:9,should:[0,1,2,3,6,7,9,10,11],show:[4,9,10],side:[8,10],sign:[2,9,10],signific:2,signigif:2,signup:2,similar:[0,9,10,11],simpl:[2,3,9,10],simplest:[2,3],simpli:[2,9],simultan:0,sinc:10,singl:[1,10,11],site:[0,7,10],situat:2,size:4,skynet:1,slim:9,slow:0,small:[2,11],smartgui:1,social:4,solut:2,solv:10,some:[1,2,10,11,13],someon:11,someth:[9,11],somewher:9,soon:[7,10],sort:[0,2],sourc:[2,3,7,8,11],space:4,special:[2,9,10],specif:[2,3,4],specifi:10,speed:[0,2],split:3,spoke:[0,2,10],sponsor:11,spread:0,sql:2,ssh:9,sspl:8,stabil:11,stack:7,stai:3,stake:0,standard:[2,7,9,10],start:[10,13],startup:[1,9,10],state:9,statement:7,statu:10,step:[2,3,9,10],still:[0,10,11],stock:11,stop:10,store:[2,10],string:9,structur:2,submit:[7,9],subnet:2,subspac:11,subspacecloud:11,substanti:[0,10],success:2,sudo:[9,10],support:[2,10],sure:[10,11],surfshark:11,suse:2,swagger:7,sys:10,sys_modul:10,system:[7,9],system_bus_socket:10,systemctl:10,systemd:[3,9,10,11],tab:9,tailscal:0,take:[0,1,2,4,9,10],talk:[0,2],team:[4,11],technic:[0,7,11],technolog:2,tell:[0,2,3],temporari:4,temporarili:4,term:11,terrain:11,test:[7,9,10],than:[2,11],thei:[0,2,4,10,11],them:[2,9,10,11],themselv:2,thhe:10,thi:[0,1,2,3,4,6,7,8,9,10,11],thing:[0,2,10,11],think:[11,13],those:[0,2,3,6,10],though:[10,11],thought:11,thousand:0,threaten:4,three:9,through:2,ticket:11,time:[1,2,3,9,11,13],timer:2,timestamp:2,token:9,tool:[0,3],top:2,topic:13,topolog:2,total:10,toward:4,traffic:[0,2,6,10],trailofbit:11,transact:2,treat:[2,3],tricki:2,troll:4,troubleshoot:[1,9],tunnel:[0,2],tunnelbear:11,turn:[2,10],tutori:7,two:[0,1,2,10],type:1,typic:[0,2,9],ubuntu:[2,10],udp:10,ultim:11,unabl:2,unaccept:4,uncom:10,uncordon:1,under:[8,9,10],underlai:[0,13],underli:10,understand:10,uninstal:7,uninstral:7,unix:[2,3,11],unless:10,unmanag:11,unmesh:11,unnecessari:11,unset:[9,10],unsupport:11,unten:11,until:[9,11],unwelcom:4,unzip:10,updat:[1,2,9,11],upon:2,url:10,usag:[7,10,13],use:[0,1,2,3,4,6,7,9,10,11,13],used:[1,2,6,9,10],useful:10,user:[2,3,9,10,11],useradminanydatabas:10,usernam:[1,9,10],uses:[0,1,2,6,9,10],using:[0,1,2,3,4,6,7,10,11,13],usr:10,util:3,valid:2,valu:[1,2,9,10],vari:10,variabl:2,variou:[3,7,10],vehicl:11,veri:[0,2,3,11],verifi:2,versa:11,version:[2,4,8,10],via:[1,2,4,6,10,11,13],vice:11,view:[9,11],viewpoint:4,vim:10,virtual:[0,3,6,7,11,13],visibl:9,vm3ow4thatogiwnsla3thsl3894th:9,volum:[9,10],vpc:[0,11],vpn:[2,13],wai:[10,11],want:[0,2,9,10,11],warn:10,web:[10,11],webserv:2,websit:2,week:11,weight:[2,10],welcom:[4,11],well:[2,3,7,9,11],wget:[9,10],what:[2,4,6,7],whatev:[3,10],when:[2,3,4,10],where:[2,6,7,9,10,13],wherev:0,whether:[0,10],which:[0,2,3,4,6,8,9,10,11],who:4,why:[2,3,7],wide:2,wider:2,wiki:4,window:[2,3,10,11],wiregard:10,wireguard:[0,3,6,7,9,10,11],wish:[6,10],within:[2,3,4],without:[1,2,4,7,9,11],won:11,work:[2,7,11],workstat:9,world:[0,2],wors:2,worth:2,would:[0,3,9,10,11],write:[2,10],www:10,x86:3,yaml:[1,10],yes:10,yml:[9,10],you:[0,1,2,3,6,7,9,10,13],your:[0,1,2,3,9,10,13],your_pass:1,your_password:1,your_secret_kei:1,zeroti:0,zip:10,zrb9vfhk8a:11},titles:["About","API Reference","Architecture","Client Installation","Code of Conduct","Contribute","External Clients","Welcome to the Netmaker Documentation","License","Quick Start","Server Installation","Support","Troubleshooting","Using Netmaker"],titleterms:{"case":0,Adding:3,DNS:[3,10],Use:0,Using:13,Will:11,about:[0,7],access:[1,3],agent:12,ani:11,annot:10,api:[1,7],architectur:[2,7],attribut:4,authent:1,basic:13,bug:11,build:5,call:1,cli:3,client:[3,6,7,10],code:[4,5,7],common:12,compat:[2,3,10],compon:2,compos:10,concept:2,conduct:[4,7],config:[3,10],configur:[3,10],contact:11,contribut:[5,7],core:2,coredn:[2,10,12],creat:9,curl:1,daemon:3,deploi:9,descript:10,disabl:10,docker:10,document:[1,7],doe:[0,11],dual:13,enabl:10,enforc:4,enhanc:5,exampl:1,extern:[6,7,13],faq:11,featur:[10,11],file:[1,3,10],fork:5,format:1,full:10,grpc:10,guid:7,how:[0,11],instal:[3,7,9,10,11],introduct:[3,6,9],ipv6:13,issu:[5,11,12],kei:[1,3,9],kubernet:[10,13],licens:[7,8,11],like:11,limit:2,linux:10,local:13,log:3,make:3,manag:[1,3,9],manual:3,mesh:2,mode:[3,10],mongodb:[2,10],netclient:[2,3,9,11],netmak:[0,2,7,9,11,13],network:[1,2,3,13],node:[1,2,9,13],nordnpn:11,note:10,offer:11,onli:10,oper:11,option:10,our:4,paid:11,pledg:4,prereqisit:10,prerequisit:[3,9],privat:3,process:2,quick:[7,9],refer:[1,3,7,10],remov:3,request:11,respons:4,scope:4,secur:10,server:[1,2,7,10,12],setup:[9,10],site:13,slim:10,sspl:11,stack:13,standard:4,start:[7,9],submit:5,support:[7,11],system:[2,3,10,11],systemd:2,technic:2,test:5,token:3,troubleshoot:[3,7,12],tutori:13,uninstal:[3,9],uninstral:9,updat:3,usag:1,user:1,variabl:[3,10],video:13,view:3,vpn:11,welcom:7,what:0,why:11,wireguard:2,without:10,work:0,written:13,you:11}}) \ No newline at end of file +Search.setIndex({docnames:["about","api","architecture","client-installation","conduct","contribute","external-clients","index","license","quick-start","server-installation","support","troubleshoot","usage"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,sphinx:56},filenames:["about.rst","api.rst","architecture.rst","client-installation.rst","conduct.rst","contribute.rst","external-clients.rst","index.rst","license.rst","quick-start.rst","server-installation.rst","support.rst","troubleshoot.rst","usage.rst"],objects:{},objnames:{},objtypes:{},terms:{"100":1,"101":10,"127":10,"172":1,"200":1,"27017":10,"50051":[2,10],"50052":9,"50555":10,"534":10,"6400":1,"8081":[1,2,10],"abstract":2,"break":3,"case":[1,2,6,7,9,10,11,13],"default":[1,2,9,10],"function":[1,2,3,10,11],"import":[2,6,9,10],"long":[0,9,11],"new":[2,9,11],"public":[2,4,8],"return":2,"static":[2,10],"switch":[10,11],"true":10,"try":11,"var":[1,10],"while":[2,10,11],AWS:[0,11],Being:4,DNS:[2,7,9,13],For:[2,3,6,9,10],IPs:2,Not:[2,11],That:[2,11],The:[0,1,2,3,4,6,9,10,11],Then:[9,10],There:[0,1,9,10,11],These:[2,3,9,10,11],Use:7,Used:10,Useful:10,Using:[0,1,4,7,9],Will:10,With:[2,10,11],aa3bvg0rnitirxdx:1,abil:11,abl:[1,2,10,11],abou:9,about:[2,3,9,11],abov:[2,9,10,11],absent:3,abus:4,acceler:2,accept:[3,4],access:[0,2,6,7,9,10,11,13],accesskei:1,accomplish:11,account:[4,11],achiev:[1,2,11],across:[0,3],act:[2,4,6,10],action:[1,4],actual:2,adapt:4,add:[0,1,2,9,10],added:[2,3,9,10],adding:9,addit:[2,9,10,11],addnetwork:1,address:[2,4,9,10],addressrang:[1,9],adequ:10,adm:1,admin:[0,1,2,9,10],adopt:2,advanc:[1,4,9,10],after:[3,9,11],against:10,age:4,agent:[0,2,3,7,9,10],agent_backend:10,agentbackend:10,aggreg:2,agre:11,alex:11,algo:11,align:4,all:[0,1,2,3,4,6,7,8,9,10,11],allow:[1,2,3,6,9,10,13],allowedorigin:10,alreadi:[2,3,9,10],also:[0,1,2,9,10,11],altern:[2,10],alwai:10,android:2,ani:[0,2,3,4,6,9,10],anoth:[2,11],anyth:2,anywai:11,aorijqalrik3ajflaqrdajhkr:1,apach:[2,10],api:[2,9,10],api_port:10,apihost:10,apiport:10,app:11,appear:[4,9],appli:4,applic:1,appoint:4,appropri:[2,4,6,10],approv:[1,9,11],apt:10,arbitrari:0,arch:2,architectur:[9,10],arm:3,arrai:2,artifact:8,asset:10,assum:[2,10],attack:4,attent:4,attribut:7,authent:[2,9],author:1,authsourc:10,autom:0,automat:[2,3,6,10,11],avail:[3,4,8,10,11],awai:2,await:2,back:[2,6,10],backend:10,backend_url:10,background:2,backup:11,balanc:11,ban:4,bare:2,base64:9,base:[2,3,9,10,11],bash:2,basi:[2,11],basic:7,bearer:1,becaus:[0,2,10],becom:[2,10,11],been:[2,3],befor:[2,10,11],begin:2,behavior:4,behind:2,being:[2,11],believ:11,below:[1,2,9,10,13],best:[4,11],better:2,between:[0,2,10],bewar:3,beyond:[10,11],bin:10,binari:[2,9,10,11],bind:10,bit:[10,11,13],blank:10,block:10,bodi:4,both:[2,4,10,11],bottom:9,bring:11,brows:11,browser:9,bug:7,build:7,built:2,bunch:11,busi:11,button:10,call:[0,2,3,7,10],callabl:3,can:[0,1,2,3,6,8,9,10,11,13],cannot:[3,6],cap_add:10,car:11,carrier:2,caus:[2,10],caution:[],center:0,cento:2,certain:[2,11],certif:10,cgnat:2,cgroup:10,challeng:10,chang:[0,1,2,3,6,9,10,11],check:[1,2,9,10],checkin:1,choos:3,chose:11,chosen:[2,3],circumst:4,clarifi:4,clear:11,click:[2,9,10],client:[0,2,9,11],client_mod:10,clientmod:10,close:11,cloud:[0,13],cluster:[10,13],code:[2,3,8],com:[4,9,10,11],come:[2,7,10],comm:10,command:[2,3,9,10],comment:[4,10],commit:4,common:[2,7],commun:[2,4,7,10,11,13],compat:[6,7,9,11],compil:[2,3],complaint:4,complet:2,complex:2,complic:2,compon:[7,10],compos:[7,9],comput:[0,2],concept:7,concern:11,conf:10,confidenti:4,config:[1,2,6,11],configur:[0,1,2,6,7,9,11],conflict:[2,9,10],conflift:[],connect:[0,2,3,6,9,10,13],consequ:10,consid:[2,4],consider:2,consist:2,consol:9,construct:4,consum:[3,10],consumpt:[2,11],contact:[4,7],contain:[2,9,10],container_nam:10,content:1,contrast:2,contribut:4,contributor:4,control:[2,9,10],copi:[9,10],core:[0,7,11],coredn:7,corefil:10,coreo:2,corpor:11,correct:4,cors_allowed_origin:10,could:[0,4],coven:4,cover:[7,10],cpu:2,creat:[0,1,2,3,4,7,10,13],createadmin:1,creategatewai:1,createus:10,creation:0,credenti:10,critic:4,cross:13,cryptocurr:0,curl:[9,10],current:[2,10],custom:[7,10],customiz:10,cycl:[1,2],daemon:2,data:[0,2,10],databas:[2,11],date:1,dbadminanydatabas:10,dbu:10,debian:[2,10],decis:7,decod:[2,9],deem:4,defaultkeepal:9,defin:4,delet:[1,9],deletegatewai:1,depend:[2,3,10],depends_on:10,deploi:[2,7,10],deploy:[2,10],derogatori:4,deserv:11,design:[2,3,6,7,11],desktop:[2,3,6],detail:[1,2,3,4,7,9,10],determin:[4,10,11],dev:10,develop:[2,11],devic:[0,2,3,7,9,11],diabl:10,diagram:2,differ:[0,2,4,9,10,11,13],directli:[0,1,2,10],directori:10,disabl:[2,4],disable_remote_ip_check:10,disableremoteipcheck:10,discord:11,discuss:10,displai:9,displaynam:1,distribut:2,distributionshav:2,dns:[2,3,10],dns_mode:10,dnsconfig:10,dnsmode:10,dnsstublisten:10,doc:[9,10,11],docker:[2,7,9],document:[0,2,3,9,10],doe:[2,6,7,10],doing:0,domain:10,don:[2,3,11,13],doubl:2,down:[0,9,11],download:[9,10],dual:7,dynam:[0,2,7,11],each:[0,2,3,9,10],easi:10,easier:[2,10,11],easiest:2,easili:[0,10],echo:9,econom:11,edit:4,effect:9,effici:2,either:[2,11],electron:4,elev:10,els:11,email:11,empathi:4,enabl:[2,9],encod:9,encompass:0,encount:[2,11],encrypt:[0,2,10],end:[2,10,11],endpoint:[1,2,6,10],enforc:7,enhanc:7,enough:9,ensur:[10,11],enter:9,entir:[2,9],entireti:2,env:[1,10],environ:[0,1,2,4,10],equal:10,equival:10,escal:10,especi:10,establish:6,etc:[9,10],eth0:1,ethnic:4,evalu:11,even:[0,2,10],event:4,eventu:11,everi:[2,3,9,11],everyon:4,everyth:2,evolv:2,examin:9,exampl:[2,4,7],except:10,execut:11,exist:[0,2,9,10],expand:11,expect:[4,7,10,11],experi:4,explain:[2,7,10],explicit:4,explicitli:10,expos:2,express:4,expressvpn:11,extens:2,extern:[2,3,9,11],face:4,fact:0,fail:9,fair:4,fairli:2,faith:4,fals:10,familiar:[0,2,11],faq:7,fast:[2,7,10],faster:[0,2],featur:[7,9],fedora:2,feiszli:11,few:[3,10,11],field:9,figur:13,file:[2,6,11],filenam:1,financi:11,find:[2,13],fine:0,firewal:10,firmli:11,first:[2,9,11,13],fit:13,flag:10,flat:0,flexibl:[0,2,11],flow:2,focu:11,focus:4,folder:2,follow:[4,9,10,11],fork:7,form:3,forward:6,foster:4,found:[0,2,8,9],free:4,freeli:8,from:[0,1,2,3,4,9,10,11,13],front:[2,10],full:[0,2],fulli:[0,2,10,11],fundament:10,further:4,futur:[2,9,10],gain:10,gatewai:[1,2,6,10,11,13],gender:4,gener:[1,2,6,10,11],generate_config_j:10,get:[1,7,9,10,13],github:[2,7,10,11],githubusercont:[9,10],give:[2,7,9,10],given:[0,2,9,10],goe:0,going:9,golang:2,good:[4,11,13],googl:10,gracefulli:4,grade:2,gravitl:[4,9,10,11],grpc:[2,9],grpc_port:10,grpcaddr:10,grpcaddrrang:10,grpcendpoint:10,grpchost:10,grpcifac:10,grpcport:10,grpcwg:10,guid:[0,2,9,10],guidelin:11,hack:11,hand:7,handl:0,harass:4,hard:11,harm:4,has:[0,2,3,10,11,13],hasadmin:1,have:[0,2,3,4,9,10,11,13],header:1,health:11,heart:3,heavi:2,heaviest:2,heavili:2,help:[1,2,7,10,11,13],here:[2,4,8,9,10,11,13],high:2,hold:[0,2,3],home:[0,2],hook:6,host:[2,3,9,10,11],host_ip:[9,10],hous:1,how:[2,3,7,10],howev:[1,2,3,9,10,11],html:10,http:[1,9,10,11],http_port:10,hub:[0,2,10],idea:11,ident:4,imag:10,imageri:4,immedi:11,impact:[2,11],inappropri:4,incid:4,includ:[2,4,6,7,10,11],inclus:4,incompat:2,incorrect:10,increas:[2,10],inde:11,independ:6,individu:[4,10],industri:2,info:[2,4,10,11],inform:[2,3,4,9],ingress:[6,11],initi:11,insert:[9,10],instal:[0,2],instanc:[1,2,4,9,10],instead:[0,6,9,10],instruct:[9,10],insult:4,intact:3,intend:3,interact:[0,2],interest:[4,11],interfac:[1,10],internet:[0,2,11],intro:13,introduc:[2,11],introduct:7,invalid:9,investig:4,invis:2,iot:[0,2],iphon:2,ipsec:2,ipv6:[7,10],issu:[4,7,10],iter:11,its:[0,2,3,4,6,9,10],itself:[2,3],join:[9,10],journalctl:10,json:1,just:[0,2,3,9,10,11],jwt:1,keep:[1,10],kei:[2,10],kernel:[0,2,10,11],keynam:1,keyrequir:10,keyupd:1,know:[10,11,13],known:2,kubernet:[0,7],lack:10,languag:4,laptop1:1,laptop:6,larg:2,larger:10,last:1,lastmodifi:1,latenc:2,later:[2,10],latest:[2,6,10],layer:0,layout:2,lead:11,leadership:4,learn:9,least:0,leav:9,left:10,less:2,let:[0,11,13],level:[2,4,10],light:10,lighter:2,lightweight:2,like:[0,2,3,9,10],likewis:10,limit:[7,10,11],line:2,link:[7,10],linux:[2,3,7,9,11],list:[0,2,10],listenport:1,littl:[2,11],load:[2,10,11],local:[2,3,7,9,10],localaddress:1,localhost:1,locat:[0,2,10],login:[9,10],look:11,lot:[2,11],lxc:10,mac:10,macaddress:1,machin:[0,2,3,6,9,10],made:[0,2],mai:[1,2,3,4,9,10,11],mail:4,main:[],mainfram:[],maintain:[4,11],make:[0,2,4,6,9,10,11],man:6,manag:[0,2,6,7,10,13],mandatori:10,mani:[0,2,10,11,13],manual:[2,9,11],map:10,master:[9,10],master_kei:10,masterkei:[1,10],match:[3,10],mean:[2,3,6,10,11],media:4,member:[4,13],memori:2,mesh:[0,6,11,13],meshclient:1,metal:2,method:[1,2,3,6,9],mgmt:1,middl:6,might:[0,2,10],mind:10,mint:2,minu:10,miss:2,mix:3,mode:[2,7,9],model:[0,2],modif:10,modifi:[1,2,3,9,10,11],monet:11,mongo:10,mongo_admin:10,mongo_host:10,mongo_initdb_root_password:10,mongo_initdb_root_usernam:10,mongo_opt:10,mongo_pass:10,mongo_port:10,mongoadmin:10,mongoconn:10,mongopass:10,mongovol:10,more:[0,1,2,7,9,10,11],most:[1,2,3,10,11],mostli:2,mount:10,move:11,much:[0,2,11],mullvad:11,mullvadvpn:11,multipl:[0,9,10],must:[1,2,3,9,10],mykei:[1,9],mynet:9,name:[1,9,10],nameserv:[2,3,10],nat:2,nation:4,navig:9,nebula:0,necessari:[3,4,9,10],need:[0,1,2,9,10,11],neighborhood:0,neither:2,net_admin:10,netclient:[0,6,7,10],netid:1,netmak:[1,3,6,8,10],network:[0,6,7,9,10,11],network_mod:10,next:9,nginx:[2,10],noclient:10,node:[7,10,11],nodn:10,non:[2,3,10],none:0,noonewillguessthi:1,nordvpn:11,note:[1,3,6,7],notifi:2,now:[0,9,10,11],number:[2,9,10,11],oblig:4,obtain:1,off:[2,10],offens:4,offic:[0,13],offici:[1,4,9],offlin:4,onc:9,one:[2,3,6,9,10],onli:[1,2,6,9,11],onlin:4,onto:10,open:[2,4,10,11],openvpn:2,oper:[2,3,10],opt:10,option:[2,7,11],order:[2,11],orient:4,origin:10,osi:11,other:[0,2,3,4,6,9,10,11],otherwis:[0,3,4],our:[7,10,11],out:[0,2,9,10,11,13],outlin:[2,10],output:9,outsid:7,over:[0,2,10,11],overlai:[0,7],overrid:10,overridden:[2,10],overview:[2,7,13],overwhelm:13,own:2,pace:11,page:2,pai:11,pair:[2,10],pane:9,part:[2,3,10],partial:2,particip:4,particular:2,pass:[2,10],password:[1,9,10],path:[1,10,11],patient:11,peer:[2,3,13],pend:[1,9],peopl:11,per:11,perform:[1,2,10],period:2,perman:4,permiss:[4,9],permit:9,persistenkeepal:9,person:4,perspect:[0,2],phase:11,phone:[2,3,6,11],physic:4,pick:[2,9],pictur:2,pidof:9,ping:9,pivpn:11,place:10,plan:[10,11],platform:[2,7],pleas:[3,9,11],pledg:7,point:[2,11],polici:4,polit:4,popul:10,port:[2,9,10],posit:4,possibl:[2,7,9],post:[1,2,4],practic:2,pre:[9,10],preced:2,prefer:10,prereqisit:7,prerequisit:[7,10],present:9,previou:2,primari:10,prior:10,privaci:11,privat:[2,4,7,9,10,11,13],privatekei:10,privileg:10,privkei:10,probabl:[0,11],problem:[10,11],proce:[],process:[7,9,10,11],product:[10,11],profession:4,project:[1,4,7,11],proof:0,properli:3,properti:3,provid:[0,2,10],pubkei:10,publickei:[1,10],publish:[4,8],pull:[2,3,6],push:[3,6],put:1,pwd:10,quick:10,quickli:[7,9],race:[4,11],rang:[9,10],rangestr:1,rapid:11,rapidli:2,raspian:2,raw:[9,10],reach:[0,2,3,6],reachabl:[2,6,9,10],reactj:2,read:10,readwriteanydatabas:10,reallysecret:1,reason:[2,4,10,11],reccommend:10,recent:2,reciev:[1,2],recommend:[1,3,6,10],reconfigur:[2,3],reduc:2,refer:[2,9],regard:[2,4],regardless:4,regist:2,regular:11,reiter:2,reject:4,rel:2,relai:[2,6,10,11],releas:[2,10],reli:[0,2,3],relianc:2,religion:4,remot:[0,10],remov:[1,2,4,9,10],removenetwork:1,repeat:9,repercuss:4,replac:[2,10],report:[2,4],repositori:[2,8],repres:4,represent:4,request:[1,2,7,10],requir:[1,2,3,9,10],resolv:[2,3,10],resolvectl:[3,10],resourc:[6,7,11],respect:4,respons:[2,7],rest:10,rest_backend:10,restart:10,restbackend:10,restrict:[10,11],result:4,retriev:[0,1,2,3,9,11],review:4,rhel:2,right:[0,4,11],road:11,role:10,root:[9,10],rout:[0,2],router:2,run:[0,1,2,3,6,7,9,10,11],runnin:6,runtim:10,said:[2,11],same:[0,3,9,10],sampl:0,save:9,scenario:[9,10],schema:11,scope:7,screen:9,script:[2,9,10],second:9,secret:[1,9],secretkei:10,section:[9,10],secur:[0,1,2,7,9],securebetween:[],sed:[9,10],see:[1,2,3,9,10,11],select:[9,13],self:11,send:[2,3,10],sens:[2,11],sensibl:[0,2,9],separ:[2,4,10,13],serv:[2,10],server:[0,3,6,8,9,11],server_api_host:10,server_grpc_host:10,server_grpc_wg_address:10,server_grpc_wg_address_rang:10,server_grpc_wg_interfac:10,server_grpc_wg_keyrequir:10,server_grpc_wg_port:10,server_grpc_wg_privkei:10,server_grpc_wg_pubkei:10,server_grpc_wireguard:10,server_host:10,server_http_host:10,servic:[2,3,6,10,11],set:[1,2,3,4,9,10,11,13],setup:[0,2,7],sever:[2,10],sexual:4,sfl:[9,10],share:10,ship:9,should:[0,1,2,3,6,7,9,10,11],show:[4,9,10],side:[8,10],sign:[2,9,10],signific:2,signigif:2,signup:2,similar:[0,9,10,11],simpl:[2,3,9,10],simplest:[2,3],simpli:[2,9],simultan:0,sinc:10,singl:[1,10,11],site:[0,7,10],situat:2,size:4,skynet:1,slim:9,slow:0,small:[2,11],smartgui:1,social:4,solut:2,solv:10,some:[1,2,10,11,13],someon:11,someth:[9,11],somewher:9,soon:[7,10],sort:[0,2],sourc:[2,3,7,8,11],space:4,special:[2,9,10],specif:[2,3,4],specifi:10,speed:[0,2],split:3,spoke:[0,2,10],sponsor:11,spread:0,sql:2,ssh:9,sspl:8,stabil:11,stack:7,stai:3,stake:0,standard:[2,7,9,10],start:[10,13],startup:[1,9,10],state:9,statement:7,statu:10,step:[2,3,9,10],still:[0,10,11],stock:11,stop:10,store:[2,10],string:9,structur:2,submit:[7,9],subnet:2,subspac:11,subspacecloud:11,substanti:[0,10],success:2,sudo:[9,10],support:[2,10],sure:[10,11],surfshark:11,suse:2,swagger:7,sys:10,sys_modul:10,system:[7,9],system_bus_socket:10,systemctl:10,systemd:[3,9,10,11],tab:9,tailscal:0,take:[0,1,2,4,9,10],talk:[0,2],team:[4,11],technic:[0,7,11],technolog:2,tell:[0,2,3],temporari:4,temporarili:4,term:11,terrain:11,test:[7,9,10],than:[2,11],thei:[0,2,4,10,11],them:[2,9,10,11],themselv:2,thhe:10,thi:[0,1,2,3,4,6,7,8,9,10,11],thing:[0,2,10,11],think:[11,13],those:[0,2,3,6,10],though:[10,11],thought:11,thousand:0,threaten:4,three:9,through:2,ticket:11,time:[1,2,3,9,11,13],timer:2,timestamp:2,token:9,tool:[0,3],top:2,topic:13,topolog:2,total:10,toward:4,traffic:[0,2,6,10],trailofbit:11,transact:2,treat:[2,3],tricki:2,troll:4,troubleshoot:[1,9],tunnel:[0,2],tunnelbear:11,turn:[2,10],tutori:7,two:[0,1,2,10],type:1,typic:[0,2,9],ubuntu:[2,10],udp:10,ultim:11,unabl:2,unaccept:4,uncom:10,uncordon:1,under:[8,9,10],underlai:[0,13],underli:10,understand:10,uninstal:7,uninstral:7,unix:[2,3,11],unless:10,unmanag:11,unmesh:11,unnecessari:11,unset:[9,10],unsupport:11,unten:11,until:[9,11],unwelcom:4,unzip:10,updat:[1,2,9,11],upon:2,url:10,usag:[7,10,13],use:[0,1,2,3,4,6,7,9,10,11,13],used:[1,2,6,9,10],useful:10,user:[2,3,9,10,11],useradminanydatabas:10,usernam:[1,9,10],uses:[0,1,2,6,9,10],using:[0,1,2,3,4,6,7,10,11,13],usr:10,util:3,valid:2,valu:[1,2,9,10],vari:10,variabl:2,variou:[3,7,10],vehicl:11,veri:[0,2,3,11],verifi:2,versa:11,version:[2,4,8,10],via:[1,2,4,6,10,11,13],vice:11,view:[9,11],viewpoint:4,vim:10,virtual:[0,3,6,7,11,13],visibl:9,vm3ow4thatogiwnsla3thsl3894th:9,volum:[9,10],vpc:[0,11],vpn:[2,13],wai:[10,11],want:[0,2,9,10,11],warn:10,web:[10,11],webserv:2,websit:2,week:11,weight:[2,10],welcom:[4,11],well:[2,3,7,9,11],wget:[9,10],what:[2,4,6,7],whatev:[3,10],when:[2,3,4,10],where:[2,6,7,9,10,13],wherev:0,whether:[0,10],which:[0,2,3,4,6,8,9,10,11],who:4,why:[2,3,7],wide:2,wider:2,wiki:4,window:[2,3,10,11],wiregard:10,wireguard:[0,3,6,7,9,10,11],wish:[6,10],within:[2,3,4],without:[1,2,4,7,9,11],won:11,work:[2,7,11],workstat:9,world:[0,2],wors:2,worth:2,would:[0,3,9,10,11],write:[2,10],www:10,x86:3,yaml:[1,10],yes:10,yml:[9,10],you:[0,1,2,3,6,7,9,10,13],your:[0,1,2,3,9,10,13],your_pass:1,your_password:1,your_secret_kei:1,zeroti:0,zip:10,zrb9vfhk8a:11},titles:["About","API Reference","Architecture","Client Installation","Code of Conduct","Contribute","External Clients","Welcome to the Netmaker Documentation","License","Quick Start","Server Installation","Support","Troubleshooting","Using Netmaker"],titleterms:{"case":0,Adding:3,DNS:[3,10],Use:0,Using:13,Will:11,about:[0,7],access:[1,3],agent:12,ani:11,annot:10,api:[1,7],architectur:[2,7],attribut:4,authent:1,basic:13,better:11,bug:11,build:5,call:1,cli:3,client:[3,6,7,10],code:[4,5,7],common:12,compat:[2,3,10],compon:2,compos:10,concept:2,conduct:[4,7],config:[3,10],configur:[3,10],contact:11,contribut:[5,7],core:2,coredn:[2,10,12],creat:9,curl:1,daemon:3,deploi:9,descript:10,disabl:10,docker:10,document:[1,7],doe:[0,11],dual:13,enabl:10,enforc:4,enhanc:5,exampl:1,extern:[6,7,13],faq:11,featur:[10,11],file:[1,3,10],fork:5,format:1,full:10,grpc:10,guid:7,how:[0,11],instal:[3,7,9,10,11],introduct:[3,6,9],ipv6:13,issu:[5,11,12],kei:[1,3,9],kubernet:[10,13],licens:[7,8,11],like:11,limit:2,linux:10,local:13,log:3,make:3,manag:[1,3,9],manual:3,mesh:2,mode:[3,10],mongodb:[2,10,11],netclient:[2,3,9,11],netmak:[0,2,7,9,11,13],network:[1,2,3,13],node:[1,2,9,13],nordnpn:11,note:10,offer:11,onli:10,oper:11,option:10,our:4,paid:11,pledg:4,prereqisit:10,prerequisit:[3,9],privat:3,process:2,quick:[7,9],refer:[1,3,7,10],remov:3,request:11,respons:4,scope:4,secur:10,server:[1,2,7,10,12],setup:[9,10],site:13,slim:10,smaller:11,sql:11,sspl:11,stack:13,standard:4,start:[7,9],submit:5,support:[7,11],system:[2,3,10,11],systemd:2,technic:2,test:5,token:3,troubleshoot:[3,7,12],tutori:13,uninstal:[3,9],uninstral:9,updat:3,usag:1,user:1,variabl:[3,10],video:13,view:3,vpn:11,welcom:7,what:0,why:11,wireguard:2,without:10,work:0,written:13,you:11}}) \ No newline at end of file diff --git a/docs/_build/html/support.html b/docs/_build/html/support.html index 5418f66f..60f8429a 100644 --- a/docs/_build/html/support.html +++ b/docs/_build/html/support.html @@ -604,6 +604,8 @@
  • How do I install the Netclient on X?
  • +
  • Why MongoDB? SQL is better and smaller. +
  • Is Netmaker a VPN like NordNPN?
  • Do you offer any paid support? @@ -756,6 +758,8 @@
  • How do I install the Netclient on X?
  • +
  • Why MongoDB? SQL is better and smaller. +
  • Is Netmaker a VPN like NordNPN?
  • Do you offer any paid support? @@ -801,6 +805,10 @@

    As per the above, there are many unsupported operating systems. You are still welcome to try, it is just an executable binary file after all. If the system is unix-based and has kernel WireGuard installed, netclient may very well mesh the device into the network. However, the service likely will encounter problems retrieving updates.

    +

    Why MongoDB? SQL is better and smaller.

    +

    We are in a phase of rapid iteration. Every week the database schema changes. MongoDB makes our development process much more flexible. That said, we agree! SQL will be better for production, and indeed, we plan to switch over to SQL before v1.0, so please be patient with the resource consumption of MongoDB for the time being; it is helping to support a rapid pace of development.

    + +

    Is Netmaker a VPN like NordNPN?

    No. Netmaker makes Virtual Networks, which are technically VPNs, but different. It’s more like a corporate VPN, or a VPC (if you’re familiar with AWS).

    If you’re looking to achieve self-hosted web browsing, with functionality similar to NordVPN, ExpressVPN, Surfshark, Tunnelbear, or Private Internet Access, this is probably not the project for you. Technically, you can accomplish this with Netmaker, but it would be a little like using a all-terrain vehicle for stock car racing.

    diff --git a/models/intclient.go b/models/intclient.go index df846dec..2611498a 100644 --- a/models/intclient.go +++ b/models/intclient.go @@ -8,10 +8,10 @@ type IntClient struct { Address string `json:"address" bson:"address"` Address6 string `json:"address6" bson:"address6"` Network string `json:"network" bson:"network"` - ServerWGEndpoint string `json:"serverwgendpoint" bson:"serverwgendpoint"` - ServerAPIEndpoint string `json:"serverapiendpoint" bson:"serverapiendpoint"` - ServerAddress string `json:"serveraddress" bson:"serveraddress"` - ServerPort string `json:"serverport" bson:"serverport"` + ServerPublicEndpoint string `json:"serverwgendpoint" bson:"serverwgendpoint"` + ServerAPIPort string `json:"serverapiendpoint" bson:"serverapiendpoint"` + ServerPrivateAddress string `json:"serveraddress" bson:"serveraddress"` + ServerWGPort string `json:"serverport" bson:"serverport"` ServerGRPCPort string `json:"serverport" bson:"serverport"` ServerKey string `json:"serverkey" bson:"serverkey"` IsServer string `json:"isserver" bson:"isserver"` diff --git a/netclient/config/config.go b/netclient/config/config.go index 965cad86..0e155482 100644 --- a/netclient/config/config.go +++ b/netclient/config/config.go @@ -240,8 +240,14 @@ func ModGlobalConfig(cfg models.IntClient) error{ } modconfig = *useconfig } - if cfg.ServerPort != ""{ - modconfig.Client.ServerPort = cfg.ServerPort + if cfg.ServerWGPort != ""{ + modconfig.Client.ServerWGPort = cfg.ServerWGPort + } + if cfg.ServerGRPCPort != ""{ + modconfig.Client.ServerGRPCPort = cfg.ServerGRPCPort + } + if cfg.ServerAPIPort != ""{ + modconfig.Client.ServerAPIPort = cfg.ServerAPIPort } if cfg.PublicKey != ""{ modconfig.Client.PublicKey = cfg.PublicKey @@ -249,11 +255,11 @@ func ModGlobalConfig(cfg models.IntClient) error{ if cfg.PrivateKey != ""{ modconfig.Client.PrivateKey = cfg.PrivateKey } - if cfg.ServerWGEndpoint != ""{ - modconfig.Client.ServerWGEndpoint = cfg.ServerWGEndpoint + if cfg.ServerPublicEndpoint != ""{ + modconfig.Client.ServerPublicEndpoint = cfg.ServerPublicEndpoint } - if cfg.ServerAddress != ""{ - modconfig.Client.ServerAddress = cfg.ServerAddress + if cfg.ServerPrivateAddress != ""{ + modconfig.Client.ServerPrivateAddress = cfg.ServerPrivateAddress } if cfg.Address != ""{ modconfig.Client.Address = cfg.Address @@ -363,12 +369,12 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, error){ } token := string(tokenbytes) tokenvals := strings.Split(token, "|") - cfg.Server.GRPCAddress = tokenvals[0] - cfg.Server.APIAddress = tokenvals[1] - cfg.Network = tokenvals[2] - cfg.Node.Network = tokenvals[2] - cfg.Server.AccessKey = tokenvals[3] - cfg.Node.LocalRange = tokenvals[4] + cfg.Server.GRPCAddress = tokenvals[1] + cfg.Server.APIAddress = tokenvals[2] + cfg.Network = tokenvals[3] + cfg.Node.Network = tokenvals[4] + cfg.Server.AccessKey = tokenvals[5] + cfg.Node.LocalRange = tokenvals[6] if c.String("grpcserver") != "" { cfg.Server.GRPCAddress = c.String("grpcserver") @@ -429,21 +435,21 @@ func GetCLIConfigRegister(c *cli.Context) (GlobalConfig, error){ } token := string(tokenbytes) tokenvals := strings.Split(token, "|") - cfg.Client.ServerAddress = tokenvals[0] - cfg.Client.ServerAPIEndpoint = tokenvals[1] - servervals := strings.Split(tokenvals[1], ":") - wgvals := strings.Split(tokenvals[0], ":") - cfg.Client.ServerWGEndpoint = servervals[0] - cfg.Client.ServerAddress = wgvals[0] - cfg.Client.ServerPort = wgvals[1] + grpcvals := strings.Split(tokenvals[1],":") + apivals := strings.Split(tokenvals[2], ":") + cfg.Client.ServerWGPort = tokenvals[0] + cfg.Client.ServerPrivateAddress = grpcvals[0] + cfg.Client.ServerGRPCPort = grpcvals[1] + cfg.Client.ServerPublicEndpoint = apivals[0] + cfg.Client.ServerAPIPort = apivals[1] - cfg.Client.ServerKey = tokenvals[3] + cfg.Client.ServerKey = tokenvals[4] if c.String("grpcserver") != "" { - cfg.Client.ServerAddress = c.String("grpcserver") + cfg.Client.ServerPrivateAddress = c.String("grpcserver") } if c.String("apiserver") != "" { - cfg.Client.ServerAPIEndpoint = c.String("apiserver") + cfg.Client.ServerPublicEndpoint = c.String("apiserver") } if c.String("key") != "" { cfg.Client.ServerKey = c.String("key") @@ -452,8 +458,8 @@ func GetCLIConfigRegister(c *cli.Context) (GlobalConfig, error){ cfg.Client.Network = c.String("network") } } else { - cfg.Client.ServerAddress = c.String("grpcserver") - cfg.Client.ServerWGEndpoint = c.String("apiserver") + cfg.Client.ServerPrivateAddress = c.String("grpcserver") + cfg.Client.ServerPublicEndpoint = c.String("apiserver") cfg.Client.ServerKey = c.String("key") cfg.Client.Network = c.String("network") } diff --git a/netclient/functions/register.go b/netclient/functions/register.go index be56cde7..334aa177 100644 --- a/netclient/functions/register.go +++ b/netclient/functions/register.go @@ -41,8 +41,10 @@ func Register(cfg config.GlobalConfig) error { } jsonbytes := []byte(jsonstring) body := bytes.NewBuffer(jsonbytes) - log.Println("registering to http://"+cfg.Client.ServerAPIEndpoint+"/api/client/register") - res, err := http.Post("http://"+cfg.Client.ServerAPIEndpoint+"/api/intclient/register","application/json",body) + publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort + + log.Println("registering to http://"+publicaddress+"/api/client/register") + res, err := http.Post("http://"+publicaddress+"/api/intclient/register","application/json",body) if err != nil { return err } @@ -60,9 +62,6 @@ func Register(cfg config.GlobalConfig) error { if err != nil { return err } - if wgclient.ServerWGEndpoint == "" { - wgclient.ServerWGEndpoint = cfg.Client.ServerWGEndpoint - } spew.Dump(wgclient) err = wireguard.InitGRPCWireguard(wgclient) if err != nil { @@ -74,13 +73,14 @@ func Register(cfg config.GlobalConfig) error { func Unregister(cfg config.GlobalConfig) error { client := &http.Client{ Timeout: 7 * time.Second,} - req, err := http.NewRequest("DELETE", "http://"+cfg.Client.ServerAPIEndpoint+"/api/intclient/"+cfg.Client.ClientID, nil) + publicaddress := cfg.Client.ServerPublicEndpoint + ":" + cfg.Client.ServerAPIPort + req, err := http.NewRequest("DELETE", "http://"+publicaddress+"/api/intclient/"+cfg.Client.ClientID, nil) if err != nil { log.Println(err) } else { res, err := client.Do(req) if res == nil { - err = errors.New("server not reachable at " + "http://"+cfg.Client.ServerAPIEndpoint+"/api/intclient/"+cfg.Client.ClientID) + err = errors.New("server not reachable at " + "http://"+publicaddress+"/api/intclient/"+cfg.Client.ClientID) log.Println(err) } else if res.StatusCode != http.StatusOK { err = errors.New("request to server failed: " + res.Status) diff --git a/netclient/main.go b/netclient/main.go index 466d128d..8e84a75f 100644 --- a/netclient/main.go +++ b/netclient/main.go @@ -191,7 +191,7 @@ func main() { if err != nil { return err } - if cfg.Client.ServerAddress == "" { + if cfg.Client.ServerPrivateAddress == "" { err = errors.New("No server address provided.") return err } diff --git a/netclient/wireguard/kernel.go b/netclient/wireguard/kernel.go index 35f55510..17baecc6 100644 --- a/netclient/wireguard/kernel.go +++ b/netclient/wireguard/kernel.go @@ -33,7 +33,7 @@ func InitGRPCWireguard(client models.IntClient) error { if err != nil { return err } - serverport, err := strconv.Atoi(client.ServerPort) + serverport, err := strconv.Atoi(client.ServerWGPort) if err != nil { return err } @@ -87,16 +87,16 @@ func InitGRPCWireguard(client models.IntClient) error { } var peers []wgtypes.PeerConfig var peeraddr = net.IPNet{ - IP: net.ParseIP(client.ServerAddress), + IP: net.ParseIP(client.ServerPrivateAddress), Mask: net.CIDRMask(32, 32), } var allowedips []net.IPNet allowedips = append(allowedips, peeraddr) - net.ParseIP(client.ServerWGEndpoint) + net.ParseIP(client.ServerPublicEndpoint) peer := wgtypes.PeerConfig{ PublicKey: serverkey, Endpoint: &net.UDPAddr{ - IP: net.ParseIP(client.ServerWGEndpoint), + IP: net.ParseIP(client.ServerPublicEndpoint), Port: serverport, }, ReplaceAllowedIPs: true, diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index 58b26b50..af959e7d 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -57,8 +57,8 @@ func GetWGConfig() config.WG{ cfg.GRPCWGInterface = GetGRPCWGInterface() cfg.GRPCWGAddress = GetGRPCWGAddress() cfg.GRPCWGPort = GetGRPCWGPort() - cfg.GRPCWGEndpoint = GetGRPCHost() - + cfg.GRPCWGPubKey = GetGRPCWGPubKey() + cfg.GRPCWGPrivKey = GetGRPCWGPrivKey() return cfg } diff --git a/serverctl/wireguard.go b/serverctl/wireguard.go index d7ead886..3f64fa4a 100644 --- a/serverctl/wireguard.go +++ b/serverctl/wireguard.go @@ -61,9 +61,11 @@ func InitServerWireGuard() error { var client models.IntClient client.PrivateKey = wgconfig.GRPCWGPrivKey client.PublicKey = wgconfig.GRPCWGPubKey - client.ServerWGEndpoint = wgconfig.GRPCWGEndpoint - client.ServerAddress = wgconfig.GRPCWGAddress - client.ServerPort = wgconfig.GRPCWGPort + client.ServerPublicEndpoint = servercfg.GetAPIHost() + client.ServerAPIPort = servercfg.GetAPIPort() + client.ServerPrivateAddress = wgconfig.GRPCWGAddress + client.ServerWGPort = wgconfig.GRPCWGPort + client.ServerGRPCPort = servercfg.GetGRPCPort() client.Address = wgconfig.GRPCWGAddress client.IsServer = "yes" client.Network = "comms" From 085877ace241f443576553a343cf7f5269ebacee Mon Sep 17 00:00:00 2001 From: afeiszli Date: Tue, 1 Jun 2021 18:40:14 -0400 Subject: [PATCH 5/5] making changes to grpc comms vars --- controllers/.networkHttpController.go.swp | Bin 16384 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 controllers/.networkHttpController.go.swp diff --git a/controllers/.networkHttpController.go.swp b/controllers/.networkHttpController.go.swp deleted file mode 100644 index 906fc51c381cc24c2ae3631c25030a98924e7c92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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