diff --git a/compose/docker-compose.nodns.yml b/compose/docker-compose.nodns.yml new file mode 100644 index 00000000..9b386718 --- /dev/null +++ b/compose/docker-compose.nodns.yml @@ -0,0 +1,56 @@ +version: "3.4" + +services: + netmaker: + container_name: netmaker + image: gravitl/netmaker:v0.8.3 + volumes: + - /etc/netclient/config:/etc/netclient/config + - /usr/bin/wg:/usr/bin/wg + - sqldata:/root/data + cap_add: + - NET_ADMIN + restart: always + network_mode: host + environment: + SERVER_HOST: "SERVER_PUBLIC_IP" + SERVER_API_CONN_STRING: "api.NETMAKER_BASE_DOMAIN:443" + SERVER_GRPC_CONN_STRING: "grpc.NETMAKER_BASE_DOMAIN:443" + COREDNS_ADDR: "SERVER_PUBLIC_IP" + GRPC_SSL: "on" + DNS_MODE: "off" + SERVER_HTTP_HOST: "api.NETMAKER_BASE_DOMAIN" + SERVER_GRPC_HOST: "grpc.NETMAKER_BASE_DOMAIN" + API_PORT: "8081" + GRPC_PORT: "50051" + CLIENT_MODE: "on" + MASTER_KEY: "REPLACE_MASTER_KEY" + SERVER_GRPC_WIREGUARD: "off" + CORS_ALLOWED_ORIGIN: "*" + DATABASE: "sqlite" + netmaker-ui: + container_name: netmaker-ui + depends_on: + - netmaker + image: gravitl/netmaker-ui:v0.8 + links: + - "netmaker:api" + ports: + - "8082:80" + environment: + BACKEND_URL: "https://api.NETMAKER_BASE_DOMAIN" + restart: always + caddy: + image: caddy:latest + container_name: caddy + restart: unless-stopped + network_mode: host # Wants ports 80 and 443! + volumes: + - /root/Caddyfile:/etc/caddy/Caddyfile + # - $PWD/site:/srv # you could also serve a static site in site folder + - caddy_data:/data + - caddy_conf:/config +volumes: + caddy_data: {} + caddy_conf: {} + sqldata: {} \ No newline at end of file diff --git a/config/config.go b/config/config.go index 6d75ff42..22471614 100644 --- a/config/config.go +++ b/config/config.go @@ -45,6 +45,7 @@ type ServerConfig struct { GRPCSecure string `yaml:"grpcsecure"` MasterKey string `yaml:"masterkey"` AllowedOrigin string `yaml:"allowedorigin"` + NodeID string `yaml:"nodeid"` RestBackend string `yaml:"restbackend"` AgentBackend string `yaml:"agentbackend"` ClientMode string `yaml:"clientmode"` diff --git a/database/postgres.go b/database/postgres.go index da9c8122..f6847ea9 100644 --- a/database/postgres.go +++ b/database/postgres.go @@ -84,12 +84,12 @@ func pgInsertPeer(key string, value string) error { } func pgDeleteRecord(tableName string, key string) error { - deleteSQL := "DELETE FROM " + tableName + " WHERE key = \"" + key + "\"" + deleteSQL := "DELETE FROM " + tableName + " WHERE key = $1;" statement, err := PGDB.Prepare(deleteSQL) if err != nil { return err } - if _, err = statement.Exec(); err != nil { + if _, err = statement.Exec(key); err != nil { return err } return nil diff --git a/docker/Dockerfile-userspace b/docker/Dockerfile-userspace new file mode 100644 index 00000000..578f78ba --- /dev/null +++ b/docker/Dockerfile-userspace @@ -0,0 +1,16 @@ +ARG NM_VERSION= + +FROM gravitl/builder as builder + +RUN apk add --update git build-base libmnl-dev iptables + +WORKDIR /root/ +RUN git clone https://git.zx2c4.com/wireguard-go && \ + cd wireguard-go && \ + make && \ + make install + +FROM gravitl/netmaker:${NM_VERSION} + +RUN apk add --no-cache --update libmnl iptables openresolv iproute2 +COPY --from=builder /usr/bin/wireguard-go /usr/bin/wg* /usr/bin/ diff --git a/docker/Dockerfile-wg-quick b/docker/Dockerfile-wg-quick new file mode 100644 index 00000000..07871ea8 --- /dev/null +++ b/docker/Dockerfile-wg-quick @@ -0,0 +1,23 @@ +ARG NM_VERSION= + +FROM gravitl/builder as builder + +RUN apk add --update git build-base libmnl-dev iptables + +WORKDIR /root/ +RUN git clone https://git.zx2c4.com/wireguard-go && \ + cd wireguard-go && \ + make && \ + make install + +ENV WITH_WGQUICK=yes +RUN git clone https://git.zx2c4.com/wireguard-tools && \ + cd wireguard-tools && \ + cd src && \ + make && \ + make install + +FROM gravitl/netmaker:${NM_VERSION} + +RUN apk add --no-cache --update bash libmnl iptables openresolv iproute2 +COPY --from=builder /usr/bin/wireguard-go /usr/bin/wg* /usr/bin/ diff --git a/logic/util.go b/logic/util.go index 0b16ffbc..9486c4e6 100644 --- a/logic/util.go +++ b/logic/util.go @@ -7,7 +7,6 @@ import ( "strconv" "strings" "time" - "github.com/gravitl/netmaker/database" "github.com/gravitl/netmaker/dnslogic" "github.com/gravitl/netmaker/functions" diff --git a/models/node.go b/models/node.go index 3a62ad63..41a66b02 100644 --- a/models/node.go +++ b/models/node.go @@ -48,7 +48,7 @@ type Node struct { ExpirationDateTime int64 `json:"expdatetime" bson:"expdatetime" yaml:"expdatetime"` LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate" yaml:"lastpeerupdate"` LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin" yaml:"lastcheckin"` - MacAddress string `json:"macaddress" bson:"macaddress" yaml:"macaddress" validate:"required,mac,macaddress_unique"` + MacAddress string `json:"macaddress" bson:"macaddress" yaml:"macaddress" validate:"required,min=5,macaddress_unique"` // checkin interval is depreciated at the network level. Set on server with CHECKIN_INTERVAL CheckInInterval int32 `json:"checkininterval" bson:"checkininterval" yaml:"checkininterval"` Password string `json:"password" bson:"password" yaml:"password" validate:"required,min=6"` diff --git a/servercfg/serverconf.go b/servercfg/serverconf.go index efa0a6ed..fb22cbc8 100644 --- a/servercfg/serverconf.go +++ b/servercfg/serverconf.go @@ -4,9 +4,9 @@ import ( "errors" "io/ioutil" "net/http" + "net" "os" "strconv" - "github.com/gravitl/netmaker/config" ) @@ -31,6 +31,7 @@ func GetServerConfig() config.ServerConfig { cfg.AllowedOrigin = GetAllowedOrigin() cfg.RestBackend = "off" cfg.Verbosity = GetVerbose() + cfg.NodeID = GetNodeID() cfg.CheckinInterval = GetCheckinInterval() if IsRestBackend() { cfg.RestBackend = "on" @@ -372,3 +373,30 @@ func IsSplitDNS() bool { } return issplit } + +func GetNodeID() string { + var id string + id = getMacAddr() + if os.Getenv("NODE_ID") != "" { + id = os.Getenv("NODE_ID") + } else if config.Config.Server.NodeID != "" { + id = config.Config.Server.NodeID + } + return id +} + +// GetMacAddr - get's mac address +func getMacAddr() string { + ifas, err := net.Interfaces() + if err != nil { + return "" + } + var as []string + for _, ifa := range ifas { + a := ifa.HardwareAddr.String() + if a != "" { + as = append(as, a) + } + } + return as[0] +} \ No newline at end of file diff --git a/serverctl/serverctl.go b/serverctl/serverctl.go index aa19c3f7..92d510b7 100644 --- a/serverctl/serverctl.go +++ b/serverctl/serverctl.go @@ -196,6 +196,7 @@ func AddNetwork(network string) (bool, error) { IsServer: "yes", DNSOn: "no", Name: models.NODE_SERVER_NAME, + MacAddress: servercfg.GetNodeID(), }, }, "") log.Println("[netmaker] Server added to network " + network)