We're currently attempting to connect a 4.6 McAfee Agent client to an ePO behind 1:1 NAT. The initial framework package SiteInfo.xml holds the internal address of the ePO server. We're modifying the .xml's (and registry entries) on the client to get to the external address. The initial connection is successful, but the ePO seems to be supplying its internal address and causing the follow-on communicataions to point towards the unreachable internal address (observed through wireshark). We've tried adding ServerIPAddress=<external IP address> based on KB59218, but it didn't resolve the situation.
A secondary issue is that, since there is no DNS in this environment, the Client is constantly placing DHCP Discover calls, probably to identify a DNS server for name resolution.
If you have a DMZ environment, then as Tristan says a remote agent handler in the DMZ would be a good solution. However the ServerIPAddress= option that you mention is normally pretty bulletproof. Check server.ini to make sure that the entry is correct, then restart the ePO services (all three of them), and then once you can log back into the console, check the sitelist.xml in the <epo install folder>\DB folder - is the IP address correct (i.e. is it the external address?)