From 3de5c5fd25b2d64497652fc29b8858d258b79e17 Mon Sep 17 00:00:00 2001 From: Huang-Huang Bao Date: Sun, 29 Oct 2023 07:34:48 +0800 Subject: [PATCH] fix: set TTL for incoming UDP IP packets from TUN with PacketAddr dispatcher Fixes UDP packets being dropped in non-local routing path(e.g. forwarding to LAN or container veth) due to 0-TTL. --- app/tun/packetparse/udp.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/tun/packetparse/udp.go b/app/tun/packetparse/udp.go index 5f66e2ef7c9..8e5cdd19b8a 100644 --- a/app/tun/packetparse/udp.go +++ b/app/tun/packetparse/udp.go @@ -78,6 +78,7 @@ func constructIPv4UDPPacket(src, dst net.Destination, data []byte) ([]byte, erro Protocol: layers.IPProtocolUDP, SrcIP: src.Address.IP(), DstIP: dst.Address.IP(), + TTL: 64, // set TTL to a reasonable non-zero value to allow non-local routing } udp := &layers.UDP{ SrcPort: layers.UDPPort(src.Port), @@ -103,6 +104,7 @@ func constructIPv6UDPPacket(src, dst net.Destination, data []byte) ([]byte, erro NextHeader: layers.IPProtocolUDP, SrcIP: src.Address.IP(), DstIP: dst.Address.IP(), + HopLimit: 64, } udp := &layers.UDP{ SrcPort: layers.UDPPort(src.Port),