diff --git a/wgengine/faketun.go b/wgengine/faketun.go
index 8bc04f81f..c063ed7aa 100644
--- a/wgengine/faketun.go
+++ b/wgengine/faketun.go
@@ -35,6 +35,7 @@ func (t *fakeTun) File() *os.File {
 func (t *fakeTun) Close() error {
 	close(t.closechan)
 	close(t.datachan)
+	close(t.evchan)
 	return nil
 }
 
diff --git a/wgengine/router_freebsd.go b/wgengine/router_freebsd.go
index e4c696265..2841495f2 100644
--- a/wgengine/router_freebsd.go
+++ b/wgengine/router_freebsd.go
@@ -55,6 +55,10 @@ func (r *freebsdRouter) Up() error {
 }
 
 func (r *freebsdRouter) SetRoutes(rs RouteSettings) error {
+	if rs.LocalAddr == (wgcfg.CIDR{}) {
+		return nil
+	}
+
 	var errq error
 
 	// Update the address.
@@ -139,15 +143,6 @@ func (r *freebsdRouter) SetRoutes(rs RouteSettings) error {
 }
 
 func (r *freebsdRouter) Close() error {
-	out, err := cmd("ifconfig", r.tunname, "down").CombinedOutput()
-	if err != nil {
-		r.logf("running ifconfig failed: %v\n%s", err, out)
-	}
-
-	if err := r.restoreResolvConf(); err != nil {
-		r.logf("failed to restore system resolv.conf: %v", err)
-	}
-
 	return nil
 }
 
diff --git a/wgengine/userspace.go b/wgengine/userspace.go
index c1535a736..42b89a5c9 100644
--- a/wgengine/userspace.go
+++ b/wgengine/userspace.go
@@ -564,6 +564,7 @@ func (e *userspaceEngine) Close() {
 	e.wgdev.IpcSetOperation(r)
 	e.linkMon.Close()
 	e.router.Close()
+	e.wgdev.Close()
 	e.magicConn.Close()
 	close(e.waitCh)
 }