Commit graph

33 commits

Author SHA1 Message Date
Karen Khachatryan
0de6fd028f Arm ping reboot watchdog only after stable connectivity
- Replace the fixed startup grace with consecutive successful connectivity checks
- Arm fast reboot recovery only after five successful ping checks
- Reset the warmup counter when connectivity fails before arming
- Add a one-hour hard recovery reboot when the watchdog never becomes armed
- Use router uptime as a monotonic timer for the unarmed recovery timeout
- Allow the hard recovery fallback to be disabled with a zero timeout
- Propagate the new watchdog settings through runtime generation and validation
- Update documentation for the new arming and recovery behavior
2026-09-30 12:46:08 +03:00
Karen Khachatryan
f7fc406290 Fix WiFi capability selection and extract maximization script
- Move WiFi capability detection into a standalone ucode script
- Prefer the newest supported WiFi mode before selecting channel width
- Select the widest supported width within the radio max_width limit
- Avoid selecting 160 MHz on radios limited to 80 MHz
- Keep first-boot UCI application isolated from WiFi selection logic
2026-09-30 00:54:31 +03:00
Karen Khachatryan
f406396639 Update README 2026-09-28 23:14:10 +03:00
Karen Khachatryan
1cbb358327 Add CIDR-squash optimization and unify direct-list updates
- Add CIDR-squash package download and include it in required router packages
- Optimize direct IPv4 lists with configurable CIDR over-coverage
- Reuse the shared update-ipsets.sh implementation on both routers and exit servers
- Install CIDR-squash from source during exit server deployment
- Move direct-list paths, sources, and download settings into generated runtime environments
- Keep firewall ipset loadfile paths synchronized with runtime configuration
- Validate required runtime settings in router and server scripts
- Align generated file validation and documentation with the shared direct-list workflow
2026-09-28 23:14:10 +03:00
Karen Khachatryan
941a61de35 Replace Watchcat and normalize direct IPv4 lists
- Remove the Watchcat configuration and package dependency
- Add generated ping-reboot watchdog settings with boot grace, retry interval, failure threshold, and ping timeout
- Document the custom connectivity watchdog behavior and manual check mode
- Accept both CIDR prefixes and individual IPv4 addresses from IPinfo Lite
- Normalize individual IPv4 addresses to explicit /32 prefixes
- Apply direct-list normalization consistently on routers and AWG servers
- Document that generated direct lists always use explicit IPv4 CIDR notation
2026-09-28 23:14:10 +03:00
Karen Khachatryan
87bf78b12c Use IPinfo Lite for direct country routing
- Replace IPverse country feeds with filtered IPinfo Lite IPv4 CIDRs
- Reuse update-ipsets.sh during generation to keep initial and runtime direct lists consistent
- Validate downloaded IPinfo archives and clean up temporary country data
- Keep IPverse as the source for ASN-based direct routing
- Make source URLs, filenames, and download settings implementation-owned defaults
- Allow local generation to override the ipset path and suppress firewall reloads
- Increase the runtime direct-list download timeout to three minutes
- Remove Alibaba / AliExpress ASN45102 from the default direct ASN list
- Document the new country source, generation flow, and IPinfo attribution
2026-09-28 23:14:10 +03:00
Karen Khachatryan
4b3fed29a7 Combine GeoIP and RIR country lists for direct routing
- Add IPverse country-ip-blocks alongside geo-ip-blocks
- Merge GeoIP and RIR delegation prefixes for every direct country
- Apply the combined country lists on both routers and AWG servers
- Use both country sources when generating runtime direct lists
- Document the GeoIP and RIR union behavior
2026-09-28 23:13:43 +03:00
Karen Khachatryan
0952173594 Increase download timeout and update direct ASN example
- Increase default download timeout from 5 to 15 minutes
- Apply the longer timeout to optional downloads as well
- Add Alibaba / AliExpress ASN45102 to the documented direct ASN list
2026-09-28 23:12:34 +03:00
Karen Khachatryan
539c83bf9e Add AliExpress ASN to direct exit routing
- Document Valve ASN ownership in the default direct list
- Add Alibaba / AliExpress ASN45102 to direct exit routing
2026-09-28 23:12:10 +03:00
Karen Khachatryan
cef641a459 Switch country ipsets to IPverse GeoIP data
- Replace IPverse country-ip-blocks with geo-ip-blocks
- Update country IPv4 list URLs to the GeoIP repository layout
- Apply the new country source to both router and AWG server runtime scripts
- Update runtime generation defaults to use the GeoIP-based country lists
- Keep ASN-based direct routing unchanged
2026-09-28 23:11:11 +03:00
Karen Khachatryan
2eeb3c1fda Build AmneziaWG from upstream release sources
- Remove the legacy Amnezia PPA before package installation
- Purge previously installed AmneziaWG PPA packages during migration
- Detect the latest stable kernel and tools release tags directly from upstream repositories
- Verify kernel and tools releases belong to the same compatible version family
- Build and install the AmneziaWG kernel module through DKMS
- Build and install amneziawg-tools from the matching upstream release
- Skip rebuilding components when the requested release is already installed
- Validate exact release tags, installed versions, DKMS state, and module paths
- Add required DKMS, kernel build, and ELF development dependencies
2026-09-28 23:07:45 +03:00
Karen Khachatryan
1db5341401 Update example configuration for PPPoE and AWG options
- Add explicit PPPoE MTU configuration
- Simplify Leaf03 exit fallback order
- Raise invalid AWG S4 values to the supported minimum
- Add advanced AWG rekey, handshake, keepalive, trailer, and cookie options
- Add persistent keepalive configuration to the example AWG profile
2026-09-28 23:07:45 +03:00
Karen Khachatryan
8783b0566a Remove custom c-ares package handling
- Stop downloading libcares from the custom c-ares GitHub release
- Remove the --skip-cares-download generator option
- Drop libcares from required router packages
- Remove c-ares package URLs and constants from defaults
- Update README examples and documentation to match the simplified package flow
2026-09-28 23:07:45 +03:00
Karen Khachatryan
af36022eac Add nDPI BitTorrent filtering to AWG server
- Build and install a pinned xt_ndpi version during server deployment
- Skip rebuilding nDPI when the expected module version is already installed
- Validate required conntrack kernel options and iptables nDPI support
- Block BitTorrent traffic from exit subnets using nDPI
- Inspect reply traffic before the ESTABLISHED fast path to maintain nDPI flow state
- Bypass DPI for TCP ports 80/443 and UDP port 443 to avoid inspecting ordinary web traffic
2026-09-28 23:07:45 +03:00
Karen Khachatryan
1bd00174ef Add 6 GHz WiFi support and tighten Watchcat timing
- Add wifi_6g configuration and map it to radio2/default_radio2
- Use band-specific encryption: psk2 for 2.4 GHz, sae-mixed for 5 GHz, and sae for 6 GHz
- Extend managed WiFi bootstrap cleanup to radio2
- Document 6 GHz configuration and per-band encryption defaults
- Reduce Watchcat ping and reboot detection intervals
2026-09-28 23:07:45 +03:00
Karen Khachatryan
77a475c356 Maximize WiFi radio settings
- Detect radio capabilities from /etc/board.json
- Select the widest supported HT/VHT/HE/EHT mode
- Use the radio-specific default channel when available
- Leave disabled radios unchanged
- Document automatic WiFi tuning in README
2026-09-28 23:07:45 +03:00
Karen Khachatryan
f3028e5750 Add exit server undeploy support
- add --undeploy with public/node/auto SSH host fallback
- disable managed systemd units and remove generated server files
- remove only project-managed entries from authorized_keys
- keep AWG network state alive until reboot to avoid breaking overlay SSH
- reboot the server after cleanup
- show curl progress while downloading OpenWrt ImageBuilder archives
- update README with undeploy workflow and generated server layout
2026-09-28 23:07:45 +03:00
Karen Khachatryan
ff7bab641b Enable AmneziaWG header protection by default
- Enable deterministic per-link HeaderProtectionKey generation
- Require S1-S4 >= 12 when header protection is enabled
- Generate infra S1-S4 directly from header-protection-safe ranges
- Validate generated padding ranges against the header protection minimum
- Derive runtime filenames and unmanaged report names from shared path constants
- Fix tool paths and update HeaderProtectionKey documentation
2026-09-28 23:07:45 +03:00
Karen Khachatryan
c0752b9884 Support firewall allows over both overlay paths
- Generate allow rules for both Mesh and Exit ingress
- Reject allow_to_router and allow_to_lan targeting the source router
- Remove the special SSH allow rule from Exit
- Include the ingress zone in generated allow rule names
- Remove legacy allow rules during firewall regeneration
- Update firewall validation and documentation
- Enable WPA2/WPA3 mixed mode
2026-09-28 23:07:45 +03:00
Karen Khachatryan
9517bf4cc1 Support per-router OpenWrt versions and SNAPSHOT builds
- allow routers[].openwrt_version to override the global version
- support *-SNAPSHOT versions such as 25.12-SNAPSHOT
- download and use ImageBuilders per version + target/subtarget
- download and sync package repositories per router OpenWrt version
- correctly detect SNAPSHOT images containing revision identifiers
- make router deployment select sysupgrade images for the effective OpenWrt version
- add --version override support to build and upgrade commands
- update config.json examples and README documentation
2026-09-28 23:07:45 +03:00
Karen Khachatryan
3e2863fd96 Upgrade AmneziaWG DKMS explicitly 2026-09-28 23:07:45 +03:00
Karen Khachatryan
28081faa35 Add AmneziaWG 3.1 support and link diversification
- add AWG 3.x rekey, handshake, keepalive, trailer and cookie options
- generate deterministic directional Jc/Jmin/Jmax and I1-I5 signatures
- keep S1-S4 and H1-H4 shared between both ends of a link
- derive stable runtime parameter ranges for infra and access tunnels
- add optional HeaderProtectionKey and ContentPaddingAddition support
- disable automatic header protection until the upstream kernel issue is fixed
- diversify Babel hello/update intervals per local tunnel direction
- use a consistent tunnel MTU profile: 1400 for AWG/WG and 1380 for IPIP
- propagate AWG 3.1 options through mesh, exit, access, client and server configs
- validate AWG 3.x ranges, header protection constraints and generated tunnel configs
- update README examples and AWG 3.1 documentation
2026-09-28 23:07:45 +03:00
Karen Khachatryan
9bff15b5f2 Make https-dns-proxy respawn indefinitely 2026-09-28 23:07:45 +03:00
Karen Khachatryan
39c89af7c6 Add c-ares package support and improve DoH failover
- Generalize custom release package downloading for AWG and c-ares.
- Download libcares from c-ares-openwrt-package releases and add --skip-cares-download.
- Add libcares to required router packages.
- Simplify DoH failover and rely on procd for https-dns-proxy lifecycle management.
- Repair missing provider-domain dnsmasq forwards without requiring an endpoint switch.
- Remove the custom https-dns-proxy respawn patch.
- Update README examples and package documentation.
2026-09-28 23:07:45 +03:00
Karen Khachatryan
fe95095843 Organize imagebuilder and link speed outputs
- store downloaded OpenWrt ImageBuilder archives under imagebuilders/
- save link speed reports under link-speeds/ by default
- enable link speed measurement progress by default
- make topology renderers use link-speeds/link-speeds.json
- remove obsolete and redundant temporary-file ignore rules
- update README examples for the new defaults
2026-09-28 23:07:45 +03:00
Karen Khachatryan
1caaf4a7bb Improve DoH recovery, DHCP client ID handling, and build banner
- let procd respawn https-dns-proxy indefinitely after crashes
- remove manual https-dns-proxy restarts from check-doh
- use sendclientid='none' instead of patching netifd dhcp.sh
- show the deploy version in the OpenWrt login banner
2026-09-28 23:07:45 +03:00
Karen Khachatryan
2152ff6450 Add policy-aware mesh DNS and async link measurements
- generate router-*.mesh DNS records in dhcp_part
from both router-level and access-group allow_to_router rules
- expand allow_to_router=all to all other routers and merge explicit targets
- preserve manual dhcp_part entries and remove stale generated DNS records
- use anonymous UCI hostrecord sections for generated mesh DNS
- switch collect_link_speeds.py to asyncio-based parallel measurements
- add -j/--jobs to limit concurrent iperf3 measurements
- prevent simultaneous measurements that share a router/server endpoint
- make generated exit rule/route UCI sections anonymous
- migrate legacy owmb_exit_rule_* and owmb_exit_route_* sections
- update network validation for anonymous exit policy objects
- include dhcp_part in generated/unmanaged file tracking
- document mesh DNS behavior, parallel measurements and AWG access options
2026-09-28 23:07:45 +03:00
Karen Khachatryan
6ffe209486 Add interactive 2D topology view and unify topology rendering
- replace measured 2D SVG maps with an interactive Canvas HTML view
- keep a separate static SVG containing topology-only colors
- share layout geometry between Canvas and SVG renderers
- preserve spine and exit ring order, closing-edge direction, and parallel exit lanes
- align node ordering and directed links between 2D and 3D views
- add from, to, and topology color modes
- add link-group toggles and a 0-500 Mbit/s range filter
- support dimming or hiding links outside the selected speed range
- show arrows for the currently displayed measurement direction
- distinguish down, failed, and missing measurements from the speed scale
- unify 2D and 3D control-panel layout and legends
- shorten link tooltips to directional speed and status
- generate topology-2d.html, topology-2d.svg, and topology-3d.html
- rename public topology files and templates to use hyphenated names
- send collector progress to stdout while writing reports and JSON to separate files
- update README examples, generated-file descriptions, and topology documentation
2026-09-28 23:07:45 +03:00
Karen Khachatryan
851ac78e68 Restart DoH service after falling back to provider DNS
- restart `https-dns-proxy` after switching dnsmasq to provider DNS
- perform the restart on a best-effort basis without interrupting fallback
- restart DoH only when the DNS mode actually changes
- avoid repeated service restarts while provider DNS is already active
- allow the next health-check cycle to switch back to DoH after recovery
2026-09-28 23:07:45 +03:00
Karen Khachatryan
9fe0c18fb3 Add per-router PPPoE WAN configuration
- add an optional `pppoe` section to router configuration
- support PPPoE username, password, and optional MTU
- use MTU 1480 by default when it is not explicitly configured
- generate PPPoE WAN settings in `99-firstboot-custom`
- preserve multiline formatting for encrypted `OWMB_ENC_SECRET_V1` values
- validate the configured PPPoE MTU
- remove the generated PPPoE block when the section is removed
- add a PPPoE configuration example to `config.json`
2026-09-28 23:07:45 +03:00
Karen Khachatryan
daade876c5 Parallelize router builds and make server deployment fault-tolerant
- Collect and download unique OpenWrt ImageBuilders before starting builds
- Add parallel router image builds with configurable `--jobs` limit
- Reuse cached ImageBuilder archives while keeping per-router build directories isolated
- Continue deploying remaining servers after an individual deployment failure
- Report successful and failed deployments in a final summary
2026-09-28 23:07:45 +03:00
Karen Khachatryan
610097ed42 Add per-device routing policies
- Support per-device WAN, split, and exit routing modes
- Move exit policy marks and routing tables to IDs starting at 10000
- Generate and validate matching firewall and network rules
- Add the --details option
- Improve generation logs
- Update Watchcat defaults
2026-09-28 23:07:45 +03:00
Karen Khachatryan
8fd57bf3ea Initial commit 2026-09-28 23:07:31 +03:00