Fix tproxy inbound

This commit is contained in:
世界 2022-07-22 16:18:56 +08:00
parent 7bc7b72c61
commit bcdf71deb3
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
3 changed files with 9 additions and 21 deletions

View file

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

View file

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

View file

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