Hello,
I'm having the following problem with IPv6 and a private internal LAN which will be masqueraded to the public internet (I don't want to have public IPs in the LAN because of some static IPs and tracking) . Rules are generated by shorewall.
Problem is that ICMP6 packets source address is not translated by the kernel on the reply when MTU has to be discovered because of too big packets and limited MTU capabilities on the path (happens also on tcp6 which works thereofore not correctly).
# From an internal host on net fd00:1234:5678::/64
ping6 -s 2000 2a02:1234:5678:7::2
/etc/shorewall6/masq
EXT_IF fc00::/7
ip6tables rule:
MASQUERADE all * * fc00::/7 ::/0
# Internal interface
IP6 fd00:1234:5678::9 > 2a02:1234:5678:7::2: frag (0|1432) ICMP6, echo request, seq 1, length 1432
IP6 fd00:1234:5678::9 > 2a02:1234:5678:7::2: frag (1432|576)
IP6 2a02:1234:5678:9abc::115 > fd00:1234:5678::9: ICMP6, packet too big, mtu 1440, length 1240
# External interface
IP6 2001:1234:5678:9abc::1 > 2a02:1234:5678:7::2: frag (0|1432) ICMP6, echo request, seq 1, length 1432
IP6 2001:1234:5678:9abc::1 > 2a02:1234:5678:7::2: frag (1432|576)
IP6 2a02:1234:5678:9abc::115 > 2001:1234:5678:9abc::1: ICMP6, packet too big, mtu 1440, length 1240
Looks to me like a a major kernel bug.
Kernel version is: 4.1.3-201.fc22.x86_64 from Fedora 22
Any ideas?