I have a Comtrend ADSL router that routinely fails to sustain connections via NAT (I try HTTP and SSH) to a machine in its internal network.
I can connect for, say, half an hour and then the connection is dropped. Later connection attempts time out until some time passes and I can connect again. Sometimes this times between being able to reconnect is 30 minutes, sometimes is a day.
So, besides attributing this to a crappy router, what other options are there?
Crappy ADSL modems often work much worse in router mode.
I had similar issues with a d-link 2500U: NAT-ed connections freezing, modem maxing ~7Mbps download instead of ~20Mbps in ADSL 2+ mode.
If you can afford a cheap old PC with two network cards, I suggest you to install some Linux distro or BSD flavor on it, set it up as router, put it between the ADSL modem and the internal network, set up the modem to work as bridge. For me, this fixed everything: NAT started to work properly, because it was handled by the PC OS, modem started to max out ~20Mbps.
Of course you can just try to replace the modem, because a PC is worse in terms of power consumption. But a PC running a full-featured modern OS is much more flexible, you can do a lot of specific things with it. There are even a lot of router-oriented options like m0n0wall, ipcop, freesco and others. If you don't want to fiddle a lot with tuning your favorite OS, you could use one of these.