From b20acf2cbeb55d305faece6fe9959a02e8913a3d Mon Sep 17 00:00:00 2001 From: SunBK201 Date: Sat, 29 Nov 2025 16:37:41 +0800 Subject: [PATCH] feat: add packet modification configuration with environment variables --- openwrt/files/ua3f.init | 9 +++------ src/internal/config/config.go | 14 +++++++++++++- src/internal/server/netlink/netlink_linux.go | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/openwrt/files/ua3f.init b/openwrt/files/ua3f.init index b011e9a..d41d7cc 100755 --- a/openwrt/files/ua3f.init +++ b/openwrt/files/ua3f.init @@ -32,11 +32,6 @@ start_service() { config_get_bool set_ipid "main" "set_ipid" 0 config_get_bool del_tcpts "main" "del_tcpts" 0 - local others="," - [ "$set_ipid" -eq "1" ] && others="${others}ipid," - [ "$del_tcpts" -eq "1" ] && others="${others}tcpts," - [ "$set_ttl" -eq "1" ] && others="${others}ttl," - procd_open_instance "$NAME" procd_set_param command "$PROG" procd_append_param command -m "$server_mode" @@ -47,8 +42,10 @@ start_service() { procd_append_param command -l "$log_level" procd_append_param command -x "$rewrite_mode" procd_append_param command -z "$rewrite_rules" - procd_append_param command -o "$others" [ "$partial_replace" = "1" ] && procd_append_param command -s + procd_append_param env UA3F_TTL="$set_ttl" + procd_append_param env UA3F_IPID="$set_ipid" + procd_append_param env UA3F_TCPTS="$del_tcpts" procd_set_param respawn procd_set_param stdout 1 diff --git a/src/internal/config/config.go b/src/internal/config/config.go index 0f31163..7d6f8d4 100644 --- a/src/internal/config/config.go +++ b/src/internal/config/config.go @@ -4,6 +4,7 @@ import ( "flag" "fmt" "log/slog" + "os" "strings" ) @@ -86,7 +87,18 @@ func Parse() (*Config, bool) { cfg.ListenAddr = fmt.Sprintf("0.0.0.0:%d", port) } - // Parse other options + // Parse other options from environment variables + if os.Getenv("UA3F_TCPTS") == "1" { + cfg.DelTCPTimestamp = true + } + if os.Getenv("UA3F_TTL") == "1" { + cfg.SetTTL = true + } + if os.Getenv("UA3F_IPID") == "1" { + cfg.SetIPID = true + } + + // Parse other options from -o flag opts := strings.Split(others, ",") for _, opt := range opts { switch strings.ToLower(strings.TrimSpace(opt)) { diff --git a/src/internal/server/netlink/netlink_linux.go b/src/internal/server/netlink/netlink_linux.go index c299713..fc62d80 100644 --- a/src/internal/server/netlink/netlink_linux.go +++ b/src/internal/server/netlink/netlink_linux.go @@ -45,8 +45,8 @@ func (s *Server) Start() (err error) { slog.Error("s.Firewall.Setup", slog.Any("error", err)) return err } + slog.Info("Packet modification configuration", slog.Bool("ttl", s.cfg.SetTTL), slog.Bool("tcpts", s.cfg.DelTCPTimestamp), slog.Bool("ipid", s.cfg.SetIPID)) if s.cfg.DelTCPTimestamp || s.cfg.SetIPID { - slog.Info("Packet modification features enabled") return s.nfqServer.Start() } return nil