mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-07-28 18:18:34 +00:00
feat: remove ACL from TPROXY & TUN
This commit is contained in:
@@ -3,23 +3,14 @@
|
||||
package tun
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
tun2socks "github.com/eycorsican/go-tun2socks/core"
|
||||
"github.com/tobyxdd/hysteria/pkg/acl"
|
||||
"github.com/tobyxdd/hysteria/pkg/utils"
|
||||
"net"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func (s *Server) Handle(conn net.Conn, target *net.TCPAddr) error {
|
||||
action, arg := acl.ActionProxy, ""
|
||||
var resErr error
|
||||
if s.ACLEngine != nil {
|
||||
action, arg, _, resErr = s.ACLEngine.ResolveAndMatch(target.IP.String())
|
||||
}
|
||||
if s.RequestFunc != nil {
|
||||
s.RequestFunc(conn.LocalAddr(), target.String(), action, arg)
|
||||
s.RequestFunc(conn.LocalAddr(), target.String())
|
||||
}
|
||||
var closeErr error
|
||||
defer func() {
|
||||
@@ -27,44 +18,13 @@ func (s *Server) Handle(conn net.Conn, target *net.TCPAddr) error {
|
||||
s.ErrorFunc(conn.LocalAddr(), target.String(), closeErr)
|
||||
}
|
||||
}()
|
||||
switch action {
|
||||
case acl.ActionDirect:
|
||||
if resErr != nil {
|
||||
closeErr = resErr
|
||||
return resErr
|
||||
}
|
||||
rc, err := s.Transport.LocalDialTCP(nil, target)
|
||||
if err != nil {
|
||||
closeErr = err
|
||||
return err
|
||||
}
|
||||
go s.relayTCP(conn, rc)
|
||||
return nil
|
||||
case acl.ActionProxy:
|
||||
rc, err := s.HyClient.DialTCP(target.String())
|
||||
if err != nil {
|
||||
closeErr = err
|
||||
return err
|
||||
}
|
||||
go s.relayTCP(conn, rc)
|
||||
return nil
|
||||
case acl.ActionBlock:
|
||||
closeErr = errors.New("blocked in ACL")
|
||||
// caller will abort the connection when err != nil
|
||||
return closeErr
|
||||
case acl.ActionHijack:
|
||||
rc, err := s.Transport.LocalDial("tcp", net.JoinHostPort(arg, strconv.Itoa(target.Port)))
|
||||
if err != nil {
|
||||
closeErr = err
|
||||
return err
|
||||
}
|
||||
go s.relayTCP(conn, rc)
|
||||
return nil
|
||||
default:
|
||||
closeErr = fmt.Errorf("unknown action %d", action)
|
||||
// caller will abort the connection when err != nil
|
||||
return closeErr
|
||||
rc, err := s.HyClient.DialTCP(target.String())
|
||||
if err != nil {
|
||||
closeErr = err
|
||||
return err
|
||||
}
|
||||
go s.relayTCP(conn, rc)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Server) relayTCP(clientConn, relayConn net.Conn) {
|
||||
|
Reference in New Issue
Block a user