浏览代码

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.
Huang-Huang Bao 2 年之前
父节点
当前提交
42c50d25e1
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      app/tun/packetparse/udp.go

+ 2 - 0
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),