Commit Graph

29 Commits

Author SHA1 Message Date
Stan Grishin 571d9e96a2 pbr: update to 1.1.8-10
* Improve verbose output on start
* Allow to not create ip rule for WG server
* Improve boot up start (take 2)
* Improve verbose output when setting triggers
* Override DNS hijack with DNS policies from pbr

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2025-02-12 16:22:16 -08:00
Stan Grishin cfd35b6bf8 pbr: bugfixes: boot-up and negative dest_addr
* bugfix: more robust boot-up behaviour, obsoleting following config
  options: procd_boot_delay, procd_boot_timeout, procd_wan_ignore_status
* bugfix: fix typo in processing negations on dest_addr

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2025-01-27 10:46:48 -08:00
Stan Grishin 1ebad04302 pbr: Makefile bugfixes
* remove indentation in postinst/prerm/postrm scripts to fix issues with APK

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2025-01-04 12:13:01 -08:00
Stan Grishin 972dab9598 pbr: update to 1.1.8
* update to 1.1.8 release version
* APK-style version stamping for init script

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-12-20 10:53:54 -08:00
Stan Grishin b8a4132d9b pbr: improve status_service output
Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-12-14 09:48:19 -08:00
Stan Grishin ad1b32bc63 pbr: 1.1.7-65 bugfixes and improvements
Maintainer: me
Compile tested: x86_64, Dell EMC Edge620, OpenWrt 24.10.0-rc2
Run tested: x86_64, Dell EMC Edge620, OpenWrt 24.10.0-rc2

Description:
* stop building netifd flavour until netifd isuees are resolved
* improve output()
* improve inline_set()
* improve is_config_enabled()
* bugfix is_domain()
* improve is_supported_protocol()
* improve is_supported_interface()
* bugfix is_tor_running()
* improve ipv4_leases_to_nftset()
* improve ipv6_leases_to_nftset()
* add check for ip-full binary on start
* bugfix: load environment on boot
* bugfix: hack around dnsmasq confdir instances
* bugfix: IPv6-related fixes for internet_routing() and status_service()
* improve netifd setup by bringing code into the init script from uci-defaults
* bugfix: do not attempt to use IPv6 prefixes in pbr.user.aws if IPv6 support is disabled in pbr config

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-12-06 18:47:16 -08:00
Stan Grishin ceda7c95ff pbr: update to 1.1.7-47
* bump compat version to accommodate new strings
* update dnsmasq-related code to better support separate confdirs
  for separate instances
* remove procd_lan_interface as it didn't reflect that it's a list of devices
* introduce procd_lan_device list
* improve the output() function (thanks @bigsmile74)
* remove duplicate uci_get_device
* improve ipv6 detection and interface setup
* improve dhcp force detection for interfaces name differently from lan
* fix array/element parameters for some json operations
* remove unneeded null redirects for `try` calls
* remove (iptables-only) capitalized chain names form validation
* working pbr-netifd flavor

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-10-31 10:04:56 -07:00
Stan Grishin f60ea9a7fb pbr: update to 1.1.7-29
Changes from @stangri
* remove unneeded `\n` escapes
* cosmetic improvements to make code more consistent
* remove duplicate uci_get_device()
* add more output on start/stop
* remove wan up detection on boot/start
* address Tor policies errors
* prevent interface_routing() failures for downed interfaces

Changes from @bigsmile74:
* improve is_integer()
* improve is_domain()
* improve filter_options()
* imrove is_ipv4() so that is_ipv4_netmask() can be retired
* improve is_phys_dev so that is_phys_dev_quick() can be retired
* add the dhcp.lan.force=0 warning

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-10-28 17:12:01 -07:00
Stan Grishin 34c68be148 pbr: update to 1.1.7-21
* switch to dstnat chain from dstnat_lan chain for dns & tor policies (thanks @egc112)
* re-introduce procd_lan_interface for better LAN detection
* improve is_domain function
* introduce health-check for requried fw4 chains
* bugfix: avoid double counters for dns policies
* bugfix: remove faulty counters for tor policies
* rename interface_process to process_interface for better code readability
* overhaul pbr.user.aws script for a much better performance and more compact
  (gzipped) storage of the ranges json locally (thanks @bigsmile74)

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-10-07 11:21:02 -07:00
Stan Grishin 97a0716209 pbr: update to 1.1.7-15
* implement system health check on start for required fw4 table/chains
* add error messages for failed health checks
* move resolver check & config from load_package_config to load_environment
* no longer filter only static rules for pbr_* tables

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-09-27 17:09:59 -07:00
Stan Grishin 77eedd8c66 pbr: bugfix: filter only static routes for new tables
* fixes https://github.com/openwrt/packages/issues/24999

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-09-24 10:20:19 -07:00
Stan Grishin 1a00273aed pbr: update to 1.1.7-10
* allow using WG servers as gateways if explicitly set in supported_interface
* automatically execute user scripts in /etc/pbr.d/
* change the dnsmasq restart logic on start/reload/restart
* further nft file atomic mode-related code cleanup
* fix spelling in error message

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-09-20 13:22:24 -07:00
Stan Grishin 3219c50828 pbr: update to 1.1.7-7
Makefile:
* remove pbr-iptables flavour

