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.  


Reply via email to