Browse Source

handle IPv6 address in tproxy

Darien Raymond 8 years ago
parent
commit
0a91893a26
1 changed files with 5 additions and 1 deletions
  1. 5 1
      transport/internet/udp/hub_linux.go

+ 5 - 1
transport/internet/udp/hub_linux.go

@@ -25,10 +25,14 @@ func RetrieveOriginalDest(oob []byte) v2net.Destination {
 		return v2net.Destination{}
 	}
 	for _, msg := range msgs {
-		if msg.Header.Level == syscall.SOL_IP && msg.Header.Type == syscall.IP_ORIGDSTADDR {
+		if msg.Header.Level == syscall.SOL_IP && msg.Header.Type == syscall.IP_RECVORIGDSTADDR {
 			ip := v2net.IPAddress(msg.Data[4:8])
 			port := v2net.PortFromBytes(msg.Data[2:4])
 			return v2net.UDPDestination(ip, port)
+		} else if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == syscall.IP_RECVORIGDSTADDR {
+			ip := v2net.IPAddress(msg.Data[8:24])
+			port := v2net.PortFromBytes(msg.Data[2:4])
+			return v2net.UDPDestination(ip, port)
 		}
 	}
 	return v2net.Destination{}