Kein Wunder, GRE zu natten ist schwierig, bis unmöglich, und über Carrier Grade Nat kann man es grundsätzlich vergessen.
GRE besitzt im Gegensatz zu TCP und UDP keine Portnummern, was NAT Algorithmen aber brauchen um mehrere Clients hinter einer öffentlichen IP darzustellen.
Kleine Homerouter haben den Vorteil dass hinter ihnen meist nur ein PPTP Client sitzt, sie können also nach dem TCP/1723 Handshake ein Forwarding das GRE Protokolles an die (eine) Client-IP erstellen. Dass geht aber nur bei einem Client mit einer Session. Deswegen ist das ganze auch bei CGN nicht möglich, denn wenn's nur für einen der von der öffentlichen IP-Adresse dargestellten Kunden funktioniert, dann lasst man's frisch gleich.
Es gibt wohl noch zusätzliche nat-helper für den Linux kernel, die das noch besser machen (das mod-ipt-nathelper-extra
Openwrt Packet, zb). Aber für CGN kannst du's vergessen.
Stört mich persönlich eigentlich gar nicht, denn es ist Zeit das PPTP ausstirbt. Alle halbwegs aktuellen VPN Technologien benutzen kein GRE/ESP mehr, oder haben zumindest einen UDP Fallback.