Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    "Tailscale is not online" problem

    Scheduled Pinned Locked Moved Tailscale
    55 Posts 14 Posters 17.3k Views 16 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Y Offline
      yobyot
      last edited by

      Well,

      I spent some time tonight playing around with this and I think I have it.

      Some suggestions for others:

      1. Generate the OAuth client in the Tailscale admin before anything else.

      2. Make sure to create the tag you'll need. One per pfSense instance (and clearly, one OAuth client per pfSense instance).

      3. Give the OAuth client the permissions you think appropriate.

      4. Very Important: make sure that you can generate an API key with the OAuth creds. The OAuth creds are, apparently, used by the CLI to generate an API key. The latter is what does the trick in tailscale up.
        Do this from the pfSense console:
        curl -d "client_id=kY5Mv4h8kQ11CNTRL" -d "client_secret=tskey-client-kY5[invalidchars]CNTRL-ZXo2FfBbb[moreinvalidchars]GVT" "https://api.tailscale.com/api/v2/oauth/token"
        If you don't get back something like this, you'll never be able to get it to work:
        {"access_token":"tskey-api-kM[lotsofinvalidchars]NTRL-[stillmoreinvalidchars]9YevL","token_type":"Bearer","expires_in":3600,"scope":"all"}

      5. Here's what worked for me if the above returned an API token:
        /usr/local/bin/tailscale up --auth-key=tskey-client-[greekedout]GVT\?ephemeral=false\&preauthorized=true --accept-dns=false --accept-routes --advertise-exit-node --advertise-routes=192.168.211.0/24 --advertise-tags=tag:[yourtaghere]

      6. Make sure you have the cron package installed. Then add a @reboot entry using the full path (see above). I also added a cron entry every six hours as if Tailscale is up, this command does not interrupt or reset any sessions.

      I've left some bytes of the creds in these examples to make it clearer where your full creds should go. The curl command requires the escape symbol (\) in the parameters that will be passed to the control plane.

      FWIW, I lost an hour or more because I had (God only knows why) set Tailscale on one pfSense instance to accept DNS. Do this and the router cannot resolve the control plane API endpoint. Dumb. And I own it.

      I don't know if this "fixes" everything. But it's a lot of work and it shouldn't be necessary. Somehow, this package to be useful needs to survive reboot without the need to go to these lengths.

      1 Reply Last reply Reply Quote 0
      • L Offline
        left4apple @manupfdude
        last edited by

        @manupfdude Thanks for the info. If I understand correctly, pfSense Tailscale package will ensure tailscaled is running all the time even after reboot, yet Tailscale is actually using your command to authenticate itself, right? The KEY entered in the pfSense Tailscale UI has already expired(or you can enter fake KEY there).

        M 1 Reply Last reply Reply Quote 0
        • M Offline
          manupfdude @left4apple
          last edited by

          @left4apple Basicaslly - Yes.
          The key on the UI is no longer relevant (once you go with the oauth route)
          I'm on version 1.88.3 of tailscale, after several reboots (due to power outages...) - TS still connected and authenticated :-)

          1 Reply Last reply Reply Quote 0
          • K Offline
            KStarRunner
            last edited by

            This seems like a bug to me. Every other platform where TailScale is setup, the tskey-auth is only used once, and then immediately discarded. Clients don't maintain the original tskey-auth, but rather a separate credential which was bootstrapped by the tskey-auth.

            So why is pfSense storing this key? IMHO, the GUI should accept the key, and once bootstrapped, delete it. The persistent presence of the tskey-auth makes me think pfSense keeps attempting to re-use it each time the service restarts.

            The correct behavior would seemingly be to accept the tskey-auth in the GUI, and then once the bootstrap is completed, delete it from the stored configuration. Should a new value be entered into the GUI, presume that means a new bootstrap is needed and start fresh. But as long as that box remains blank, keep on using the existing credentials.

            Y 1 Reply Last reply Reply Quote 0
            • Y Offline
              yobyot @KStarRunner
              last edited by

              @KStarRunner Clearly, it’s a bug.

              K 1 Reply Last reply Reply Quote 0
              • K Offline
                KStarRunner @yobyot
                last edited by

                @yobyot Sorry, meant to say the bug appears to be in the way pfsense manages the TailScale client, vs a bug in the TailScale client itself.

                1 Reply Last reply Reply Quote 0
                • M Offline
                  marcg @Jim Coogan
                  last edited by marcg

                  @Jim-Coogan said in "Tailscale is not online" problem:

                  fwiw I have discovered that running in shell

                  tailscale down
                  tailscale up --force-reauth
                  

                  will give you a URL you can then paste in browser and it re authenticates and gets pfsense back online as the same machine and status shows this in pf tailscale UI. This is reauthing the node key.

                  @Jim-Coogan Looks like your fix is working for me with the packaged Tailscale 1.82.4 on 25.07. Thanks.

                  Previously, if I rebooted pfSense or started/stopped tailscale, tailscale wouldn't reconnect even though key expiry was disabled. After following your steps with an expiry-disabled key, tailscale reconnects after restarts and reboots. Hoping that continues ... I'm sure I'll find out.

                  1 Reply Last reply Reply Quote 0
                  • V Offline
                    Vad-B
                    last edited by Vad-B

                    Faced the same "Tailscale is not online" issue today - 7 days after the initial setup (October 23rd).
                    Resolved it by regenerating the key and authenticating again. I noticed the ongoing discussions about OAuth, but chose to dig deeper into this problem first.

                    Here’s what I found:

                    This appears to be a known issue affecting Tailscale across all FreeBSD-based systems, including vanilla FreeBSD, pfSense, and OPNsense.
                    There is an open bug in the Tailscale repository with a solution for pfSense. I plan to test it today: https://github.com/tailscale/tailscale/issues/17047

                    This is how it works (source):
                    "Auth keys and node keys are two separate things. The auth key is used one to register the device and a node key is obtained. This node key is part of the tailscale state and authenticates this device. You can remove the expiration for this node key
                    ...
                    After the initial auth, you don't need the auth key anymore. The node key in the tailscale state (with expiration removed) will auth the node forever."

                    But in reality, on boot or restart, the Tailscale package attempts to start the Tailscale with "tailscale up --auth-key=..." (as defined in /usr/local/etc/rc.d/pfsense_tailscaled) which lead to re-register the node with the Tailscale network using the auth-key (that is set to expire), overriding the valid existing node key that is configured not to expire.

                    So to fix it, we should force tailscale up without the auth-key using one of the options from the git comment above.


                    I was still puzzled by this 7-day timeline - where it comes from? Following a link to the related OPNsense GitHub issue, I found this explanation:

                    "Folks who create and use reusable auth keys won't see the issue until that key expires (default 90 days). Folks like me who created a one off key will see the issue after the first reboot after one week (default expiration for a one off key is a week.)"

                    V 2 Replies Last reply Reply Quote 0
                    • V Offline
                      Vad-B @Vad-B
                      last edited by Vad-B

                      I just tested the fix from the message above. Here's what happened:

                      On the pfSense device connected to Tailscale, I set the Pre-authentication Key to file:/dev/null and saved the settings. Tailscale immediately disconnected, and the Status tab gave me a login link. I followed the link, logged in, and this machine was added as a new device in Tailscale. After deleting the old record for this machine and setting a proper Tailscale IP all worked fine.

                      After that, I restarted the service a couple of times to confirm it reconnects automatically - so far, so good.

                      However, keep in mind that I had already reconnected it earlier today with a new one-off key, so I'll see how it really behaves when it reboots in seven days.

                      7b48d92c-fb88-40ea-bdc7-a362dd89f30d-image.png

                      1 Reply Last reply Reply Quote 0
                      • V Offline
                        Vad-B @Vad-B
                        last edited by

                        said in "Tailscale is not online" problem:

                        But in reality, on boot or restart, the Tailscale package attempts to start the Tailscale with "tailscale up --auth-key=..." (as defined in /usr/local/etc/rc.d/pfsense_tailscaled) which lead to re-register the node with the Tailscale network using the auth-key (that is set to expire), overriding the valid existing node key that is configured not to expire.

                        So to fix it, we should force tailscale up without the auth-key using one of the options from the git comment above.

                        @cmcdonald, could you take a look at this, please?

                        L 1 Reply Last reply Reply Quote 0
                        • L Offline
                          lbm_ @Vad-B
                          last edited by

                          @Vad-B
                          Interesting indeed! I just tried to fill the Pre-authentication Key with file:/dev/null. I get an crash in pfsense after some time, but when I login again is saved.

                          For me this for after service restarts at least this solves it, including the issue with the routes not being advertised even set in the WebUI.

                          • Havent done an full restart of pfsense (yet)
                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.