@@ -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
+ }