Init-script:
* improve detection of wireguard server and client instances
* integrate wg_server_and_client into init script
* remove traffic_killswitch() and trap() and related options/code
* remove internal nft_file_support variable as fw4 nft file is the only running mode
* improve debug() and is_supported_interface() functions
* improve detection of incompatible user script files
* double-quote some strings due to shellcheck errors
* flush ip rules from pbr tables instead of deleting last one

Other files:
* remove /usr/share/pbr/pbr.user.wg_server_and_client as obsolete
* remove references to the file above in config on update thru uci-defaults
* minor updates to netifd uci-defaults script

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-09-05 13:26:46 -07:00
Stan Grishin 920d64734a pbr: update to 1.1.6-20
This version is the final version supporting iptables and:

* it separates the old iptables/nft-capable init script from the new nft-only init script
* the new nft-script is a significant rewrite of the old recursive calls/policy parsing
  and tries to create inline nft sets which offers performance improvements

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-08-06 01:44:34 +00:00
Stan Grishin 717a800ec5 pbr: bugfix: fix IPv6 interface errors
* update license to AGPL-3.0-or-later
* rename pbr_get_gateway to pbr_get_gateway4 for better readability
* improve IPv6 "gateway" detection/display on start
* prevent IPv6 interface errors on start
* revert release format

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-04-15 19:55:27 +00:00
Stan Grishin bb5de23743 pbr: update to 1.1.4-r15
* delete obsolete files/etc/init.d/pbr.init
* add files/etc/uci-defaults/91-pbr-iptables to help update from older OpenWrt
* add files/etc/uci-defaults/91-pbr-nft to help update from older OpenWrt
* update files/etc/uci-defaults/91-pbr-netifd to only add tables to supported ifaces
* re-organize variants in the Makefile so that they hopefull work this time
* update prerm for all variants for better user experience
* update the -netifd prerm to remove leftofver entries from network and rt_tables file

In the init script:
* add decorations for netifd-interfaces related operations (blue ticks)
* add rtTablesFile variables instead of hard-coding the rt_tables file
* add function to check if the table is netifd-derived
* add error messages/hints for failed interface setup and failed WAN discovery
* make cleanup_rt_tables the netifd-compatible
* streamline interface_process function with a clearer case statement
* rename the interface_process `pre-init` option to `pre_init` to conform to the other
  functions options naming style

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-04-12 20:40:58 +00:00
Stan Grishin 44f1f1184a pbr: prepare migration to APK
* remove dependencies/references to opkg
* simplify wan/wan6 discovery

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-03-23 01:03:59 +00:00
Stan Grishin 790753f6a6 pbr: update to 1.1.4-5
This update includes the following changes:
1. Makefile
  * update copyright
  * attempt to implement the proper variants to avoid luci-app dependency on both variants
  * quietly stop service on uninstall

2. Config-file
  * add the list of dnsmasq instances to target in supported dnsmasq modes
  * for default pbr variant, set the `resolver_set` to `dnsmasq.nftset`
  * for iptables pbr variant, set the `resolver_set` to `dnsmasq.ipset`
  * add the `nft_file_support` (disabled by default)
  * introduce `procd_boot_delay` to delay service start on boot
  * introduce the following nft set creation options:
    * nft_set_auto_merge
    * nft_set_counter
    * nft_set_flags_interval
    * nft_set_flags_timeout
    * nft_set_gc_interval
    * nft_set_policy
    * nft_set_timeout
  * add the pbr.user.wg_server_and_client custom user script to allow running wg server and
    client at the same time
  * add the "Ignore Local Requests" sample policy

3. Hotplug firewall/interface scripts
  * better logged messages

4. The pbr and pbr-iptables uci defaults script
  * use functions from the init script
  * improve vpn-policy-routing migration

5. The pbr-netifd uci defaults script
  * use functions from the init script
  * improve uci operations

6. Introduce the firewall.include file

7. Improve pbr.user.aws custom user script

8. Improve pbr.user.netflix custom user script

9. Introduce pbr.user.wg_server_and_client custom user script

