I had the right idea about mapping udp packets to another port of the machine. As it turns out, that works just fine.
I took a hub, inserted it between the router and the cable modem and watched packet traffic with my laptop (ethereal is badass). Everything was working as it should. Except when a player named PFARS made a game (always named '3v3 BGH Lag=Ban'). This would indeed lag my machine so bad that I could not connect to any other games on bnet. Watching the packet traffic, it appears that my machine kept attempting to send udp packets to port 6112 (the standard starcraft port) of a machine, while that machine was always sending back the icmp 'address does not exist'. I don't know why this happens with PFARS' games and no others, it is a very odd scenario. Anyway, the solution to playing starcraft on bnet (from inside a nat-firewall), is to map the upd packets originating from the gamer's machine from port 6112 to some arbitrary other port (I picked 9001 and it worked fine). Just watch out for a guy on US West server named PFARS. He will lag your connection. Chris PS I think this is perhaps a bug in the starcraft code. It would be extremely interesting to hook up a starcraft-aware analyzer to ethereal to see where the program is getting stuck. It keeps trying the same address over and over, pretty much as soon as the icmp message comes back, it takes about a half second and the machine tries the address again. This continues as long as I have the patience to watch. Logging completely out of bnet and logging back in worked, as long as PFARS' game wasn't visible on the games board.
