Skip to content

Releases

DEYROUTE 0.3.3-edge.93 (development build)

Choose a tag to compare

@github-actions github-actions released this 30 Oct 15:05

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.3-edge.93/install.sh) --version 0.3.3-edge.93

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from 59bc710 (Linux amd64 and arm64, static binary).

branch: dev

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 30 Oct 15:08

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/latest/download/install.sh)

This release exactly: bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.2/install.sh) --version 0.3.2

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new in 0.3.2

Added — Telegram in the security audit

  • deyroute security audit has a new check telegram: a warning while
    Telegram notifications are on, because every message hands the bot token
    to an online node; ok when they are off. With Telegram on, the audit is
    no longer clean (DR-27).

Changed — a neutral name for the internal CA

  • A new internal CA (at setup or security rotate-ca) is named
    <hub name> CA and has no organization; before, it was
    DEYROUTE CA <hub name> with organization DEYROUTE. The hub sends the
    CA with its certificate to every client of the control port. Existing
    CAs keep their name until rotate-ca; nothing breaks either way.
    Hub and node certificates keep the organization DEYROUTE for 0.3.x
    peers; this release already accepts them without it, so a later minor
    release can drop it (DR-26).

Added — lab scenario for a node replacement

  • Lab S39: the operator replaces a tunnel's primary node (join the new
    node, tunnel edit --node NEW --yes, node remove OLD --yes). The
    tunnel carries traffic through the new node 7.2 s after the edit, the old
    node runs no tunnel unit and leaves @nodes (DR-23).

Added — the client IP on frp rungs

  • With a tunnel's advanced.proxy_protocol: true, every frp/* rung now
    sends a PROXY protocol v1 line before the data of each TCP port, so the
    service on the node sees the user's address (client IP preserved).
    UDP ports stay masked. The service must accept PROXY protocol. The
    node's echo, probe echo and speed helpers skip the line; a node of an
    older release (no capability proxy-header) gets the rung without it
    (DR-21).

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

DEYROUTE 0.3.2-edge.85 (development build)

Choose a tag to compare

@github-actions github-actions released this 29 Oct 23:11

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.2-edge.85/install.sh) --version 0.3.2-edge.85

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from 9985467 (Linux amd64 and arm64, static binary).

branch: dev

v0.3.1-edge.65

Choose a tag to compare

@github-actions github-actions released this 29 Oct 12:47

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.1-edge.65/install.sh) --version 0.3.1-edge.65

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from 0a92ecb (Linux amd64 and arm64, static binary).

branch: main

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 29 Oct 23:11

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/latest/download/install.sh)

This release exactly: bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.1/install.sh) --version 0.3.1

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new in 0.3.1

Added

  • deyroute setup --public-ip A.B.C.D and --public-ip6 X store exactly
    that hub address (canonical form) and skip the wizard's IP question;
    --allow-private-ip accepts a private, CGNAT or loopback address for test
    labs (never a link-local one). A refused address is DEY-C013 before any
    setup step; the three flags are refused with --role node and on
    deyroute join. setup --json adds public_ip_source (flag,
    detected or wizard). Without the flag nothing changes: a private
    detection still only warns (DEY-I021), so automation on a NAT or
    floating-IP server must pass --public-ip (docs/en/install.md, lab S01,
    DR-07).
  • deyroute join --sysctl off|balanced|auto (default balanced; when
    given, the kernel question is not asked; off writes nothing under
    /etc/sysctl.d) and --reserve-ports LIST (ports and ranges, the flag
    repeats, at most 64 entries, at least 1024 ephemeral ports left free;
    with off it is DEY-C013). join --json adds reserved_ports (never
    null). The entries are kept in /var/lib/deyroute/reserved-ports and
    reserved again by every profile the node applies except off
    (docs/en/join.md, docs/en/tuning.md, lab S23, DR-09).
  • A node joined with --sysctl off, or whose owner answered no to the
    kernel question, refuses the hub's kernel tuning (optimize apply and
    optimize auto) with the new DEY-N052; a revert to off still runs.
    The switch is the root-only marker /var/lib/deyroute/hub-tuning-off: to
    lift it, remove it on the node and re-apply the hub's profile as
    deyroute optimize status shows it. Nodes joined with an earlier version
    keep following the hub (QUESTIONS.md C.65, DR-09).

