Allow GRE (IP protocol 47) over Linux router NAT for a subnet
I found the solution.
I did this:
sysctl -w net.netfilter.nf_conntrack_helper=1
Then add
modprobe ip_nat_pptp
I was using Ubuntu 18.04.2 LTS, kernel version 4.15.0-45-generic. There was no need to do anything related with GRE protocol inside iptables PREROUTING, POSTROUTING tables. Adding just above two lines worked.
Did you load nf_nat_proto_gre
kernel module? If you do so the first two lines will likely not be needed anymore.