Unable to disable Headscale from using Tailscale DERP nodes #463

Closed
opened 2025-12-29 01:29:48 +01:00 by adam · 3 comments
Owner

Originally created by @MilkTeaNo7 on GitHub (Apr 4, 2023).

Environment

Headscale version: v0.21.0
Server version: CentOS7
Tailscale version: Win-134.2

Problem

  1. Successfully installed and deployed Headscale by following the official Linux deployment guide and connected nodes to the server.
  2. Nodes can ping each other.
  3. However, it is well-known that there is no official Tailscale DERP node in the country with the largest area in Asia.
  4. All nodes connect to a DERP node in India for some unknown reason.
  5. This results in very high latency, reaching around 200, when pinging a company computer at home, making remote desktop applications like Microsoft Remote Desktop almost unusable.

Attempts made

  1. Asked chatGPT and received several answers without dissent.
  2. Tried commenting out or deleting the DERP content in the Headscale configuration file config.yaml.

Requirements

  1. A should connect to B only using Headscale server and not Tailscale DERP server.
  2. Reduce latency and ensure both ends can access through UDP, with latency below 30.

==Can anyone please help me? Thank you.==

Originally created by @MilkTeaNo7 on GitHub (Apr 4, 2023). # Environment **Headscale version**: v0.21.0 **Server version**: CentOS7 **Tailscale version**: Win-134.2 # Problem 1. Successfully installed and deployed Headscale by following the [official Linux deployment guide](https://github.com/juanfont/headscale/blob/main/docs/running-headscale-linux.md) and connected nodes to the server. 2. Nodes can ping each other. 3. However, it is well-known that there is no official Tailscale DERP node in the country with the largest area in Asia. 4. All nodes connect to a DERP node in India for some unknown reason. 5. This results in very high latency, reaching around 200, when pinging a company computer at home, making remote desktop applications like Microsoft Remote Desktop almost unusable. # Attempts made 1. Asked chatGPT and received several answers without dissent. 2. Tried commenting out or deleting the DERP content in the Headscale configuration file `config.yaml`. # Requirements 1. A should connect to B only using Headscale server and not Tailscale DERP server. 2. Reduce latency and ensure both ends can access through UDP, with latency below 30. ==Can anyone please help me? Thank you.==
adam added the bug label 2025-12-29 01:29:48 +01:00
adam closed this issue 2025-12-29 01:29:48 +01:00
Author
Owner

@kylechase commented on GitHub (Apr 5, 2023):

If you set the url key in the derp key to [], this will disable tailscale provided derps. Did you enable the local derp server in config.yaml?

This is not a bug, just a configuration issue.

@kylechase commented on GitHub (Apr 5, 2023): If you set the url key in the derp key to [], this will disable tailscale provided derps. Did you enable the local derp server in config.yaml? This is not a bug, just a configuration issue.
Author
Owner

@MilkTeaNo7 commented on GitHub (Apr 6, 2023):

Thank you for your response, the problem has been solved. However, I realized that without deploying a DERP server, I am always using the DERP server provided by OpenAI. I am currently experiencing some issues and would greatly appreciate it if you could provide some useful documentation. The official documentation lacks many key basic steps.

@MilkTeaNo7 commented on GitHub (Apr 6, 2023): Thank you for your response, the problem has been solved. However, I realized that without deploying a DERP server, I am always using the DERP server provided by OpenAI. I am currently experiencing some issues and would greatly appreciate it if you could provide some useful documentation. The official documentation lacks many key basic steps.
Author
Owner

@kylechase commented on GitHub (Apr 6, 2023):

Headscale has an embedded derp server.

Here is the derp server config from my configuration.

derp:
  server:
    # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config
    # The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place
    enabled: true

    # Region ID to use for the embedded DERP server.
    # The local DERP prevails if the region ID collides with other region ID coming from
    # the regular DERP config.
    region_id: 999

    # Region code and name are displayed in the Tailscale UI to identify a DERP region
    region_code: "derpyderp"
    region_name: "My Derpy Derp Server"

    # Listens over UDP at the configured address for STUN connections - to help with NAT traversal.
    # When the embedded DERP server is enabled stun_listen_addr MUST be defined.
    #
    # For more details on how this works, check this great article: https://tailscale.com/blog/how-tailscale-works/
    stun_listen_addr: "0.0.0.0:3478"

  # List of externally available DERP maps encoded in JSON
  urls: []
#    - https://controlplane.tailscale.com/derpmap/default

  # Locally available DERP map files encoded in YAML
  #
  # This option is mostly interesting for people hosting
  # their own DERP servers:
  # https://tailscale.com/kb/1118/custom-derp-servers/
  #
  # paths:
  #   - /etc/headscale/derp-example.yaml
  paths: []

  # If enabled, a worker will be set up to periodically
  # refresh the given sources and update the derpmap
  # will be set up.
  auto_update_enabled: true

  # How often should we check for DERP updates?
  update_frequency: 24h
@kylechase commented on GitHub (Apr 6, 2023): Headscale has an embedded derp server. Here is the derp server config from my configuration. ``` derp: server: # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config # The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place enabled: true # Region ID to use for the embedded DERP server. # The local DERP prevails if the region ID collides with other region ID coming from # the regular DERP config. region_id: 999 # Region code and name are displayed in the Tailscale UI to identify a DERP region region_code: "derpyderp" region_name: "My Derpy Derp Server" # Listens over UDP at the configured address for STUN connections - to help with NAT traversal. # When the embedded DERP server is enabled stun_listen_addr MUST be defined. # # For more details on how this works, check this great article: https://tailscale.com/blog/how-tailscale-works/ stun_listen_addr: "0.0.0.0:3478" # List of externally available DERP maps encoded in JSON urls: [] # - https://controlplane.tailscale.com/derpmap/default # Locally available DERP map files encoded in YAML # # This option is mostly interesting for people hosting # their own DERP servers: # https://tailscale.com/kb/1118/custom-derp-servers/ # # paths: # - /etc/headscale/derp-example.yaml paths: [] # If enabled, a worker will be set up to periodically # refresh the given sources and update the derpmap # will be set up. auto_update_enabled: true # How often should we check for DERP updates? update_frequency: 24h ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/headscale#463