Changed

  • The balanced and aggressive profiles a node applies, at join or
    pushed by the hub, now also reserve the backend control range
    30000-31999 in net.ipv4.ip_local_reserved_ports, as auto already
    did (a set union: existing reservations stay). Migration: on the hub,
    re-apply the profile deyroute optimize status shows (deyroute optimize auto on an auto hub, otherwise deyroute optimize apply --profile <that profile>) so the online nodes reserve the range now (QUESTIONS.md C.64,
    DR-09).

Fixed

  • deyroute setup --help said --yes applies the balanced kernel profile;
    it applies the automatic profile, and the help now says so (deyroute optimize status shows it). The hidden join --yes keeps its own text: a
    join applies balanced (docs/en/install.md, DR-19).
  • The sysctl backup recorded the live union of
    net.ipv4.ip_local_reserved_ports as deyroute's value, so a later apply
    followed by a revert or uninstall also removed a port another program
    had reserved in between. It now records only the entries deyroute
    requested; the kernel write is still the union (DR-09).
  • deyroute optimize check no longer reports the reserved ports as drift
    when another program adds or removes its own reservation; only a port
    deyroute wants that is missing counts (DR-09).

Added — the firewall table comes back by itself

  • The hub and every node now check their table inet deyroute every 60
    seconds and apply it again when it is missing or changed (nft flush ruleset by an admin or a provider script, ufw reload on some systems,
    another tool). The new key security.firewall_reassert_s sets the
    interval (10-3600 seconds, 0 = off; absent = 60). A node checks only
    while it has NAT rules (WireGuard/AmneziaWG rungs, Hysteria2 port
    hopping) and no longer keeps a flushed table gone until its rules
    change. Nothing is checked with security.firewall_managed: false. The
    hub records the warning event firewall_reapplied (reason missing or
    drift, at most once per 10 minutes per reason; Telegram sends it when
    hub.notify.telegram.events names it); a node writes the same warning
    to node.log (docs/en/security.md, docs/en/monitoring.md, lab S37).
  • Releases before 0.3.1 do not know security.firewall_reassert_s or
    firewall_reapplied in hub.notify.telegram.events: while either is
    set, deyroute update --rollback and update --version to such a
    release are refused (DEY-S011), and a node refuses a self.update to
    such a release while its own config.yaml sets the key.

Changed — unknown control-port sources are limited per address

  • A node whose public IP changed reconnects through the admission for
    unknown sources. That admission was one global bucket of 6 new
    connections per minute, which a single scanner could use up. Each
    source address now has its own budget of 3 per minute (burst 3; the
    dynamic sets @ctl_unknown4/@ctl_unknown6, 10-minute buckets) and all
    unknown sources together at most 30 per minute. New keys
    security.unknown_control_rate_per_source (default 3/minute) and
    security.unknown_control_rate (default 30/minute) take nft rates.
    When nft or the kernel refuses the per-source form, the hub applies the
    earlier single rule at unknown_control_rate, keeps it until it
    restarts and logs nft refused the per-source limit of the control port once (docs/en/security.md, lab S27).
  • Migration: nothing to do; the hub applies the new rules at its next
    start. While either new key is set, a rollback below 0.3.1 is refused
    (DEY-S011).

Fixed — port check behind a per-source limit

  • deyroute port check read an nftables rule of another firewall that
    adds the source to a set with a per-element limit (add @set { ip saddr limit rate … }, meter) as never matching, so a port behind it was
    reported blocked; it now counts as a rate-limited accept, like
    limit rate … accept.

More in the full changelog.

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

DEYROUTE 0.3.1-edge.83 (development build)

Choose a tag to compare

