# \[Tutorial\] Tailscale on GL-SF1200, GL-SFT1200 (Opal)

**URL:** <https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376>\
**Category:** Router\
**Created:** [July 14, 2023, 3:45pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376 "2023-07-14T15:45:45Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![igerman](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/igerman/32/11743_2.png) [@igerman](https://forum.gl-inet.com/u/igerman)\
**Post date:** [July 14, 2023, 3:45pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/1 "2023-07-14T15:45:45Z")

</div>

# Automatic installation

## [Lanrat's Tailscale Repository](https://lanrat.github.io/openwrt-tailscale-repo)

```bash
echo "src/gz openwrt-tailscale https://lanrat.github.io/openwrt-tailscale-repo/packages/19.07" >> "/etc/opkg/customfeeds.conf"
opkg update
opkg install tailscale

```

It's not compressed as of writing this (30MB binary), but it's much easier to install, and now supports our architecture

# Manual compilation and installation

### Prerequisites

1. A GL.iNet SiFlower router, like the Opal (GL-SFT1200)
2. A Linux system (or WSL2 on Windows) to build Tailscale

### Building Tailscale

1. Clone the Tailscale repository:

```bash
git clone https://github.com/tailscale/tailscale.git

```

1. Install Golang: [Download and install - The Go Programming Language](https://golang.org/doc/install)

- Verify that Go is installed correctly:

```bash
go version

```

1. Install the latest (important!) version of UPX: [Release UPX 5.1.0 · upx/upx · GitHub](https://github.com/upx/upx/releases/latest)
2. Install `binutils-mipsel-linux-gnu`

```bash
sudo apt install binutils-mipsel-linux-gnu
mipsel-linux-gnu-strip --version

```

1. Build Tailscale:

```bash
# Change to the Tailscale directory:
cd tailscale

# Optionally switch to a specific version:
# git checkout tags/v1.44.0 -b v1.44.0

# Build the combined binary - mipsel, hardfloat (?), linked statically, stripped, verbose:
# Note: mipsel = mipsle for Golang
GOOS=linux GOARCH=mipsle GOMIPS=hardfloat CGO_ENABLED=0 go build -v -o tailscale.combined -tags ts_include_cli -trimpath -ldflags="-s -w" ./cmd/tailscaled

```

1. Compress the binary:

```bash
mipsel-linux-gnu-strip tailscale.combined
upx --lzma --best -o tailscale.upx ./tailscale.combined

```

### Installing Tailscale

1. Copy the `tailscale.upx` binary to the router:

```bash
scp tailscale.upx root@192.168.8.1:/root # or whatever your router's IP is

```

1. SSH into the router:

```bash
ssh root@192.168.8.1 # or whatever your router's IP is

```

1. Make the binary executable:

```bash
chmod +x tailscale.upx

```

1. Verify that the binary works (keep in mind that it's UPX-compressed, so it will take a few seconds to decompress):

```bash
./tailscale.upx -version

```

1. [Create links](https://tailscale.com/kb/1207/small-tailscale/#:~:text=By%20creating%20symlinks%20to%20the%20combined%20binary%2C%20you%20can%20see%20how%20it%20can%20run%20as%20both%20the%20daemon%20and%20the%20CLI%3A):

```bash
ln -s tailscale.upx tailscale
ln -s tailscale.upx tailscaled

```

1. Create init script:

```bash
cat << EOF > /etc/init.d/tailscale
#!/bin/sh /etc/rc.common

# Copyright 2020 Google LLC.
# SPDX-License-Identifier: Apache-2.0

USE_PROCD=1
START=99
STOP=1

start_service() {
  procd_open_instance
  procd_set_param command /root/tailscaled

  # Set the port to listen on for incoming VPN packets.
  # Remote nodes will automatically be informed about the new port number,
  # but you might want to configure this in order to set external firewall
  # settings.
  procd_append_param command --port 41641

  # OpenWRT /var is a symlink to /tmp, so write persistent state elsewhere.
  procd_append_param command --state /etc/config/tailscaled.state
  
  # Persist files for TLS cert & Taildrop files
  procd_append_param command --statedir /etc/tailscale/

  procd_set_param respawn
  procd_set_param stdout 1
  procd_set_param stderr 1

  procd_close_instance
}

stop_service() {
  /root/tailscaled --cleanup
}
EOF

```

1. Make the init script executable:

```bash
chmod +x /etc/init.d/tailscale

```

1. Enable the init script:

```bash
/etc/init.d/tailscale enable

```

1. Verify that the service is enabled:

```bash
ls /etc/rc.d/S*tailscale*

```

1. Start the service:

```bash
/etc/init.d/tailscale start

```

1. Verify that the service is running:

```bash
ps | grep tailscaled

```

1. Hope for the best and try to up tailscale:

```bash
/root/tailscale up --accept-dns=false

```

## If you get a segmentation fault, you might want to try skipping the UPX compression step altogether, but mind that the binary will be 30MB instead of 5.4MB. Mind the binary name being `tailscale.combined` instead of `tailscale.upx` in the steps.

# Configuration

Refer to [the OpenWRT wiki](https://openwrt.org/docs/guide-user/services/vpn/tailscale/start)

@yuxin.zou Hopefully this is useful for official support for those devices, like a nice GUI 🤞

---

<div class="post-metadata">

**Author:** ![bring.fringe18](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/bring.fringe18/32/11777_2.png) [@bring.fringe18](https://forum.gl-inet.com/u/bring.fringe18)\
**Post date:** [July 14, 2023, 3:48pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/2 "2023-07-14T15:48:12Z")

</div>

Very nice. Does the GL device as an exit node work w/ this version of the daemon?

---

<div class="post-metadata">

**Author:** ![igerman](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/igerman/32/11743_2.png) [@igerman](https://forum.gl-inet.com/u/igerman)\
**Post date:** [July 14, 2023, 3:52pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/3 "2023-07-14T15:52:17Z")

</div>

I would assume so, however I wasn’t able to get it working. I got static routes though. It advertises it, but connecting to it doesn’t give me internet. Probably my firewall or interface settings:

 ![image](https://forum-static.gl-inet.com/original/2X/b/bb91bd0ef58da88399fb401c70c3fb3988065f31.png)

My tailscale configuration is:

```auto
tailscale up --accept-dns=false --advertise-routes=10.13.37.0/24 --advertise-exit-node

```

Could also be ACLs on Tailscale, but I don’t think so

---

<div class="post-metadata">

**Author:** ![bring.fringe18](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/bring.fringe18/32/11777_2.png) [@bring.fringe18](https://forum.gl-inet.com/u/bring.fringe18)\
**Post date:** [July 14, 2023, 3:54pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/4 "2023-07-14T15:54:41Z")

</div>

Oh; good to know. That seems to be the number one question/issue w/ Tailscale I’ve seen in the threads.

---

<div class="post-metadata">

**Author:** ![igerman](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/igerman/32/11743_2.png) [@igerman](https://forum.gl-inet.com/u/igerman)\
**Post date:** [July 14, 2023, 3:56pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/5 "2023-07-14T15:56:19Z")

</div>

Lanrat also had issues with exit nodes on openwrt in general, may just be a matter of configuration

---

<div class="post-metadata">

**Author:** ![JustNathan](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@JustNathan](https://forum.gl-inet.com/u/JustNathan)\
**Post date:** [October 2, 2023, 2:37am UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/6 "2023-10-02T02:37:23Z")

</div>

Am having an issue it just not routing any traffic through my exit node. I have it installed and its online and everything and nothing seems wrong but no traffic is being routed through. Was told on reddit it was likely a firewall issue but I am kinda lost and don’t know where to go from here.

---

<div class="post-metadata">

**Author:** ![Strider3000](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/s/3be4f8/32.png) [@Strider3000](https://forum.gl-inet.com/u/Strider3000)\
**Post date:** [November 28, 2023, 11:12pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/7 "2023-11-28T23:12:10Z")

</div>

Ooooo can you compile a version for arm-cortex-a7 and openwrt 21.02??

---

<div class="post-metadata">

**Author:** ![Rainy](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/r/c2a13f/32.png) [@Rainy](https://forum.gl-inet.com/u/Rainy)\
**Post date:** [February 3, 2024, 9:19pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/8 "2024-02-03T21:19:50Z")

</div>

did you or anyone elase find solution for exit-node on gl.inet routers?

---

<div class="post-metadata">

**Author:** ![bring.fringe18](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/bring.fringe18/32/11777_2.png) [@bring.fringe18](https://forum.gl-inet.com/u/bring.fringe18)\
**Post date:** [February 4, 2024, 9:44am UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/9 "2024-02-04T09:44:31Z")

</div>

Try giving this a go:

> [@Tailscale settings lost on reboot](https://forum.gl-inet.com/t/tailscale-settings-lost-on-reboot/31524/19):
>
> Yeah I see that now after you posted that dir list. The more I look at this the more it seems all so familar: This is untested code to enable exit nodes I never got feedback on from someone else but here: sed '/param="$param --exit-node-allow-lan-access --exit-node=$exit\_node\_ip"/a\ param=“$param --advertise-exit-node --allow-exit-node --allow-routes”' /usr/bin/gl\_tailscale \>\> \ /usr/bin/gl\_tailscale.new && mv /usr/bin/gl\_tailscale /usr/bin/gl\_tailscale.stock \ && mv /u…

---

<div class="post-metadata">

**Author:** ![ghsvilela](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/g/a4c791/32.png) [@ghsvilela](https://forum.gl-inet.com/u/ghsvilela)\
**Post date:** [November 11, 2024, 1:41pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/10 "2024-11-11T13:41:13Z")

</div>

I was able to make this work, I wrote a guide, here is the doc [Setup TailScale on GL-SFT1200 (Traffic from another exit node)](https://docs.google.com/document/d/e/2PACX-1vQDYxqF43ty91F8nbpam9W3y54y9yXOMRPuX1J1yfmxiZTKfhiqNTVn9SMxldfx_WaKHSUxduMPIXJJ/pub)

Let me know if anyone has issues accessing it.

I'm still trying to see ways to improve memory usage because sometimes tailscale process gets killed due to out of memory.

---

<div class="post-metadata">

**Author:** ![ghsvilela](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/g/a4c791/32.png) [@ghsvilela](https://forum.gl-inet.com/u/ghsvilela)\
**Post date:** [November 12, 2024, 9:07pm UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/11 "2024-11-12T21:07:15Z")

</div>

Adding a flash drive as memory swap made things so much better, almost a day now without any issues, just had to restart the router once, speeds are not great but for my use case works fine, for better results of course a better router is ideal but I'm pretty impressed with this one, I was not having too much hope to be able to run tailscale just fine as it is now since is not officially supported. I'm going to add this part to add swap memory to the document as well.

---

<div class="post-metadata">

**Author:** ![hohoho](https://forum-assets.gl-inet.com/letter_avatar_proxy/v4/letter/h/aeb1de/32.png) [@hohoho](https://forum.gl-inet.com/u/hohoho)\
**Post date:** [May 26, 2025, 1:53am UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/12 "2025-05-26T01:53:40Z")

</div>

Has anybody tried adjusting the OOM setting or even stop OOM completely?

---

<div class="post-metadata">

**Author:** ![bruce](https://forum-assets.gl-inet.com/user_avatar/forum.gl-inet.com/bruce/32/35649_2.png) [@bruce](https://forum.gl-inet.com/u/bruce)\
**Post date:** [November 5, 2025, 9:58am UTC](https://forum.gl-inet.com/t/tutorial-tailscale-on-gl-sf1200-gl-sft1200-opal/31376/13 "2025-11-05T09:58:13Z")

</div>