10. Update the init file:
  * refactor some code to allow the init script file to be sourced by the uci defaults scripts
    and the luci rpcd script for shared functions
  * add support for `nft_file_mode` in which service prepares the fw4-compatible atomic nft/include
    file for faster operations on service reload
  * improve Tor support (nft mode only)
  * implement support for nft set options
  * update validation functions for new options/parameters

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2024-03-20 19:10:45 +00:00
Stan Grishin 643e501c8d pbr: bugfix: create IPv6 routes
* add missing space in str_contains
* unquote variable to make sure IPv6 rotues are added
* add IPv6 routes display to status output in nft mode

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-05-11 23:07:04 +00:00
Stan Grishin c2739705b9 pbr: ipv6 & migration bugfixes
* suppress RTNETLINK errors when inserting ipv6 routes
* only display global scope IPv6 gateways in status/WebUI
* stop and disable vpn-policy-routing when migrating

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-05-05 01:48:33 +00:00
Stan Grishin cdfff4a693 pbr: update to 1.1.1-1
*** MAKEFILE ***
* remove libubus dependency as it was causing issues
  https://forum.openwrt.org/t/policy-based-routing-pbr-package-discussion/140639/318
* move firewall hotplug directory/file creation out of default section into
  pbr and pbr-iptables packages sections in preparation for dropping it from pbr
* fix no new line after output when uninstalling packages

*** UCI-DEFAULTS ***
* only add firewall include to firewall config if the include file exists
* add shellcheck exception to netifd uci-defaults file

*** SCRIPTS ***
* more informative logging for firewall and iface hotplug scripts
* more informative logging for firewall include script

*** SERVICE ***
* introduce lock-file to prevent package starting on external events if it hasn't
  been auto- or manually started before
* use the `ip`, not `ip-full` command to prevent errors on OpenWrt 21.02
* parse firewall WAN zone to append list of interfaces
* append error and warning "arrays" with new messages
* used shared memory to store the service output/logging messages
* improve is_ovpn function to filter out false positives when interface names started
  with `tun`
* introduce is_valid_ovpn to find OpenVPN tunnels where the device name in OpenVPN config
  matches the device name in network config
* introduce opkg_get_version to compare versions of principal and luci packages
* better code to obtain AdGuardHome version with betas installed
* optimize code and add better logging for errors when inserting policies with iptables
* optimize code and add better logging for errors when inserting policies with nft
* bugfix: insert policies in all specified protocols
* bugfix: support using physical devices in policies in nft mode
* bugfix: use iptPrefix, not nftPrefix in iptables commands
* implement Tor support in nft mode
* bugfix: fix spelling for User File Syntax error
* restart service fully (instead of quick reload) for OpenVPN interface events, as
  the order/number of supported interfaces
* more verbose output (showing handles) of status in nft mode
* improve `icmp_interface`, `ignored_interface`, `supported_interface` validation
  regexes
* improve `interface`, validation regex

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-05-01 00:44:58 +00:00
Stan Grishin e7e4a013be pbr: bugfix: fix is_domain()
* fixes https://github.com/openwrt/packages/issues/20352

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-01-22 23:13:24 +00:00
Stan Grishin f4f899f6f9 pbr: update to 1.0.1-14
* improve install/uninstall messages
* fix ips add command
* add boot() to init file

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-01-17 00:48:22 +00:00
Stan Grishin 2aaa7c559b pbr: update to 1.0.1-10
Bugfixes:
* better error information for empty tid/mark and failure to resolve domains
* better handling of entries in /etc/iproute2/rt_tables
* update packages definitions and descriptions
* remove firewall4 from dependencies to prevent dependency recursion

Updates:
* introduce nft_user_set_policy and nft_user_set_counter to control options for
  user nft sets this service creares
* use counters in internal nft sets

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2023-01-16 22:58:49 +00:00
Stan Grishin f1c8f1423b pbr: add provides: pbr to variants
Signed-off-by: Stan Grishin <stangri@melmac.ca>
2022-12-23 23:38:25 +00:00
Stan Grishin edbcb97b78 pbr: bugfix: Makefile, rt_tables fix
Signed-off-by: Stan Grishin <stangri@melmac.ca>
2022-12-22 18:52:41 +00:00
Stan Grishin 5bec4a2541 pbr: update to 1.0.1-1
* add more error/warning messages
* better return statements from ips/nftset functions
* better error/warning handling when inserting policies
* comment out unnecessary nft set/ipst clean ups
* shellchecked status functions

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2022-12-19 19:07:10 +00:00
Stan Grishin a86985879f pbr: detect missing iptables
Signed-off-by: Stan Grishin <stangri@melmac.ca>
2022-12-12 02:52:59 +00:00
Stan Grishin 47eca64cb8 pbr: initial commit
* The makefile produces the nft and iptables capable `pbr` package
  and the `pbr-iptables` package for legacy setups
* This replaces `vpnbypass` and `vpn-policy-routing` packages
* I'm soliciting feedback on this package and my intention is to
  update the version to 1.0.0 before this is merged, but I need the
  feedback on this and luci-app-pbr before then.

Signed-off-by: Stan Grishin <stangri@melmac.ca>
2022-12-03 02:30:29 +00:00