One can still take a look to the simple stateless NAPT implementation I did few years ago.
http://9legacy.org/9legacy/patch/nat.diff It works, but it's incomplete. However, I think it's simple enough to be used as an example to work on a more complete implementation. Another approach would be to implement translation in user space instead of kernel space. -- David du Colombier