net/udprelay: set ICMP err immunity sock opt (#16918)

Updates tailscale/corp#31506

Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
Jordan Whited 2025-08-21 13:59:23 -07:00 committed by GitHub
parent b17cfe4aed
commit c85cdabdfc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -458,7 +458,7 @@ func (c *singlePacketConn) WriteBatchTo(buffs [][]byte, addr netip.AddrPort, gen
// reducing packet loss around crypto/syscall-induced delay. // reducing packet loss around crypto/syscall-induced delay.
const socketBufferSize = 7 << 20 const socketBufferSize = 7 << 20
func trySetSocketBuffer(pconn nettype.PacketConn, logf logger.Logf) { func trySetUDPSocketOptions(pconn nettype.PacketConn, logf logger.Logf) {
directions := []sockopts.BufferDirection{sockopts.ReadDirection, sockopts.WriteDirection} directions := []sockopts.BufferDirection{sockopts.ReadDirection, sockopts.WriteDirection}
for _, direction := range directions { for _, direction := range directions {
errForce, errPortable := sockopts.SetBufferSize(pconn, direction, socketBufferSize) errForce, errPortable := sockopts.SetBufferSize(pconn, direction, socketBufferSize)
@ -469,6 +469,11 @@ func trySetSocketBuffer(pconn nettype.PacketConn, logf logger.Logf) {
logf("failed to set UDP %v buffer size to %d: %v", direction, socketBufferSize, errPortable) logf("failed to set UDP %v buffer size to %d: %v", direction, socketBufferSize, errPortable)
} }
} }
err := sockopts.SetICMPErrImmunity(pconn)
if err != nil {
logf("failed to set ICMP error immunity: %v", err)
}
} }
// listenOn binds an IPv4 and IPv6 socket to port. We consider it successful if // listenOn binds an IPv4 and IPv6 socket to port. We consider it successful if
@ -494,7 +499,7 @@ func (s *Server) listenOn(port int) error {
break break
} }
} }
trySetSocketBuffer(uc, s.logf) trySetUDPSocketOptions(uc, s.logf)
// TODO: set IP_PKTINFO sockopt // TODO: set IP_PKTINFO sockopt
_, boundPortStr, err := net.SplitHostPort(uc.LocalAddr().String()) _, boundPortStr, err := net.SplitHostPort(uc.LocalAddr().String())
if err != nil { if err != nil {