doona
Route your first connection
Demo
English

Route your first connection

Continue from Quick start, with honk running and your administrator signed in. You need a working HTTP or HTTPS subscription URL and shell access to the gateway. This exercise sends example.com through a new group named proxy and leaves other traffic direct. Use harbor for the subscription name.

1. Add the subscription

Open Nodes and select Add subscription. Enter harbor in Name and your provider's URL in Subscription URL, then select Add. doona writes the declaration and requests a refresh.

Check that the success notice reports nodes and that selecting harbor lists its nodes. If the declaration was saved but the fetch failed, use Update harbor on its card after resolving the reported error. Continue only when the subscription has proxy nodes.

If a control is disabled, check node and subscription requirements or refresh requirements.

2. Create the group

Open Policies and select New group. Enter proxy in Group name. Set Selection policy to Fastest on average. In Subscriptions, select harbor and check Matching nodes before selecting Create.

The proxy card must appear with the subscription's members. Expand it to inspect the selected member and its latency or health status. Do not continue with an empty group. For disabled controls, see group creation and editing requirements.

3. Send the test domain through the group

Open Rules → Routing rules. Select Advanced if the view switch appears, then Add rule.

Field Value
Condition form Select
Match by Full domain
Values example.com
Outbound proxy
Insert Last, before the fallback

Select Add rule in the dialog. This writes and reloads immediately. Check the notice New rule is in effect and the new rule:

domain(full: example.com) -> proxy

Keep fallback: direct. If adding is disabled, see routing rule requirements.

4. Define a DNS upstream

Quick start has no DNS block. Open Configuration → Config files, select /etc/honk/config.dae in Config file, and append the following block after the existing sections. Keep the subscription, group and routing rule you just created.

# Send selected DNS requests through the proxy group.
dns {
    # Use a numeric server address to avoid bootstrapping its hostname.
    upstream {
        remote_dns: 'https://1.1.1.1/dns-query' -> proxy
    }
    # Keep other requests at their original destination.
    routing {
        request {
            fallback: asis
        }
    }
}

Select Apply. Wait for the notice that the file was written and the configuration reloaded. Reopen the file and check that remote_dns is present. If the editor or Apply is disabled, see configuration write requirements.

5. Add the DNS rule and apply it

Open Rules → DNS rules. In Request rules, select Add rule. Set Match by to Full domain, enter example.com in Values, choose remote_dns in Action, and set Insert to Last, before the fallback.

Select Add rule to write and reload. Check New rule is in effect and the request rule:

qname(full: example.com) -> remote_dns

You have now applied both rules. The routing rule chooses the traffic's group; the DNS rule chooses the resolver whose requests use that group. Each save above applies separately. If adding is disabled, see DNS rule requirements.

6. Verify the rule with Trace simulation

On Rules, open Trace simulation. Set Network protocol to TCP, Domain to example.com, and Destination port to 443. Leave Destination IP empty, choose No resolution (none) in Resolution mode, and select Run trace.

The result must match your domain rule and show proxy as the outbound, with a node from harbor in the node chain. Repeat with example.net: its outbound must be direct. Trace simulates rule evaluation; it does not open a connection or prove that the proxy can reach the website. For disabled controls, see routing trace requirements.

7. Observe a real connection

Open Connections before making the request. On the gateway, run:

curl --http1.1 --limit-rate 32 https://example.com/ -o /dev/null

While it transfers, look for example.com on Connections and open its row. Check that the chain uses proxy and one of harbor's nodes. Short connections can finish before you inspect them; repeat the request if necessary. A successful transfer confirms that the route carries real traffic. For an unavailable page, see connection requirements.

Proxied traffic is handled in userspace and appears in Connections. Direct traffic is forwarded by the kernel and does not appear there. Use Trace to inspect the direct fallback, and the configuration reference for the complete file example.

doona

doona documentation

English
doona documentationFor a direct-only first run, follow Quick start. Quick startStart the standard edition of doona with a direct-only honk configuration, sign in, and verify traffic from the gateway itself. Standard edition and doona liteThe standard edition manages configuration and observes traffic. Requirements Install on Debian or UbuntuInstall doona from the doona-web .deb package and honk-core from the same release on Debian, Ubuntu or another APT-based system. Install on Fedora or RHELInstall doona from its .rpm package and honk-core from the same release on Fedora, RHEL or another DNF-based system. Install on Arch LinuxInstall doona from its .pkg.tar.zst package and honk-core from the same release on Arch Linux or another pacman-based system. Install on GentooInstall doona with Portage from the repository's ebuild in a local ebuild repository, and honk-core from the same release. Install on OpenWrtInstall doona from a release package or archive and honk-core from the same release on OpenWrt 25.12. Install on other systemsInstall doona and honk-core from release archives on an x86_64 or aarch64 Linux system that meets the kernel requirements below. Installation detailsInstall honk, write its configuration, then install doona and start honk. Minimal configurationThis page writes the smallest honk configuration that starts honk and serves doona, then checks it by starting honk by hand. Service managementThis page runs honk as a systemd or OpenWrt procd service: it creates the service once, then lists the commands that start, stop, restart and reload honk and read its log. Route your first connectionContinue from Quick start, with honk running and your administrator signed in. First sign-inThis page opens doona in a browser, creates the administrator account and checks that doona shows the running honk. Interface tourUse the navigation to open a page, the top bar to search or refresh, and the page tabs to change views. Watching trafficUse Activity and System status to read engine health, and Connections, Routing log and DNS to inspect traffic. Routing, nodes and rulesPolicies manages group selection and membership. Config and settingsConfiguration reads, validates and applies honk's configuration files. Common tasksThis page covers the standard edition; for doona lite, see doona lite. FeaturesFor each feature’s prerequisites and disabled-action explanations, see Feature requirements. doona litedoona lite edits honk configuration through a smaller interface for beginners. Connect doona liteConnect doona lite to the honk native API, or open the demo without a backend. Common tasks in doona liteUse doona lite to import resources and edit honk configuration. ConfigurationUse this reference for honk's DAE settings exposed by doona, their defaults, and their application paths. What doona can changedoona changes configuration sources, runtime state, persistent geodata settings, and browser preferences through different controls. Feature requirementsFind your standard-edition feature in the table, then use its section to check prerequisites and enable it. Troubleshooting DevelopmentRead CONTRIBUTING.md before opening a pull request.