Yay - I modified Sources/Load.php to force the code to use HTTP_X_FORWARDED_FOR rather than REMOTE_ADDR, which seems to have fixed the logged IP address on posts at least.
For reference here is a diff:
# diff Sources/Load.php_ORG Sources/Load.php
770c770
< updateMemberData($id_member, array('id_msg_last_visit' => (int) $modSettings['maxMsgID'], 'last_login' => time(), 'member_ip' => $_SERVER['REMOTE_ADDR'], 'member_ip2' => $_SERVER['BAN_CHECK_IP']));
---
> updateMemberData($id_member, array('id_msg_last_visit' => (int) $modSettings['maxMsgID'], 'last_login' => time(), 'member_ip' => $_SERVER['HTTP_X_FORWARDED_FOR'], 'member_ip2' => $_SERVER['BAN_CHECK_IP']));
894c894
< 'ip' => $_SERVER['REMOTE_ADDR'],
---
> 'ip' => $_SERVER['HTTP_X_FORWARDED_FOR'],
4058c4058
There is still a QueryString.php file which has many places I could do the same, but it doesn't seem to be required for what we need.
Lets see if new registrations gets logged with a real IP rather than 127.0.0.1