@@ -161,21 +161,6 @@ func NewConn(options *Options) (*Conn, error) {
161
161
return nil , xerrors .Errorf ("start netstack: %w" , err )
162
162
}
163
163
wireguardEngine = wgengine .NewWatchdog (wireguardEngine )
164
-
165
- // Update the wireguard configuration to allow traffic to flow.
166
- wireguardConfig , err := nmcfg .WGCfg (netMap , Logger (options .Logger .Named ("wgconfig" )), netmap .AllowSingleHosts , "" )
167
- if err != nil {
168
- return nil , xerrors .Errorf ("create wgcfg: %w" , err )
169
- }
170
-
171
- wireguardRouter := & router.Config {
172
- LocalAddrs : wireguardConfig .Addresses ,
173
- }
174
- err = wireguardEngine .Reconfig (wireguardConfig , wireguardRouter , & dns.Config {}, & tailcfg.Debug {})
175
- if err != nil {
176
- return nil , xerrors .Errorf ("reconfig: %w" , err )
177
- }
178
-
179
164
wireguardEngine .SetDERPMap (options .DERPMap )
180
165
netMapCopy := * netMap
181
166
wireguardEngine .SetNetworkMap (& netMapCopy )
@@ -198,8 +183,10 @@ func NewConn(options *Options) (*Conn, error) {
198
183
netMap : netMap ,
199
184
netStack : netStack ,
200
185
wireguardMonitor : wireguardMonitor ,
201
- wireguardRouter : wireguardRouter ,
202
- wireguardEngine : wireguardEngine ,
186
+ wireguardRouter : & router.Config {
187
+ LocalAddrs : netMap .Addresses ,
188
+ },
189
+ wireguardEngine : wireguardEngine ,
203
190
}
204
191
netStack .ForwardTCPIn = server .forwardTCP
205
192
return server , nil
@@ -261,7 +248,7 @@ func (c *Conn) SetNodeCallback(callback func(node *Node)) {
261
248
DERPLatency : c .lastDERPLatency ,
262
249
}
263
250
}
264
- c .magicConn .SetNetInfoCallback (func (ni * tailcfg.NetInfo ) {
251
+ c .wireguardEngine .SetNetInfoCallback (func (ni * tailcfg.NetInfo ) {
265
252
c .lastMutex .Lock ()
266
253
c .lastPreferredDERP = ni .PreferredDERP
267
254
c .lastDERPLatency = ni .DERPLatency
@@ -309,6 +296,7 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
309
296
peerMap [peer .ID ] = peer
310
297
}
311
298
for _ , node := range nodes {
299
+ peerStatus , ok := status .Peer [node .Key ]
312
300
peerMap [node .ID ] = & tailcfg.Node {
313
301
ID : node .ID ,
314
302
Key : node .Key ,
@@ -318,12 +306,18 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
318
306
Endpoints : node .Endpoints ,
319
307
DERP : fmt .Sprintf ("%s:%d" , tailcfg .DerpMagicIP , node .PreferredDERP ),
320
308
Hostinfo : hostinfo .New ().View (),
309
+ // Starting KeepAlive messages at the initialization
310
+ // of a connection cause it to hang for an unknown
311
+ // reason. TODO: @kylecarbs debug this!
312
+ KeepAlive : ok && peerStatus .Active ,
321
313
}
322
314
}
323
315
c .netMap .Peers = make ([]* tailcfg.Node , 0 , len (peerMap ))
324
316
for _ , peer := range peerMap {
325
317
c .netMap .Peers = append (c .netMap .Peers , peer )
326
318
}
319
+ netMapCopy := * c .netMap
320
+ c .wireguardEngine .SetNetworkMap (& netMapCopy )
327
321
cfg , err := nmcfg .WGCfg (c .netMap , Logger (c .logger .Named ("wgconfig" )), netmap .AllowSingleHosts , "" )
328
322
if err != nil {
329
323
return xerrors .Errorf ("update wireguard config: %w" , err )
@@ -332,15 +326,13 @@ func (c *Conn) UpdateNodes(nodes []*Node) error {
332
326
if err != nil {
333
327
return xerrors .Errorf ("reconfig: %w" , err )
334
328
}
335
- netMapCopy := * c .netMap
336
- c .wireguardEngine .SetNetworkMap (& netMapCopy )
337
329
return nil
338
330
}
339
331
340
332
// Status returns the current ipnstate of a connection.
341
333
func (c * Conn ) Status () * ipnstate.Status {
342
334
sb := & ipnstate.StatusBuilder {}
343
- c .magicConn .UpdateStatus (sb )
335
+ c .wireguardEngine .UpdateStatus (sb )
344
336
return sb .Status ()
345
337
}
346
338
0 commit comments