|
|
@@ -137,6 +137,7 @@ type Server struct {
|
|
|
metaCert []byte // the encoded x509 cert to send after LetsEncrypt cert+intermediate
|
|
|
dupPolicy dupPolicy
|
|
|
debug bool
|
|
|
+ localClient local.Client
|
|
|
|
|
|
// Counters:
|
|
|
packetsSent, bytesSent expvar.Int
|
|
|
@@ -485,6 +486,16 @@ func (s *Server) SetVerifyClientURLFailOpen(v bool) {
|
|
|
s.verifyClientsURLFailOpen = v
|
|
|
}
|
|
|
|
|
|
+// SetTailscaledSocketPath sets the unix socket path to use to talk to
|
|
|
+// tailscaled if client verification is enabled.
|
|
|
+//
|
|
|
+// If unset or set to the empty string, the default path for the operating
|
|
|
+// system is used.
|
|
|
+func (s *Server) SetTailscaledSocketPath(path string) {
|
|
|
+ s.localClient.Socket = path
|
|
|
+ s.localClient.UseSocketOnly = path != ""
|
|
|
+}
|
|
|
+
|
|
|
// SetTCPWriteTimeout sets the timeout for writing to connected clients.
|
|
|
// This timeout does not apply to mesh connections.
|
|
|
// Defaults to 2 seconds.
|
|
|
@@ -1320,8 +1331,6 @@ func (c *sclient) requestMeshUpdate() {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-var localClient local.Client
|
|
|
-
|
|
|
// isMeshPeer reports whether the client is a trusted mesh peer
|
|
|
// node in the DERP region.
|
|
|
func (s *Server) isMeshPeer(info *clientInfo) bool {
|
|
|
@@ -1340,7 +1349,7 @@ func (s *Server) verifyClient(ctx context.Context, clientKey key.NodePublic, inf
|
|
|
|
|
|
// tailscaled-based verification:
|
|
|
if s.verifyClientsLocalTailscaled {
|
|
|
- _, err := localClient.WhoIsNodeKey(ctx, clientKey)
|
|
|
+ _, err := s.localClient.WhoIsNodeKey(ctx, clientKey)
|
|
|
if err == tailscale.ErrPeerNotFound {
|
|
|
return fmt.Errorf("peer %v not authorized (not found in local tailscaled)", clientKey)
|
|
|
}
|
|
|
@@ -2240,7 +2249,7 @@ func (s *Server) ConsistencyCheck() error {
|
|
|
func (s *Server) checkVerifyClientsLocalTailscaled() error {
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
|
defer cancel()
|
|
|
- status, err := localClient.StatusWithoutPeers(ctx)
|
|
|
+ status, err := s.localClient.StatusWithoutPeers(ctx)
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("localClient.Status: %w", err)
|
|
|
}
|