mirror of
https://github.com/jwhited/wgsd.git
synced 2025-01-18 22:09:34 +08:00
always use full Service Instance Name
Service instance name is defined in RFC6763 section 4.1 as Service Instance Name = <Instance> . <Service> . <Domain> Use it instead of <Instance> . <Domain> for consistency.
This commit is contained in:
parent
fd4b7d8879
commit
401ad4ea47
@ -74,12 +74,12 @@ _wireguard._udp.example.com. 0 IN PTR yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn2
|
|||||||
_wireguard._udp.example.com. 0 IN PTR wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com.
|
_wireguard._udp.example.com. 0 IN PTR wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com.
|
||||||
$
|
$
|
||||||
$ dig @127.0.0.1 -p 5353 yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com. SRV +noall +answer +additional
|
$ dig @127.0.0.1 -p 5353 yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com. SRV +noall +answer +additional
|
||||||
yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com. 0 IN SRV 0 0 7777 yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====.example.com.
|
yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com. 0 IN SRV 0 0 7777 yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com.
|
||||||
yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====.example.com. 0 IN A 203.0.113.1
|
yutrled535igkl7bdlerl6m4vjxsxm3uqqpl4nmsn27mt56ad4ha====._wireguard._udp.example.com. 0 IN A 203.0.113.1
|
||||||
$
|
$
|
||||||
$ dig @127.0.0.1 -p 5353 wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com. SRV +noall +answer +additional
|
$ dig @127.0.0.1 -p 5353 wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com. SRV +noall +answer +additional
|
||||||
wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com. 0 IN SRV 0 0 8888 wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====.example.com.
|
wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com. 0 IN SRV 0 0 8888 wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com.
|
||||||
wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====.example.com. 0 IN A 198.51.100.1
|
wmrid55v4enhxqx2jstyoyvkicj5pihkb2tr7r42smiu3t5l4i5q====._wireguard._udp.example.com. 0 IN A 198.51.100.1
|
||||||
```
|
```
|
||||||
|
|
||||||
Converting public keys to Base64 with coreutils:
|
Converting public keys to Base64 with coreutils:
|
||||||
|
10
wgsd.go
10
wgsd.go
@ -37,7 +37,8 @@ type wgctrlClient interface {
|
|||||||
const (
|
const (
|
||||||
keyLen = 56 // the number of characters in a base32-encoded Wireguard public key
|
keyLen = 56 // the number of characters in a base32-encoded Wireguard public key
|
||||||
spPrefix = "_wireguard._udp."
|
spPrefix = "_wireguard._udp."
|
||||||
serviceInstanceLen = keyLen + len(".") + len(spPrefix)
|
spSubPrefix = "." + spPrefix
|
||||||
|
serviceInstanceLen = keyLen + len(spSubPrefix)
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *WGSD) ServeDNS(ctx context.Context, w dns.ResponseWriter,
|
func (p *WGSD) ServeDNS(ctx context.Context, w dns.ResponseWriter,
|
||||||
@ -114,15 +115,14 @@ func (p *WGSD) ServeDNS(ctx context.Context, w dns.ResponseWriter,
|
|||||||
Priority: 0,
|
Priority: 0,
|
||||||
Weight: 0,
|
Weight: 0,
|
||||||
Port: uint16(endpoint.Port),
|
Port: uint16(endpoint.Port),
|
||||||
Target: fmt.Sprintf("%s.%s",
|
Target: strings.ToLower(pubKey) + spSubPrefix + p.zone,
|
||||||
strings.ToLower(pubKey), p.zone),
|
|
||||||
})
|
})
|
||||||
w.WriteMsg(m) // nolint: errcheck
|
w.WriteMsg(m) // nolint: errcheck
|
||||||
return dns.RcodeSuccess, nil
|
return dns.RcodeSuccess, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nxDomain(p.zone, w, r)
|
return nxDomain(p.zone, w, r)
|
||||||
case len(name) == keyLen+1 && (qtype == dns.TypeA ||
|
case len(name) == len(spSubPrefix)+keyLen && (qtype == dns.TypeA ||
|
||||||
qtype == dns.TypeAAAA):
|
qtype == dns.TypeAAAA):
|
||||||
pubKey := name[:keyLen]
|
pubKey := name[:keyLen]
|
||||||
for _, peer := range device.Peers {
|
for _, peer := range device.Peers {
|
||||||
@ -148,7 +148,7 @@ func getHostRR(pubKey, zone string, endpoint *net.UDPAddr) dns.RR {
|
|||||||
if endpoint == nil || endpoint.IP == nil {
|
if endpoint == nil || endpoint.IP == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
name := fmt.Sprintf("%s.%s", strings.ToLower(pubKey), zone)
|
name := strings.ToLower(pubKey) + spSubPrefix + zone
|
||||||
switch {
|
switch {
|
||||||
case endpoint.IP.To4() != nil:
|
case endpoint.IP.To4() != nil:
|
||||||
return &dns.A{
|
return &dns.A{
|
||||||
|
16
wgsd_test.go
16
wgsd_test.go
@ -70,10 +70,10 @@ func TestWGSD(t *testing.T) {
|
|||||||
Qtype: dns.TypeSRV,
|
Qtype: dns.TypeSRV,
|
||||||
Rcode: dns.RcodeSuccess,
|
Rcode: dns.RcodeSuccess,
|
||||||
Answer: []dns.RR{
|
Answer: []dns.RR{
|
||||||
test.SRV(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN SRV 0 0 1 %s.example.com.", peer1b32, peer1b32)),
|
test.SRV(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN SRV 0 0 1 %s._wireguard._udp.example.com.", peer1b32, peer1b32)),
|
||||||
},
|
},
|
||||||
Extra: []dns.RR{
|
Extra: []dns.RR{
|
||||||
test.A(fmt.Sprintf("%s.example.com. 0 IN A %s", peer1b32, peer1.Endpoint.IP.String())),
|
test.A(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN A %s", peer1b32, peer1.Endpoint.IP.String())),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -81,26 +81,26 @@ func TestWGSD(t *testing.T) {
|
|||||||
Qtype: dns.TypeSRV,
|
Qtype: dns.TypeSRV,
|
||||||
Rcode: dns.RcodeSuccess,
|
Rcode: dns.RcodeSuccess,
|
||||||
Answer: []dns.RR{
|
Answer: []dns.RR{
|
||||||
test.SRV(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN SRV 0 0 2 %s.example.com.", peer2b32, peer2b32)),
|
test.SRV(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN SRV 0 0 2 %s._wireguard._udp.example.com.", peer2b32, peer2b32)),
|
||||||
},
|
},
|
||||||
Extra: []dns.RR{
|
Extra: []dns.RR{
|
||||||
test.AAAA(fmt.Sprintf("%s.example.com. 0 IN AAAA %s", peer2b32, peer2.Endpoint.IP.String())),
|
test.AAAA(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN AAAA %s", peer2b32, peer2.Endpoint.IP.String())),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Qname: fmt.Sprintf("%s.example.com.", peer1b32),
|
Qname: fmt.Sprintf("%s._wireguard._udp.example.com.", peer1b32),
|
||||||
Qtype: dns.TypeA,
|
Qtype: dns.TypeA,
|
||||||
Rcode: dns.RcodeSuccess,
|
Rcode: dns.RcodeSuccess,
|
||||||
Answer: []dns.RR{
|
Answer: []dns.RR{
|
||||||
test.A(fmt.Sprintf("%s.example.com. 0 IN A %s", peer1b32, peer1.Endpoint.IP.String())),
|
test.A(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN A %s", peer1b32, peer1.Endpoint.IP.String())),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Qname: fmt.Sprintf("%s.example.com.", peer2b32),
|
Qname: fmt.Sprintf("%s._wireguard._udp.example.com.", peer2b32),
|
||||||
Qtype: dns.TypeAAAA,
|
Qtype: dns.TypeAAAA,
|
||||||
Rcode: dns.RcodeSuccess,
|
Rcode: dns.RcodeSuccess,
|
||||||
Answer: []dns.RR{
|
Answer: []dns.RR{
|
||||||
test.AAAA(fmt.Sprintf("%s.example.com. 0 IN AAAA %s", peer2b32, peer2.Endpoint.IP.String())),
|
test.AAAA(fmt.Sprintf("%s._wireguard._udp.example.com. 0 IN AAAA %s", peer2b32, peer2.Endpoint.IP.String())),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user