Вот маршрут, по которому я закончил. Я проследовал по ссылке, размещенной SashaN в комментариях к ответу Д.Швили, и узнал немного о том, почему бит «не фрагментировать» установлен в UDP-пакетах Linux. Оказывается, это как-то связано с открытием PMTU. Короче говоря, вы можете очистить бит «не фрагментировать» из своих пакетов UDP в Python, используя функцию setsockopts в объекте сокета.
import socket
IP_MTU_DISCOVER = 10
IP_PMTUDISC_DONT = 0 # Never send DF frames.
IP_PMTUDISC_WANT = 1 # Use per route hints.
IP_PMTUDISC_DO = 2 # Always DF.
IP_PMTUDISC_PROBE = 3 # Ignore dst pmtu.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("10.0.0.1", 8000))
s.send("Hello World!") # DF bit is set in this packet
s.setsockopt(socket.SOL_IP, IP_MTU_DISCOVER, IP_PMTUDISC_DONT)
s.send("Hello World!") # DF bit is cleared in this packet