@github-actions github-actions released this 29 Oct 22:18

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.1-edge.83/install.sh) --version 0.3.1-edge.83

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Added

  • deyroute setup --public-ip A.B.C.D and --public-ip6 X store exactly
    that hub address (canonical form) and skip the wizard's IP question;
    --allow-private-ip accepts a private, CGNAT or loopback address for test
    labs (never a link-local one). A refused address is DEY-C013 before any
    setup step; the three flags are refused with --role node and on
    deyroute join. setup --json adds public_ip_source (flag,
    detected or wizard). Without the flag nothing changes: a private
    detection still only warns (DEY-I021), so automation on a NAT or
    floating-IP server must pass --public-ip (docs/en/install.md, lab S01,
    DR-07).
  • deyroute join --sysctl off|balanced|auto (default balanced; when
    given, the kernel question is not asked; off writes nothing under
    /etc/sysctl.d) and --reserve-ports LIST (ports and ranges, the flag
    repeats, at most 64 entries, at least 1024 ephemeral ports left free;
    with off it is DEY-C013). join --json adds reserved_ports (never
    null). The entries are kept in /var/lib/deyroute/reserved-ports and
    reserved again by every profile the node applies except off
    (docs/en/join.md, docs/en/tuning.md, lab S23, DR-09).
  • A node joined with --sysctl off, or whose owner answered no to the
    kernel question, refuses the hub's kernel tuning (optimize apply and
    optimize auto) with the new DEY-N052; a revert to off still runs.
    The switch is the root-only marker /var/lib/deyroute/hub-tuning-off: to
    lift it, remove it on the node and re-apply the hub's profile as
    deyroute optimize status shows it. Nodes joined with an earlier version
    keep following the hub (QUESTIONS.md C.65, DR-09).

Changed

  • The balanced and aggressive profiles a node applies, at join or
    pushed by the hub, now also reserve the backend control range
    30000-31999 in net.ipv4.ip_local_reserved_ports, as auto already
    did (a set union: existing reservations stay). Migration: on the hub,
    re-apply the profile deyroute optimize status shows (deyroute optimize auto on an auto hub, otherwise deyroute optimize apply --profile <that profile>) so the online nodes reserve the range now (QUESTIONS.md C.64,
    DR-09).

Fixed

  • deyroute setup --help said --yes applies the balanced kernel profile;
    it applies the automatic profile, and the help now says so (deyroute optimize status shows it). The hidden join --yes keeps its own text: a
    join applies balanced (docs/en/install.md, DR-19).
  • The sysctl backup recorded the live union of
    net.ipv4.ip_local_reserved_ports as deyroute's value, so a later apply
    followed by a revert or uninstall also removed a port another program
    had reserved in between. It now records only the entries deyroute
    requested; the kernel write is still the union (DR-09).
  • deyroute optimize check no longer reports the reserved ports as drift
    when another program adds or removes its own reservation; only a port
    deyroute wants that is missing counts (DR-09).

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from 98b4cf2 (Linux amd64 and arm64, static binary).

branch: dev

DEYROUTE 0.3.1-edge.66 (development build)

Choose a tag to compare

@github-actions github-actions released this 29 Oct 12:57

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.1-edge.66/install.sh) --version 0.3.1-edge.66

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Security — tunnel logs

  • A directory found at a name the rotation or the preparation of a tunnel
    log writes is renamed <name>.removed-<16 hex digits> at once and
    deleted in the background, at most 10000 entries per directory and
    minute, so neither the start of a transport nor the start of a service
    waits for it.
  • The hub and the node prepare a tunnel log only in a safe
    /var/log/deyroute/tunnels: root's own directory with the sticky bit,
    or closed to its group and others. At a link, in a directory of another
    user or in a group-writable one without the sticky bit, the transport is
    not started and the hub or node answers DEY-X022, whose why names the
    reason; the services log cannot make the tunnel log directory sticky
    for such a directory. Fix:
    chown root:deyroute /var/log/deyroute/tunnels && chmod 1770 /var/log/deyroute/tunnels
    (the services make a root-owned directory sticky themselves when they
    start).
  • deyroute logs and the log lines shown with a failed start (DEY-B003)
    no longer read a file with a second hard link at a log name
    (docs/en/security.md, lab S36, QUESTIONS.md C.56).

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from 4ba6810 (Linux amd64 and arm64, static binary).

branch: dev

DEYROUTE 0.3.0-edge.62

Choose a tag to compare

@github-actions github-actions released this 29 Oct 11:01

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/latest/download/install.sh)

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from c47dde4 (Linux amd64 and arm64, static binary).

branch: main

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 17:51

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/latest/download/install.sh)

This release exactly: bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.0/install.sh) --version 0.3.0

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new in 0.3.0

