diff --git a/src/internal/netfilter/frame.go b/src/internal/server/base/frame.go similarity index 99% rename from src/internal/netfilter/frame.go rename to src/internal/server/base/frame.go index e3d8b21..cdebb03 100644 --- a/src/internal/netfilter/frame.go +++ b/src/internal/server/base/frame.go @@ -1,4 +1,4 @@ -package netfilter +package base import ( "crypto/rand" diff --git a/src/internal/netfilter/nfqueue.go b/src/internal/server/base/nfqueue.go similarity index 99% rename from src/internal/netfilter/nfqueue.go rename to src/internal/server/base/nfqueue.go index c9da492..8a90b0a 100644 --- a/src/internal/netfilter/nfqueue.go +++ b/src/internal/server/base/nfqueue.go @@ -1,4 +1,4 @@ -package netfilter +package base import ( "context" diff --git a/src/internal/netfilter/packet.go b/src/internal/server/base/packet.go similarity index 99% rename from src/internal/netfilter/packet.go rename to src/internal/server/base/packet.go index 047fba4..e0d5128 100644 --- a/src/internal/netfilter/packet.go +++ b/src/internal/server/base/packet.go @@ -1,4 +1,4 @@ -package netfilter +package base import ( "encoding/binary" diff --git a/src/internal/server/desync/desync_linux.go b/src/internal/server/desync/desync_linux.go index 2a1534c..84f8464 100644 --- a/src/internal/server/desync/desync_linux.go +++ b/src/internal/server/desync/desync_linux.go @@ -8,13 +8,14 @@ import ( nfq "github.com/florianl/go-nfqueue/v2" "github.com/sunbk201/ua3f/internal/config" "github.com/sunbk201/ua3f/internal/netfilter" + "github.com/sunbk201/ua3f/internal/server/base" "sigs.k8s.io/knftables" ) type Server struct { netfilter.Firewall cfg *config.Config - nfqServer *netfilter.NfqueueServer + nfqServer *base.NfqueueServer CtByte uint32 CtPackets uint32 } @@ -22,7 +23,7 @@ type Server struct { func New(cfg *config.Config) *Server { s := &Server{ cfg: cfg, - nfqServer: &netfilter.NfqueueServer{ + nfqServer: &base.NfqueueServer{ QueueNum: netfilter.DESYNC_QUEUE, }, CtByte: 1500, @@ -68,7 +69,7 @@ func (s *Server) Close() error { return err } -func (s *Server) HandlePacket(frame *netfilter.Packet) { +func (s *Server) HandlePacket(frame *base.Packet) { fragment := s.cfg.TCPDesync.Enabled if frame.TCP == nil || len(frame.TCP.Payload) <= 1 || frame.TCP.FIN { fragment = false @@ -76,7 +77,7 @@ func (s *Server) HandlePacket(frame *netfilter.Packet) { s.sendVerdict(frame, fragment) } -func (s *Server) sendVerdict(packet *netfilter.Packet, fragment bool) { +func (s *Server) sendVerdict(packet *base.Packet, fragment bool) { nf := s.nfqServer.Nf id := *packet.A.PacketID diff --git a/src/internal/server/netlink/netlink_linux.go b/src/internal/server/netlink/netlink_linux.go index 7788bae..366aa13 100644 --- a/src/internal/server/netlink/netlink_linux.go +++ b/src/internal/server/netlink/netlink_linux.go @@ -9,19 +9,20 @@ import ( "github.com/google/gopacket/layers" "github.com/sunbk201/ua3f/internal/config" "github.com/sunbk201/ua3f/internal/netfilter" + "github.com/sunbk201/ua3f/internal/server/base" "sigs.k8s.io/knftables" ) type Server struct { netfilter.Firewall cfg *config.Config - nfqServer *netfilter.NfqueueServer + nfqServer *base.NfqueueServer } func New(cfg *config.Config) *Server { s := &Server{ cfg: cfg, - nfqServer: &netfilter.NfqueueServer{ + nfqServer: &base.NfqueueServer{ QueueNum: netfilter.HELPER_QUEUE, }, } @@ -59,7 +60,7 @@ func (s *Server) Close() error { } // handlePacket processes a single NFQUEUE packet -func (s *Server) handlePacket(packet *netfilter.Packet) { +func (s *Server) handlePacket(packet *base.Packet) { nf := s.nfqServer.Nf modified := false @@ -129,7 +130,7 @@ func (s *Server) setInitialTCPWindow(tcp *layers.TCP) bool { // zeroIPID sets the IP ID field to zero for IPv4 packets // Returns true if the packet was modified -func (s *Server) zeroIPID(packet *netfilter.Packet) bool { +func (s *Server) zeroIPID(packet *base.Packet) bool { if packet.IsIPv6 { return false } diff --git a/src/internal/server/nfqueue/nfqueue_linux.go b/src/internal/server/nfqueue/nfqueue_linux.go index 42d07a6..94b2755 100644 --- a/src/internal/server/nfqueue/nfqueue_linux.go +++ b/src/internal/server/nfqueue/nfqueue_linux.go @@ -22,7 +22,7 @@ import ( type Server struct { base.Server netfilter.Firewall - nfqServer *netfilter.NfqueueServer + nfqServer *base.NfqueueServer SniffCtMarkLower uint32 SniffCtMarkUpper uint32 HTTPCtMark uint32 @@ -41,7 +41,7 @@ func New(cfg *config.Config, rw *rewrite.Rewriter, rc *statistics.Recorder) *Ser SniffCtMarkUpper: 10216, NotHTTPCtMark: 201, HTTPCtMark: 202, - nfqServer: &netfilter.NfqueueServer{ + nfqServer: &base.NfqueueServer{ QueueNum: 10201, }, } @@ -76,7 +76,7 @@ func (s *Server) Close() error { } // handlePacket processes a single NFQUEUE packet -func (s *Server) handlePacket(packet *netfilter.Packet) { +func (s *Server) handlePacket(packet *base.Packet) { if s.Cfg.RewriteMode == config.RewriteModeDirect || packet.TCP == nil || len(packet.TCP.Payload) == 0 { _ = s.nfqServer.Nf.SetVerdict(*packet.A.PacketID, nfq.NfAccept) return @@ -90,7 +90,7 @@ func (s *Server) handlePacket(packet *netfilter.Packet) { s.sendVerdict(packet, result) } -func (s *Server) sendVerdict(packet *netfilter.Packet, result *rewrite.RewriteResult) { +func (s *Server) sendVerdict(packet *base.Packet, result *rewrite.RewriteResult) { nf := s.nfqServer.Nf id := *packet.A.PacketID setMark, nextMark := s.getNextMark(packet, result) @@ -129,7 +129,7 @@ func (s *Server) sendVerdict(packet *netfilter.Packet, result *rewrite.RewriteRe } } -func (s *Server) getNextMark(packet *netfilter.Packet, result *rewrite.RewriteResult) (setMark bool, mark uint32) { +func (s *Server) getNextMark(packet *base.Packet, result *rewrite.RewriteResult) (setMark bool, mark uint32) { mark, found := packet.GetCtMark() if !found { return true, s.SniffCtMarkLower