Skip to content

Commit

Permalink
fix: handle relative name and zones correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
jsiebens committed Apr 26, 2024
1 parent 0b5f54c commit 750609d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 10 deletions.
21 changes: 14 additions & 7 deletions internal/dns/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func configureAzureProvider(zone string, values map[string]string) (Provider, er
return nil, err
}

return &externalProvider{zone: zone, setter: p}, nil
return &externalProvider{zone: fqdn(zone), setter: p}, nil
}

func configureCloudflareProvider(zone string, values map[string]string) (Provider, error) {
Expand All @@ -83,7 +83,7 @@ func configureCloudflareProvider(zone string, values map[string]string) (Provide
return nil, err
}

return &externalProvider{zone: zone, setter: p}, nil
return &externalProvider{zone: fqdn(zone), setter: p}, nil
}

func configureDigitalOceanProvider(zone string, values map[string]string) (Provider, error) {
Expand All @@ -101,7 +101,7 @@ func configureDigitalOceanProvider(zone string, values map[string]string) (Provi
return nil, err
}

return &externalProvider{zone: zone, setter: p}, nil
return &externalProvider{zone: fqdn(zone), setter: p}, nil
}

func configureGoogleCloudDNSProvider(zone string, values map[string]string) (Provider, error) {
Expand All @@ -120,7 +120,7 @@ func configureGoogleCloudDNSProvider(zone string, values map[string]string) (Pro
return nil, err
}

return &externalProvider{zone: zone, setter: p}, nil
return &externalProvider{zone: fqdn(zone), setter: p}, nil
}

func configureRoute53Provider(zone string, values map[string]string) (Provider, error) {
Expand All @@ -145,7 +145,7 @@ func configureRoute53Provider(zone string, values map[string]string) (Provider,
return nil, err
}

return &externalProvider{zone: zone, setter: p}, nil
return &externalProvider{zone: fqdn(zone), setter: p}, nil
}

type externalProvider struct {
Expand All @@ -154,11 +154,18 @@ type externalProvider struct {
}

func (p *externalProvider) SetRecord(ctx context.Context, recordType, recordName, value string) error {
_, err := p.setter.SetRecords(ctx, fmt.Sprintf("%s.", p.zone), []libdns.Record{{
_, err := p.setter.SetRecords(ctx, p.zone, []libdns.Record{{
Type: recordType,
Name: strings.TrimSuffix(recordName, p.zone),
Name: libdns.RelativeName(recordName, p.zone),
Value: value,
TTL: 1 * time.Minute,
}})
return err
}

func fqdn(v string) string {
if strings.HasSuffix(v, ".") {
return v
}
return fmt.Sprintf("%s.", v)
}
32 changes: 29 additions & 3 deletions internal/mapping/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/jsiebens/ionscale/internal/domain"
"github.com/jsiebens/ionscale/internal/util"
"net/netip"
"slices"
"strconv"
"tailscale.com/tailcfg"
"tailscale.com/types/dnstype"
Expand Down Expand Up @@ -175,6 +174,24 @@ func ToNode(capVer tailcfg.CapabilityVersion, m *domain.Machine, tailnet *domain
User: tailcfg.UserID(m.UserID),
}

if peer {
var capabilities []tailcfg.NodeCapability
capMap := make(tailcfg.NodeCapMap)

{
capabilities = append(capabilities, "funnel")
capabilities = append(capabilities, "https://tailscale.com/cap/funnel-ports?ports=80,443")
capMap["funnel"] = []tailcfg.RawMessage{}
capMap["https://tailscale.com/cap/funnel-ports?ports=80,443"] = []tailcfg.RawMessage{}
}

if capVer >= 74 {
n.CapMap = capMap
} else {
n.Capabilities = capabilities
}
}

if !peer {
var capabilities []tailcfg.NodeCapability
capMap := make(tailcfg.NodeCapMap)
Expand Down Expand Up @@ -205,9 +222,18 @@ func ToNode(capVer tailcfg.CapabilityVersion, m *domain.Machine, tailnet *domain
}

// ionscale has no support for Funnel yet, so remove Funnel attribute if set via ACL policy
/*
{
slices.DeleteFunc(capabilities, func(c tailcfg.NodeCapability) bool { return c == tailcfg.NodeAttrFunnel })
delete(capMap, tailcfg.NodeAttrFunnel)
}
*/

{
slices.DeleteFunc(capabilities, func(c tailcfg.NodeCapability) bool { return c == tailcfg.NodeAttrFunnel })
delete(capMap, tailcfg.NodeAttrFunnel)
capabilities = append(capabilities, "funnel")
capabilities = append(capabilities, "https://tailscale.com/cap/funnel-ports?ports=80,443")
capMap["funnel"] = []tailcfg.RawMessage{}
capMap["https://tailscale.com/cap/funnel-ports?ports=80,443"] = []tailcfg.RawMessage{}
}

if capVer >= 74 {
Expand Down

0 comments on commit 750609d

Please sign in to comment.