Posts by Peterc

    Control D Overview for Streaming

    Here is an overview of Control D and why it is particularly good for streaming.

    What is Control D?

    Control D is a modern, customizable DNS service (like a next-gen alternative to Cloudflare's 1.1.1.1 or Google's 8.8.8.8). But unlike basic DNS, it acts as a "smart router" for your internet traffic.

    Think of it as a hybrid between a standard DNS and a VPN:

    • DNS: It translates website names (like Netflix.com) into IP addresses.
    • Proxy: Unlike normal DNS, Control D can redirect those requests through its global proxy network.

    For streaming, this means it can make a streaming service think you are in the US, Canada, the UK, or Japan, even if you are not, without the heavy overhead of a traditional VPN.

    Why Control D is Good for Streaming

    Here are the 4 main advantages over traditional VPNs (like NordVPN, ExpressVPN) or Smart DNS proxies:

    FeatureTraditional VPNControl D
    SpeedSlower (encrypts all traffic)Much faster (no encryption overhead)
    Geo-UnblockingWorks wellWorks extremely well (bypasses VPN blocks)
    Device SetupRequires app install on every deviceWorks on any device (via DNS, no app needed)
    Selective RoutingAll or nothing (whole device is VPN'd)Per-service control (only Netflix is proxied)

    1. Bypasses "VPN Blocked" Errors

    Streaming services (Netflix, Hulu, Disney+, BBC iPlayer) actively block known VPN IP addresses. Because Control D is a DNS service (not a traditional VPN IP pool), it is much harder for these services to detect and block. You rarely see the dreaded "You seem to be using an unblocker or proxy" error.

    2. Faster Streaming (No Speed Loss)

    VPNs encrypt all your internet traffic, which slows down your connection. Control D does not encrypt your video stream. It simply changes the route. Once the stream starts, your local ISP handles the video directly. Result:

    • Lower latency (better for live sports)
    • Higher bitrates (no buffering on 4K HDR)

    3. Per-Service Control (Split Routing)

    This is the killer feature. With a VPN, if you connect to the US, everything (Google, your bank, local news) thinks you are in the US. With Control D, you can set rules like:

    • netflix.comUSA Proxy
    • bbc.co.ukUK Proxy
    • amazon.comNo Proxy (use local version)
    • youtube.comBlock Ads (another feature)

    Your banking app and local weather always see your real location, while only your streaming services see the proxy location.

    4. Works on Any Device

    • Smart TVs: No VPN apps for LG or Samsung WebOS? Just change the DNS settings to Control D.
    • Apple TV / Roku: Same thing. Impossible to install a VPN, trivial to change DNS.
    • Routers: Change DNS once, and every device in your house can unblock global streaming catalogs.

    The Catch (What you need to know)

    • No Encryption: Because it doesn't encrypt your traffic, it won't hide your streaming activity from your ISP (only that you are connecting to Control D). Great for unblocking content, not for privacy if you are pirating.
    • Setup Complexity: While easy, you do need to log into a web dashboard to "activate" regions. It isn't as simple as clicking a "Connect" button in an app.
    • Not all services work 100%: Very stubborn services (like some live sports on ESPN+) can occasionally break, but the Control D team is very aggressive about fixing them.

    Verdict: Who is it for?

    Control D is the best tool for streaming if:

    • You own a Smart TV, Apple TV, or gaming console (where VPNs don't exist).
    • You hate losing 40% of your internet speed to a VPN.
    • You want to watch US Hulu from Europe or UK iPlayer from Australia.
    • You want a single solution for your whole family (set it on your router).

    Stick with a VPN if:

    • You need to hide all your traffic from your ISP for privacy/piracy reasons.
    • You need to change your location for every app (not just streaming).

    Bottom Line: For pure streaming speed and reliability, Control D is currently superior to almost every VPN on the market. It's what Smart DNS promised to be a decade ago, but actually works.

    Installing Control D natively on LibreELEC

    This guide installs the Control D binary as a local DNS proxy on LibreELEC, ideal for unblocking streaming services without a VPN.

    Remember to BACKUP before you try to install Control D. Regard: Peter

    1. Download the binary

    SSH into your LibreELEC device and run:

    Code
    mkdir -p /storage/ctrld && cd /storage/ctrld
    curl -L -o ctrld https://dl.controld.com/linux-arm64/ctrld
    chmod +x ctrld
    Quote

    ARM64 (Raspberry Pi 4/5, Rockchip, Amlogic). For x86_64 (Intel NUC, old PC) use:
    curl -L -o ctrld https://dl.controld.com/linux-amd64/ctrld

    Verify the binary:

    Code
    /storage/ctrld/ctrld --version

    Should print ctrld version v1.5.1 (or similar).


    2. Get your Control D Resolver ID

    1. Log into Control D dashboard.
    2. Profile → DNS over HTTPS → copy Resolver ID (e.g., abcdef123456).
    3. Replace YOUR_RESOLVER_ID in the commands below.

    3. Generate the configuration (first time only)

    Code
    /storage/ctrld/ctrld run --cd YOUR_RESOLVER_ID --config /storage/ctrld/ctrld.toml --skip_self_checks

    Wait a few seconds, then press Ctrl+C. This creates a full config file with captive portal bypass rules.

    Verify the config contains your ID:

    Code
    grep endpoint /storage/ctrld/ctrld.toml

    Expected: endpoint = 'https://dns.controld.com/YOUR_RESOLVER_ID'

    Quote

    Important: After this step, never use --cd again – the config file already has your ID.


    4. Create the autostart script (runs on boot)

    Code
    nano /storage/.config/autostart.sh

    Paste exactly (without --cd):

    Bash
    #!/bin/sh
    (
      sleep 20
      /storage/ctrld/ctrld run --config /storage/ctrld/ctrld.toml --skip_self_checks > /storage/ctrld/boot.log 2>&1
    ) &

    Save (Ctrl+O, Enter, Ctrl+X), then:

    Code
    chmod +x /storage/.config/autostart.sh

    5. Start Control D manually (test before reboot)

    Code
    /storage/ctrld/ctrld run --config /storage/ctrld/ctrld.toml &

    Check it’s listening on port 53:

    Code
    netstat -tuln | grep :53

    You should see :::53 or 0.0.0.0:53 in LISTEN state.

    If you have problems, run with debug output (-vv) – press Ctrl+C to stop.


    6. Point LibreELEC’s DNS to localhost

    Find your active network service:

    Code
    connmanctl services

    Look for AO or AR (e.g., ethernet_2ccf678483b1_cable). Then set DNS:

    Code
    connmanctl config YOUR_SERVICE_NAME --nameservers 127.0.0.1 1.1.1.1

    Example:

    Code
    connmanctl config ethernet_2ccf678483b1_cable --nameservers 127.0.0.1 1.1.1.1
    Code
    c

    7. Reboot (required for DNS change to fully apply)

    Code
    reboot

    After reboot, SSH back in and verify:

    Code
    pgrep -a ctrld

    Should show a running process (e.g., 1179 /storage/ctrld/ctrld).

    Test DNS:

    Code
    nslookup google.com

    First line must show Server: 127.0.0.1.

    Test unblocking:

    Code
    nslookup verify.controld.com

    Should return a proxy IP like 147.185.34.1.


    Troubleshooting

    ProblemFix
    nslookup shows 127.0.0.1 but verify.controld.com failsControl D not running – check pgrep -a ctrld and /storage/ctrld/boot.log.
    pgrep shows nothing after rebootAutostart script not executable: chmod +x /storage/.config/autostart.sh. Also check boot.log.
    “address already in use” when running manuallyControl D is already running – that’s fine. Only one instance can bind to port 53.
    “Invalid configuration code” errorYou used --cd with --config – remove --cd from command and autostart script.
    DNS reverts after rebootSet static IP via LibreELEC GUI, or re-run the connmanctl config command and reboot.

    Control D - Help commands


    /storage/ctrld/ctrld --help

    Uninstall / revert to normal DNS


    Revert to normal DNS:

    connmanctl config YOUR_SERVICE_NAME --nameservers auto

    Uninstall:

    pkill ctrld
    rm -rf /storage/ctrld
    rm /storage/.config/autostart.sh
    reboot


    Notes

    • Works on LibreELEC 10+ (Kodi 19+).
    • Low RAM/CPU usage.
    • Files in /storage survive system updates.
    • Reboot is essential after connmanctl DNS change.


    • pgrep -a ctrld shows PID 1178 running → Control D is active.
    • nslookup google.com shows Server: 127.0.0.1 → system DNS is using localhost.
    • nslookup verify.controld.com returns 147.185.34.1 → Control D proxy is working.
    • The “address already in use” error when you ran -vv manually is simply because you already had Control D
    • running (PID 1178). That’s expected – you can’t have two instances on port 53.
    • boot.log is empty because --skip_self_checks suppresses most logging unless there’s an error. That’s fine.
    • Enjoy your unblocked LibreELEC streaming!

    Hello all,

    For last few months I been using Tailscale as a docker image on my:

    Raspberry pi 4 - 2gig memory - LibreELEC (official): 12.0.1 (RPi4.aarch64)

    So I have written a bash script to install the Tailscale docker image and update the Tailscale image when needed with Watchtower.


    Regards: peter


    Remember to backup first before setting up Tailscale docker image !!


    Install LibreELEC Docker app before you run the tailscale.sh bash script to install Tailscale docker image.

    Add-ons / Install from repository / LibreELEC Add-ons / Services / Docker

    ## Below are the commands to set up the files that are needed.

    touch /storage/.config/tailscale.sh

    chmod +x /storage/.config/tailscale.sh

    ## Copy & Paste the lines below to: tailscale.sh

    To install the Tailscale docker image run the command shown below from the directory .config

    Code
    sh tailscale.sh

    When Tailscale image is installed. You can check to see if it is up and running with the command shown below:

    Code
    docker stats

    To setup Tailscale execute the command shown below to get the Tailscale login url

    Code
    docker exec docker-tailscaled tailscale up

    This will give you a url so you can log into your Tailscale account and connect your LibreELEC device to your tailnet.

    #

    Before you set a Tailscale exit node, use the command below:

    Code
    docker exec docker-tailscaled tailscale set --exit-node-allow-lan-access=true

    The command above will allow you to have ssh access to your LibreELEC from your local network.

    ## To auto update the Tailscale image I use autostart.sh script to run the tailscale.sh script which will check if the Tailscale image needs updating. If so Watchtower will update the Tailscale image.

    touch /storage/.config/autostart.sh

    chmod +x /storage/.config/autostart.sh

    ## Copy & Paste the lines below to: autostart.sh

    Bash
    #!/bin/sh
     (
     sleep 20
     /storage/.config/tailscale.sh
     )&


    The file below tailscale.commands is just handy notes to help setup Tailscale.

    touch /storage/.config/tailscale.commands

    ## Copy & Paste the lines below to: tailscale.commands

    Hello toby2106


    Bellow is a copy and paste of my tailscale config file from: /storage/.config/system.d The top half of the tailscaled.service file is the system.d config for tailscale and the bottom half are notes to help remind me of how to setup tailscale.

    Hope the file help you to set up and runing tailscale !

    Reminder: use the command: ./tailscale set --exit-node-allow-lan-access=true

    Before you set the exit node so you do not get lock out from ssh to your raspi.

    Do a LibreELEC backup to be safe !!

    Regards: peter

    File name: tailscaled.service

    Hello All,

    I have just upgraded to LibreELEC (official): 11.0.1 Unfortunately now the rss audio feeds have stopped working.

    Below is a copy and paste of what I can see as error in the kodi.log

    My ip is: *.*.78.83

    Regards: peter

    2023-04-05 18:59:49.889 T:1115 error <general>: CCurlFile::Open - <http://feeds.kodi.tv/latest_xbmc_addons> Failed with code 404:

    2023-04-05 18:59:50.154 T:1078 info <general>: ### Kodi Playback Resumer 2.0.4 - Starting...

    2023-04-05 18:59:50.154 T:1078 info <general>: ### Kodi Playback Resumer 2.0.4 - Kodi Version: 20.1 (20.1.0) Git:20.1-Nexus

    2023-04-05 18:59:50.154 T:1078 info <general>: ### Kodi Playback Resumer 2.0.4 - Addon arguments: ['']

    2023-04-05 18:59:55.561 T:1115 error <general>: CCurlFile::Open - <http://feeds.kodi.tv/latest_xbmc_addons> Failed with code 404:

    2023-04-05 18:59:55.880 T:1081 info <general>: SETTINGS: set_keyboard_layout # uk

    2023-04-05 18:59:55.881 T:1081 info <general>: SETTINGS: set_keyboard_layout # loadkmap < `ls -1 /usr/lib/keymaps/*/uk.bmap`

    2023-04-05 19:00:00.565 T:1081 info <general>: SETTINGS: __init__ # updateThread Started

    2023-04-05 19:00:00.567 T:1081 info <general>: SETTINGS: set_auto_update # auto

    2023-04-05 19:00:00.719 T:1162 info <general>: SETTINGS: run # Waiting

    2023-04-05 19:00:00.993 T:1115 error <general>: CCurlFile::Open - <http://feeds.kodi.tv/latest_xbmc_addons> Failed with code 404:

    2023-04-05 19:00:00.993 T:1115 error <general>: Unable to obtain rss feed: http://feeds.kodi.tv/latest_xbmc_addons

    2023-04-05 19:00:01.654 T:1115 error <general>: CCurlFile::Open - <http://feeds.kodi.tv/updated_xbmc_addons> Failed with code 404:

    2023-04-05 19:00:12.701 T:1115 info <general>: Skipped 1 duplicate messages..

    2023-04-05 19:00:12.701 T:1115 error <general>: CCurlFile::Open - <http://feeds.kodi.tv/updated_xbmc_addons> Failed with code 404:

    2023-04-05 19:00:12.701 T:1115 error <general>: Unable to obtain rss feed: http://feeds.kodi.tv/updated_xbmc_addons

    2023-04-05 19:00:34.162 T:1051 info <general>: Loading skin file: /storage/.kodi/addons/script.radioparadise/resources/skins/Default/720p/script-radioparadise.xml, load type: LOAD_ON_GUI_INIT

    The problem seems to have sorted it self out. The rss feeds are working now.

    Regards: peter & thanks