amneziawg-installer/cascade
Ivan Bondarev 9f8c717efc
docs: audit 2026-09, part 3 (low findings) and a wider docs guard (#314)
* docs: README test count, guest command, formal address, PPA codename check, threat model link

Audit 2026-09 low findings K-25, U-02, U-05, T-08 (README part) and the PPA codename rows: the installer checks whether the PPA has packages for the release codename and switches to noble only if it does not (install_amneziawg.sh, codename probe); checked live: resolute answers, questing does not.

* docs: install guides link targets, flag list, PPA codename check

Audit 2026-09 low findings C-09 (client management link goes to the management section), C-10 (the two QR codes link to the vpn:// section), U-04 (the long English paragraph becomes a flag list) and the PPA wording in both guides: the installer switches to noble only when the PPA has no packages for the release codename.

* docs: ADVANCED low findings, FAQ anchors, stats and diagnostic samples from code

Audit 2026-09 low findings C-11, C-12, C-13, K-13, K-14, K-15, K-16, K-17, K-18, K-19, K-20, K-21, K-22, K-23, K-24, K-26 and G-06. The stats sample is rendered with the real format_bytes and printf formats of both manage scripts in a UTF-8 locale; the diagnostic table lists the 17 sections in code order. T-Mobile is the Russian carrier (Moscow and region, per discussion #45), the tmobile_us profile name is historical. Five FAQ questions get their own anchors, identical in RU and EN (add only), and six inbound links now point at the specific question.

* docs: cascade and WARP low findings, wgcf checksum check

Audit 2026-09 low findings C-08, C-15, C-16, K-31, K-32, T-10, U-09. The client samples show what the installer issues (two DNS servers, 0.0.0.0/0 plus ::/0, which the full-tunnel generator always appends); the WARP step downloads wgcf under its release name, checks it against checksums.txt of the same release and only then renames it, checked in a throwaway container with a good and a tampered download; the security section says what that check does not cover.

* docs: signing README, support matrix, contributing and security scope

Audit 2026-09 low findings C-17 (signing/README uses scripts/sign-release.sh and verifies with the whole key via -P, from a release and from a git checkout), K-27 (Ubuntu 26.04 uses resolute from the PPA and noble only if it is missing: support matrix, CONTRIBUTING, PR template; last_verified is not advanced because only this field was rechecked), T-08 (SECURITY scope names both languages and the release pipeline, links the README section), U-07 (CONTRIBUTING lists all RU/EN pairs, qrencode and jq, and the [Unreleased] rule).

* fix(en): outdated-library warning in manage no longer cut off

Audit 2026-09 K-33: the section name sat in bare double quotes inside a double-quoted log_warn argument, so the shell split it into four words and log_msg printed the message cut off at (section How. The name now uses single quotes. New test evaluates the exact line from both scripts with a counting log_warn stub: the English one failed with argc=4 before the fix, the Russian one already passed.

* ci(docs): guard cross-file and HTML anchor links, RU/EN anchor sets, split-mode wording

Audit 2026-09 question 16. New check 16 resolves ](file.md#x) and href="...#x" links, relative to the linking file and with percent-encoded fragments decoded (check 1 only saw ](#x) inside one file); it also fails when it finds no links at all. Check 17 compares the explicit anchor sets of the ADVANCED, CASCADE and WARP-RU pairs. Check 18 keeps the two links that resolved but pointed at the wrong section (C-09, C-10) from coming back. Check 7b also catches the C-05 wording (split modes (2/3)) without flagging the legitimate split mode of --route-custom, and uses a locale-independent pattern: a Cyrillic range made grep exit 2 in the C locale, which an if reads as no match. Check 8 also scans the Q&A discussion template. Every new check is shown failing on its defect in a throwaway repository.

* docs: changelog for documentation audit part 3

* docs: review fixes for part 3

The WARP step removes a wgcf left from an earlier run and runs the new one only after the checksum check in the same && chain: checked in a container, the previous recipe ran the stale binary twice after a tampered download, the new one runs nothing. The checksum note says it catches a broken or wrong download, not a compromise of the release page. The PPA wording follows the code: the installer requests dists/<codename>/Release and switches to noble when there is no answer, including when the PPA is unreachable; no statement about what the PPA publishes. The ARM hint names the DKMS fallback log line; the stats sample keeps config order; the WARP IPv6 note gives version ranges and the regen condition; signing/README says where the key trust comes from; the remaining informal address in README is gone; CHANGELOG RU/EN aligned.

* ci(docs): guard fails loudly on what it cannot see

Review fixes for checks 8, 16-18 and the slug generator. grep without PCRE stops the script instead of letting checks 1, 16 and 17 find nothing. Check 16 rejects link forms its parser cannot see (reference-style, single-quoted or spaced href, uppercase HREF, .MD) instead of skipping them, and treats URL schemes case-insensitively. Check 17 fails on an empty anchor set or a failed diff. Check 18 is keyed on the link target, not the link text, and fails on a missing file, as does check 8. Check 7b turns a grep error into a failure. The slug generator keeps the leading hyphen GitHub keeps for headings that start with an emoji; the old test expected the trimmed form, which accepted a broken link. New tests cover every mutation from the review: seven mutants, each fails exactly one test, the unmutated copy fails none.

* ci(docs): guard closes the remaining silent paths from review

Check 7b fails on a missing file; check 16 fails when a file cannot be read or the form grep errors, rejects two more non-canonical forms (space after the parenthesis, unquoted href) and leaves external URLs alone in every form; check 18 finds the wrong target in any wrapper (](...), ](./...), href) outside code blocks. New tests: grep without -P, 7b missing file and grep error, trailing slug hyphen, the new forms and external URLs that must not fail. Eight mutants, each adds a failing test.

* ci(docs): guard closes the last review findings

Check 18 finds the wrong target with a title, a leading slash, angle brackets or percent-encoding. Code blocks: a closing fence indented up to three spaces ends the block, and an unclosed block fails instead of hiding the rest of the file. Check 16 no longer takes ?href= inside an external URL or <https://...> in a reference definition for a local link. Every new branch is covered by a test and by a mutant that makes it fail.

* ci(docs): href at line start and a path named in prose

An href that starts a line inside a multi-line tag is checked again; a path named in prose is no longer taken for the misrouted link.

* ci(docs): check 18 also sees a link target that starts its own line

A Markdown link whose destination sits on the next line is still the misrouted link. The two remaining line-start href forms get their own tests.
2026-09-26 20:17:26 +00:00
..
README.md docs: audit 2026-09, part 3 (low findings) and a wider docs guard (#314) 2026-09-26 20:17:26 +00:00
ru.zone Release v5.18.4: cascade offline fallback + onlink route retry (#162) 2026-07-06 17:07:07 +03:00

cascade/ru.zone - снимок российских IP-сетей / Russian IP networks snapshot

Русский

ru.zone - снимок агрегированного списка российских (RU) IP-сетей. Его использует скрипт каскадного сплит-роутинга awg-routing.sh (см. CASCADE.md).

При каждом запуске скрипт скачивает актуальный список с ipdeny.com. Этот снимок в репозитории - запасной вариант: если ipdeny.com недоступен или отдал не список сетей, скрипт берёт файл отсюда через raw.githubusercontent.com, а если не удалось и это - оставляет копию, уже лежащую на сервере. Так каскад поднимается с рабочим списком RU-сетей и на свежем сервере.

  • Источник: https://www.ipdeny.com/ipblocks/ (агрегированная зона ru-aggregated.zone)
  • Дата снимка: 2026-07-06
  • Сетей: 8626 (IPv4 CIDR, по одной на строку, окончания строк LF)
  • Данные агрегированы из публичных записей о распределении адресов RIR, редистрибуция разрешена.

Скрипт awg-routing.sh из CASCADE.md тянет этот файл по URL, закреплённому на тег релиза (raw.githubusercontent.com/.../vX.Y.Z/cascade/ru.zone), а не на main - так снимок иммутабелен для уже развёрнутых установок. Этот тег обновляется каждый релиз (проверяется scripts/check-docs-consistency.sh).

Как обновить снимок

Обновляйте примерно раз в 6-12 месяцев (российские диапазоны меняются медленно):

curl -fsS -o cascade/ru.zone https://www.ipdeny.com/ipblocks/data/aggregated/ru-aggregated.zone

Закоммитьте обновлённый файл и поправьте дату снимка выше.

English

ru.zone is a snapshot of the aggregated list of Russian (RU) IP networks. It is used by the cascade split-routing script awg-routing.sh (see CASCADE.en.md).

The script downloads the live list from ipdeny.com on every run. This bundled snapshot is a fallback: if ipdeny.com is unreachable or returns something that is not a network list, the script fetches this file over raw.githubusercontent.com, and only if that fails too does it keep the copy already on the server. That way the cascade comes up with a working RU network list even on a fresh server.

  • Source: https://www.ipdeny.com/ipblocks/ (aggregated zone ru-aggregated.zone)
  • Snapshot date: 2026-07-06
  • Networks: 8626 (IPv4 CIDR, one per line, LF line endings)
  • The data is aggregated from public RIR allocation records; redistribution is allowed.

The awg-routing.sh script in CASCADE.en.md fetches this file via a URL pinned to the release tag (raw.githubusercontent.com/.../vX.Y.Z/cascade/ru.zone), not main, so the snapshot is immutable for already-deployed installs. That tag is bumped every release (enforced by scripts/check-docs-consistency.sh).

Refreshing the snapshot

Refresh roughly every 6-12 months (RU allocations change slowly):

curl -fsS -o cascade/ru.zone https://www.ipdeny.com/ipblocks/data/aggregated/ru-aggregated.zone

Commit the updated file and update the snapshot date above.