IPv6 Fragmentation
Kristof Provost
kp at FreeBSD.org
Sat Feb 20 12:13:42 UTC 2021
On 20 Feb 2021, at 5:32, Doug Hardie wrote:
>> On 19 February 2021, at 01:48, Michael Tuexen
>> <michael.tuexen at lurchi.franken.de> wrote:
>>
>>> On 19. Feb 2021, at 03:29, Doug Hardie <bc979 at lafn.org> wrote:
>>>
>>> I don't know if this is a feature or a bug. On FreeBSD 9, the
>>> following ping worked:
>>>
>>> ping6 -s 5000 -b 6000 fe80::213:72ff:fec3:180f%dc0
>> I don't have a dc0 interface, but using re0 at one side and bge at
>> the other, I get
>> with FreeBSD CURRENT:
>> tuexen at cirrus:~ % ping6 -s 5000 -b 6000 fe80::2e09:4dff:fe00:c00%re0
>> PING6(5048=40+8+5000 bytes) fe80::aaa1:59ff:fe0c:da92%re0 -->
>> fe80::2e09:4dff:fe00:c00%re0
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=0 hlim=255
>> time=0.393 ms
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=1 hlim=255
>> time=0.419 ms
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=2 hlim=255
>> time=0.354 ms
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=3 hlim=255
>> time=0.446 ms
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=4 hlim=255
>> time=0.421 ms
>> 5008 bytes from fe80::2e09:4dff:fe00:c00%re0, icmp_seq=5 hlim=255
>> time=0.372 ms
>> ^C
>> --- fe80::2e09:4dff:fe00:c00%re0 ping6 statistics ---
>> 6 packets transmitted, 6 packets received, 0.0% packet loss
>> round-trip min/avg/max/std-dev = 0.354/0.401/0.446/0.031 ms
>>
>> Best regards
>> Michael
>>>
>>> It had to be stopped, but it returned the number of ping responses
>>> received along with statistics.
>>>
>>> With FreeBSD 12.2 and 13.0-BETA2, it returns 100% packet loss.
>>> tcpdump shows that it properly fragments the data, sends it, the
>>> other end receives it and sends back the ACKs. The ACKs are
>>> received, but somehow ping doesn't find out that the packets were
>>> received.
>>>
>>> Without the -s and -b arguments, it works and you get 100% packets
>>> received.
>
> I found the problem. pf does not handle IPv6 packets that are
> fragmented the obvious way. I suspect it is because icmp header is
> only in the first fragment. I had to reassemble fragments in pf in
> order to make the large pings work.
>
If you don’t have `scrub fragment reassemble` set then you have to
include something like `pass log inet6 proto ipv6-frag all` to pass
fragmented packets (assuming you block by default).
You really, really want `scrub fragment reassemble` because otherwise
your firewall can be trivially bypassed, but you need one of the two for
fragmented packets to work.
Best regards,
Kristof
More information about the freebsd-net
mailing list