diff --git a/lighthouse.go b/lighthouse.go index 5e19d65..c19cbb7 100644 --- a/lighthouse.go +++ b/lighthouse.go @@ -53,6 +53,18 @@ func NewLightHouse(amLighthouse bool, myIp uint32, ips []string, interval int, n return &h } +func (lh *LightHouse) ValidateLHStaticEntries() error { + for lhIP, _ := range lh.lighthouses { + for ip, _ := range lh.staticList { + if lhIP == ip { + continue + } + return fmt.Errorf("Lighthouse %s does not have a static_host_map entry", IntIp(lhIP)) + } + } + return nil +} + func (lh *LightHouse) Query(ip uint32, f EncWriter) ([]udpAddr, error) { if !lh.IsLighthouseIP(ip) { lh.QueryServer(ip, f) diff --git a/lighthouse_test.go b/lighthouse_test.go index b0ff492..08a9857 100644 --- a/lighthouse_test.go +++ b/lighthouse_test.go @@ -46,6 +46,27 @@ func TestNewipandportsfromudpaddrs(t *testing.T) { } +func Test_lhStaticMapping(t *testing.T) { + lh1 := "10.128.0.2" + + lh1IP := net.ParseIP(lh1) + + udpServer, _ := NewListener("0.0.0.0", 0, true) + + meh := NewLightHouse(true, 1, []string{lh1}, 10, 10003, udpServer, false) + meh.AddRemote(ip2int(lh1IP), NewUDPAddr(ip2int(lh1IP), uint16(4242)), true) + err := meh.ValidateLHStaticEntries() + assert.Nil(t, err) + + lh2 := "10.128.0.3" + meh = NewLightHouse(true, 1, []string{lh1, lh2}, 10, 10003, udpServer, false) + meh.AddRemote(ip2int(lh1IP), NewUDPAddr(ip2int(lh1IP), uint16(4242)), true) + err = meh.ValidateLHStaticEntries() + assert.EqualError(t, err, "Lighthouse 10.128.0.3 does not have a static_host_map entry") +} + +//func NewLightHouse(amLighthouse bool, myIp uint32, ips []string, interval int, nebulaPort int, pc *udpConn, punchBack bool) *LightHouse { + /* func TestLHQuery(t *testing.T) { //n := NewLhQueryByIpString("10.128.0.3") diff --git a/main.go b/main.go index ab23331..c101774 100644 --- a/main.go +++ b/main.go @@ -205,6 +205,7 @@ func Main(configPath string, configTest bool, buildVersion string) { go dnsMain(hostMap) } + //TODO: Move all of this inside functions in lighthouse.go for k, v := range config.GetMap("static_host_map", map[interface{}]interface{}{}) { vpnIp := net.ParseIP(fmt.Sprintf("%v", k)) vals, ok := v.([]interface{}) @@ -236,6 +237,11 @@ func Main(configPath string, configTest bool, buildVersion string) { } } + err = lightHouse.ValidateLHStaticEntries() + if err != nil { + l.WithError(err).Error("Lighthouse unreachable") + } + handshakeManager := NewHandshakeManager(tunCidr, preferredRanges, hostMap, lightHouse, udpServer) //TODO: These will be reused for psk