Security — tunnel logs

  • The hub and the node rotate the tunnel logs in /var/log/deyroute/tunnels
    as root. The rotation no longer follows symbolic links and never writes
    through a file name that the backends' user deyroute can create first:
    a *.log that is a link, not a regular file or has a second hard link is
    skipped, the copy is staged in the root-only /var/lib/deyroute/tmp
    (0700, created when needed), and anything else found at a name the
    rotation writes is removed. Each case is logged once per file and reason
    as the warning tunnel log rotation refused in hub.log or node.log
    (docs/en/security.md, lab S36).
  • /var/log/deyroute/tunnels is created as root:deyroute with mode 1770
    (sticky) by the installer, deyroute setup and the services, which
    created a missing one as root:root 0750 before. The backends' user can
    still add files there but can no longer remove or rename root's live and
    rotated logs (QUESTIONS.md C.48).
  • Migration: on a server installed before, deyroute update is enough.
    The hub and node services add the sticky bit to an existing
    /var/log/deyroute/tunnels that belongs to root when they start (they
    never remove a bit, and log tunnel log directory made sticky). Running
    the installer again (it repairs and keeps the configuration) or
    chown root:deyroute /var/log/deyroute/tunnels && chmod 1770 /var/log/deyroute/tunnels
    also works. Check it with stat -c '%a %U:%G' /var/log/deyroute/tunnels
    (1770 root:deyroute).
  • Before the hub or a node starts a transport, and for every tunnel when
    the service starts, <tunnel>.log is made root's regular file with a
    single link: systemd opens it as root for the transport's output.
    Anything else found at that name is removed, an empty log (0644) is
    created, and the warning tunnel log replaced is logged once per file
    and reason (symlink, not_regular, hardlink or owner) in
    hub.log or node.log. To free space, empty a live tunnel log
    (: > <tunnel>.log); do not delete it (docs/en/security.md, lab S36,
    QUESTIONS.md C.56 and C.57).
  • deyroute logs and the log lines shown with a failed start
    (DEY-B003) read a tunnel log only when it is a regular file. They no
    longer follow a link or wait on a FIFO at a log name: such a name shows
    no lines on the hub, and a node answers DEY-X022.
  • A directory found at a name the rotation or the preparation of a tunnel
    log writes is renamed <name>.removed-<16 hex digits> at once and
    deleted in the background, at most 10000 entries per directory and
    minute, so neither the start of a transport nor the start of a service
    waits for it.
  • The hub and the node prepare a tunnel log only in a safe
    /var/log/deyroute/tunnels: root's own directory with the sticky bit,
    or closed to its group and others. At a link, in a directory of another
    user or in a group-writable one without the sticky bit, the transport is
    not started and the hub or node answers DEY-X022, whose why names the
    reason; the services log cannot make the tunnel log directory sticky
    for such a directory. Fix:
    chown root:deyroute /var/log/deyroute/tunnels && chmod 1770 /var/log/deyroute/tunnels
    (the services make a root-owned directory sticky themselves when they
    start).
  • deyroute logs and the log lines shown with a failed start (DEY-B003)
    no longer read a file with a second hard link at a log name
    (docs/en/security.md, lab S36, QUESTIONS.md C.56).

Security — per-backend privilege allowlist

  • A node now checks every backend unit the hub sends against a list of
    privileges built into its binary. Only wireguard and awg run as root,
    with CAP_NET_ADMIN and AF_NETLINK. wireguard may relax
    ProtectKernelTunables, and awg may also write to /run/amneziawg.
    rathole may relax MemoryDenyWriteExecute. The node side of
    direct/haproxy may open AF_NETLINK. Every other backend runs as user
    deyroute with CAP_NET_BIND_SERVICE only. No backend may relax
    NoNewPrivileges or the capability bounding set, or get a writable path
    its entry does not list.
  • A unit that asks for more is refused: the node answers DEY-N050 and names
    the field. The hub checks its own units against the same list before it
    writes them (DEY-X034). In both cases only that rung is skipped, with the
    code; the other rungs keep working. Every unit DEYROUTE's own backends
    render passes the check, so a working install does not change. The list
    is in docs/en/security.md (Tunnel processes).

