@@ -215,6 +215,11 @@ func (m windowsManager) SetDNS(cfg OSConfig) error {
215
215
// configuration only, routing one set of things to the "split"
216
216
// resolver and the rest to the primary.
217
217
218
+ // Unconditionally disable dynamic DNS updates on our interfaces.
219
+ if err := m .disableDynamicUpdates (); err != nil {
220
+ m .logf ("disableDynamicUpdates error: %v\n " , err )
221
+ }
222
+
218
223
if len (cfg .MatchDomains ) == 0 {
219
224
if err := m .setSplitDNS (nil , nil ); err != nil {
220
225
return err
@@ -295,6 +300,29 @@ func (m windowsManager) Close() error {
295
300
return m .SetDNS (OSConfig {})
296
301
}
297
302
303
+ // disableDynamicUpdates sets the appropriate registry values to prevent the
304
+ // Windows DHCP client from sending dynamic DNS updates for our interface to
305
+ // AD domain controllers.
306
+ func (m windowsManager ) disableDynamicUpdates () error {
307
+ setRegValue := func (regBase string ) error {
308
+ key , err := m .openKey (m .ifPath (regBase ))
309
+ if err != nil {
310
+ return err
311
+ }
312
+ defer key .Close ()
313
+
314
+ return key .SetDWordValue ("DisableDynamicUpdate" , 1 )
315
+ }
316
+
317
+ for _ , regBase := range []string {ipv4RegBase , ipv6RegBase } {
318
+ if err := setRegValue (regBase ); err != nil {
319
+ return err
320
+ }
321
+ }
322
+
323
+ return nil
324
+ }
325
+
298
326
func (m windowsManager ) GetBaseConfig () (OSConfig , error ) {
299
327
resolvers , err := m .getBasePrimaryResolver ()
300
328
if err != nil {
0 commit comments