Docker container with GRE network incorrect checksum

I have a server with docker, whose containers connect to the internet via a GRE tunnel. My configuration looks like this (bridge network):

{
    "Subnet": "10.0.0.128/25",
    "Gateway": "10.0.0.129"
}

GRE config on server A:

ip tunnel add gre1 mode gre local (server A) remote (server B) ttl 255
ip addr add 10.0.0.1/24 dev gre1
ip link set gre1 up

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -o gre+ -j SNAT --to-source (server A)
sudo iptables -A FORWARD -d 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -s 10.0.0.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source (server A)

iptables -t nat -A PREROUTING -m tcp  -p tcp -i venet0 -d (server A) -j DNAT --to-destination 10.0.0.2
iptables -t nat -A PREROUTING -m udp -p udp -i venet0 -d (server A) -j DNAT --to-destination 10.0.0.2

GRE config on server B:

ip tunnel add gre1 mode gre local (server B) remote (server A) ttl 255
ip addr add 10.0.0.2/24 dev gre1
ip link set gre1 up

ip rule add from 10.0.0.0/24 table GRE
ip route add default via 10.0.0.1 table GRE

The GRE tunnel has been tested and is working. Outbound traffic from containers to, for example, an HTTP API are working too.

The problem is: when I connect to a Minecraft server inside a docker container, it connect (some packets come through), but doesn’t join.

This is a tcpdump log from my computer (Minecraft client):

    Jens-PC.36024 > (server A).25502: Flags (S), cksum 0x8e27 (incorrect -> 0xf938), seq 2212875319, win 64240, options (mss 1460,sackOK,TS val 794580493 ecr 0,nop,wscale 7), length 0
    (server A).25502 > Jens-PC.36024: Flags (S.), cksum 0x444e (correct), seq 1251234693, ack 2212875320, win 65160, options (mss 1460,sackOK,TS val 1677569834 ecr 794580493,nop,wscale 7), length 0
    Jens-PC.36024 > (server A).25502: Flags (.), cksum 0x8e1f (incorrect -> 0x6f91), ack 1, win 502, options (nop,nop,TS val 794580521 ecr 1677569834), length 0
    Jens-PC.36024 > (server A).25502: Flags (P.), cksum 0x8e33 (incorrect -> 0x90d5), seq 1:21, ack 1, win 502, options (nop,nop,TS val 794580523 ecr 1677569834), length 20
    Jens-PC.36024 > (server A).25502: Flags (P.), cksum 0x8e2f (incorrect -> 0xcf7b), seq 21:37, ack 1, win 502, options (nop,nop,TS val 794580523 ecr 1677569834), length 16
    (server A).25502 > Jens-PC.36024: Flags (.), cksum 0x6f52 (correct), ack 21, win 509, options (nop,nop,TS val 1677569868 ecr 794580523), length 0

Everything in server A’s tcpdump shows up fine, no incorrect packets.

This is a tcpdump log from server B (Minecraft server):

    (my home ip).36024 > 10.0.0.2.25502: Flags (.), cksum 0x7328 (correct), ack 174, win 501, options (nop,nop,TS val 794580561 ecr 1677569870), length 0
    (my home ip).36024 > 10.0.0.2.25502: Flags (P.), cksum 0x18d9 (correct), seq 37:300, ack 174, win 501, options (nop,nop,TS val 794580740 ecr 1677569870), length 263
    10.0.0.2.25502 > (my home ip).36024: Flags (.), cksum 0x896c (incorrect -> 0x708a), ack 300, win 507, options (nop,nop,TS val 1677570092 ecr 794580740), length 0
    10.0.0.2.25502 > (my home ip).36024: Flags (P.), cksum 0x8970 (incorrect -> 0x7bb7), seq 174:178, ack 300, win 507, options (nop,nop,TS val 1677570365 ecr 794580740), length 4
    10.0.0.2.25502 > (my home ip).36024: Flags (P.), cksum 0x898d (incorrect -> 0x13ae), seq 178:211, ack 300, win 507, options (nop,nop,TS val 1677570365 ecr 794580740), length 33