Security — nodes install only what a signed release proves

  • A node no longer installs whatever its hub serves. When it follows the
    hub's version, the hub passes on the signed files of its release
    (SHA256SUMS, SHA256SUMS.minisig, the archive) and the node checks
    them with the release key built into its own binary: the signature, that
    the release is exactly the announced version, the checksum of the
    archive, that the archive holds a single regular file deyroute (at most
    200 MB, nothing outside its directory), and that this binary checks
    signed updates itself (deyroute --json version says
    "signed_update": true). Anything else is refused with DEY-S001;
    nothing is installed and the node keeps its version
    (docs/en/update-uninstall.md, "How the nodes follow"; lab S19, S41).
  • A node installs a backend only in a version that a signed manifest pins:
    the version, download address and sha256 for its architecture must be
    those of the manifest built into it, or of a manifest the hub sends with
    a signature the node checks itself (the hub's override, or the manifest
    of the hub's own release when the node runs another build). Anything else
    is refused with DEY-N050 before a download. A version already installed
    exactly as pinned is kept without a manifest (QUESTIONS.md C.62;
    "Backends on the nodes"; lab S20, S21).
  • deyroute update manifest now keeps the signature as
    /etc/deyroute/backends.yaml.minisig next to the override; both are in
    backups. An override saved by an earlier build has no signature: the hub
    fetches a matching one at start and every 10 minutes, and until then its
    nodes install only the versions built into them (warning "the backend
    manifest override has no valid signature …"; fix:
    deyroute update manifest).
  • The hub keeps the signed release of its version for its nodes in
    /var/lib/deyroute/bin/<version>/: deyroute update and the installer
    (also with --local) leave it there, and a hub without it downloads it
    the first time a node needs it (through a node first). The installer
    keeps it on every server it installs, nodes included (QUESTIONS.md
    C.60). deyroute doctor lists it as "signed release kept for the
    nodes".
  • Migration: update the hub first. A node of this version refuses the
    update of a hub of an earlier build (DEY-S001, "update the hub first")
    and keeps running; nodes of earlier builds update from a new hub as
    before. After deyroute update --version or --rollback on the hub to
    an earlier build, the nodes keep their version. A hub on a development
    build has no signed release: its nodes refuse with DEY-S012.

Added — signed updates

  • DEY-S012 "Hub runs an unsigned development build".
  • node.allow_unsigned_updates in a node's config.yaml (default false,
    written only when true; for test labs only): that node takes the hub's
    binary without a signature, from a development build or from an earlier
    hub. It does not apply to backends. While it is set, the node refuses to
    install a release older than both itself and 0.3.0 (DEY-S011, every
    older 0.3.0-edge.N included) (QUESTIONS.md C.58).
  • deyroute --json version gains "test_key" (true only for a lab build
    that trusts a second, throwaway signing key; both release paths refuse to
    publish such a binary) and "signed_update": true (docs/cli-json.md).

Changed — the automatic update is off by default

  • The automatic update is now off by default (spec section 5: an update
    never runs without asking). Its switch moved from the state database,
    which no backup contains, to config.yaml as hub.auto_update: true
    (written only when on), so a backup keeps it and a restored hub has it
    again. deyroute update auto on|off sets it after an automatic backup,
    deyroute --json update auto adds "source": "config", and
    deyroute setup --auto-update on|off (default off) chooses it at
    setup. A hub that ran an earlier build records the event
    auto_update_default_off once and shows "automatic update is now off by
    default; turn it on with: deyroute update auto on" on the dashboard for 7
    days while it is off. The switch is also still written where earlier
    builds read it, so a rollback to one of them keeps it as it was.
  • Migration: a hub that relied on the old default no longer installs
    releases by itself; run deyroute update auto on once to keep that.
  • While hub.auto_update is set, deyroute update --rollback and
    deyroute update --version to a release before 0.3.0 (every
    0.3.0-edge.N included) are refused with DEY-S011; run
    deyroute update auto off first. The rollback guard now compares each
    newer config.yaml key with the first release that knows it (DEY-S011
    names both), never refuses --version to a release that is not older
    than the running one, and trusts the recorded version of
    deyroute.prev only...
Read more

DEYROUTE 0.3.0-edge.61 (development build)

Choose a tag to compare

@github-actions github-actions released this 29 Oct 11:01

Install on the hub (Iran server) — نصب روی هاب (سرور ایران):

bash <(curl -fsSL https://github.com/localroot4/DeyRoute/releases/download/v0.3.0-edge.61/install.sh) --version 0.3.0-edge.61

Already installed? Run deyroute update on the hub (the nodes follow).
قبلاً نصب کرده‌اید؟ روی هاب deyroute update بزنید (نودها خودشان دنبال می‌کنند).

What's new

Full changelog · راهنمای فارسی · English guides

Verify

SHA256SUMS is signed with minisign; the installer and deyroute update check it before anything is installed. Public key: RWQtE2Hu1KwstgupEuPAWy+J2tiIgFVTIcReWI+Qh+yGMY3s2xWpyMuO

Built from fd6c974 (Linux amd64 and arm64, static binary).

branch: dev