@@ -2,54 +2,57 @@ package vpn
2
2
3
3
import "tailscale.com/net/dns"
4
4
5
- func NewVPNManager (t * Tunnel ) dns.OSConfigurator {
6
- return & vpnDNSManager {tunnel : t }
5
+ func NewDNSConfigurator (t * Tunnel ) dns.OSConfigurator {
6
+ return & dnsManager {tunnel : t }
7
7
}
8
8
9
- type vpnDNSManager struct {
9
+ type dnsManager struct {
10
10
tunnel * Tunnel
11
11
}
12
12
13
- func (v * vpnDNSManager ) SetDNS (cfg dns.OSConfig ) error {
14
- servers := make ([]string , 0 , len (cfg .Nameservers ))
15
- for _ , ns := range cfg .Nameservers {
16
- servers = append (servers , ns .String ())
17
- }
18
- searchDomains := make ([]string , 0 , len (cfg .SearchDomains ))
19
- for _ , domain := range cfg .SearchDomains {
20
- searchDomains = append (searchDomains , domain .WithoutTrailingDot ())
21
- }
22
- matchDomains := make ([]string , 0 , len (cfg .MatchDomains ))
23
- for _ , domain := range cfg .MatchDomains {
24
- matchDomains = append (matchDomains , domain .WithoutTrailingDot ())
25
- }
13
+ func (v * dnsManager ) SetDNS (cfg dns.OSConfig ) error {
14
+ settings := convertDNSConfig (cfg )
26
15
return v .tunnel .ApplyNetworkSettings (v .tunnel .ctx , & NetworkSettingsRequest {
27
- DnsSettings : & NetworkSettingsRequest_DNSSettings {
28
- Servers : servers ,
29
- SearchDomains : searchDomains ,
30
- DomainName : "coder" ,
31
- MatchDomains : matchDomains ,
32
- MatchDomainsNoSearch : false ,
33
- },
16
+ DnsSettings : settings ,
34
17
})
35
18
}
36
19
37
- func (vpnDNSManager ) GetBaseConfig () (dns.OSConfig , error ) {
20
+ func (* dnsManager ) GetBaseConfig () (dns.OSConfig , error ) {
38
21
// Tailscale calls this function to blend the OS's DNS configuration with
39
22
// it's own, so this is only called if `SupportsSplitDNS` returns false.
40
23
return dns.OSConfig {}, dns .ErrGetBaseConfigNotSupported
41
24
}
42
25
43
- func (* vpnDNSManager ) SupportsSplitDNS () bool {
26
+ func (* dnsManager ) SupportsSplitDNS () bool {
44
27
// macOS & Windows 10+ support split DNS, so we'll assume all CoderVPN
45
28
// clients do too.
46
29
return true
47
30
}
48
31
49
32
// Close implements dns.OSConfigurator.
50
- func (* vpnDNSManager ) Close () error {
33
+ func (* dnsManager ) Close () error {
51
34
// There's no cleanup that we need to initiate from within the dylib.
52
35
return nil
53
36
}
54
37
55
- var _ dns.OSConfigurator = (* vpnDNSManager )(nil )
38
+ func convertDNSConfig (cfg dns.OSConfig ) * NetworkSettingsRequest_DNSSettings {
39
+ servers := make ([]string , 0 , len (cfg .Nameservers ))
40
+ for _ , ns := range cfg .Nameservers {
41
+ servers = append (servers , ns .String ())
42
+ }
43
+ searchDomains := make ([]string , 0 , len (cfg .SearchDomains ))
44
+ for _ , domain := range cfg .SearchDomains {
45
+ searchDomains = append (searchDomains , domain .WithoutTrailingDot ())
46
+ }
47
+ matchDomains := make ([]string , 0 , len (cfg .MatchDomains ))
48
+ for _ , domain := range cfg .MatchDomains {
49
+ matchDomains = append (matchDomains , domain .WithoutTrailingDot ())
50
+ }
51
+ return & NetworkSettingsRequest_DNSSettings {
52
+ Servers : servers ,
53
+ SearchDomains : searchDomains ,
54
+ DomainName : "coder" ,
55
+ MatchDomains : matchDomains ,
56
+ MatchDomainsNoSearch : false ,
57
+ }
58
+ }
0 commit comments