refactor: move base nfqueue server

This commit is contained in:
SunBK201 2025-12-06 16:38:20 +08:00
parent bef94bdc9d
commit 6877f608ad
6 changed files with 18 additions and 16 deletions

View File

@ -1,4 +1,4 @@
package netfilter
package base
import (
"crypto/rand"

View File

@ -1,4 +1,4 @@
package netfilter
package base
import (
"context"

View File

@ -1,4 +1,4 @@
package netfilter
package base
import (
"encoding/binary"

View File

@ -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

View File

@ -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
}

View File

@ -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