世界 3 лет назад
Родитель
Сommit
bcdf71deb3
3 измененных файлов с 9 добавлено и 21 удалено
  1. 8 16
      common/redir/tproxy_linux.go
  2. 0 4
      common/redir/tproxy_other.go
  3. 1 1
      inbound/tproxy.go

+ 8 - 16
common/redir/tproxy_linux.go

@@ -16,28 +16,20 @@ import (
 )
 
 func TProxy(fd uintptr, isIPv6 bool) error {
-	err := syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_TRANSPARENT, 1)
-	if err != nil {
-		return err
+	err := syscall.SetsockoptInt(int(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
+	if err == nil {
+		err = syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_TRANSPARENT, 1)
 	}
-	if isIPv6 {
+	if err == nil && isIPv6 {
 		err = syscall.SetsockoptInt(int(fd), syscall.SOL_IPV6, unix.IPV6_TRANSPARENT, 1)
 	}
-	return err
-}
-
-func TProxyUDP(fd uintptr, isIPv6 bool) error {
-	err := syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_RECVORIGDSTADDR, 1)
-	if err != nil {
-		return err
+	if err == nil {
+		err = syscall.SetsockoptInt(int(fd), syscall.SOL_IP, syscall.IP_RECVORIGDSTADDR, 1)
 	}
-	if isIPv6 {
+	if err == nil && isIPv6 {
 		err = syscall.SetsockoptInt(int(fd), syscall.SOL_IPV6, unix.IPV6_RECVORIGDSTADDR, 1)
-		if err != nil {
-			return err
-		}
 	}
-	return nil
+	return err
 }
 
 func GetOriginalDestinationFromOOB(oob []byte) (netip.AddrPort, error) {

+ 0 - 4
common/redir/tproxy_other.go

@@ -12,10 +12,6 @@ func TProxy(fd uintptr, isIPv6 bool) error {
 	return os.ErrInvalid
 }
 
-func TProxyUDP(fd uintptr, isIPv6 bool) error {
-	return os.ErrInvalid
-}
-
 func GetOriginalDestinationFromOOB(oob []byte) (netip.AddrPort, error) {
 	return netip.AddrPort{}, os.ErrInvalid
 }

+ 1 - 1
inbound/tproxy.go

@@ -68,7 +68,7 @@ func (t *TProxy) Start() error {
 		if err != nil {
 			return err
 		}
-		err = redir.TProxyUDP(udpFd, M.SocksaddrFromNet(t.udpConn.LocalAddr()).Addr.Is6())
+		err = redir.TProxy(udpFd, M.SocksaddrFromNet(t.udpConn.LocalAddr()).Addr.Is6())
 		if err != nil {
 			return E.Cause(err, "configure tproxy UDP listener")
 		}