As most things TCP have their roots in UNIX, you can get a pretty good handle on firewall rules to support bi-directional 100% fully transparent routing by viewing UNIX man pages. The IPFW commands are generally all you need to configure a router for trasnparent proxying. See
http://www.freebsd.org/cgi/man.cgi?query=ipfw&apropos=0&sektion=0&manpath=FreeBSD+5.1-RELEASE+and+Ports&format=htmlI've been doing what you have been doing, disconnecting the router and attaching the modem directly to an inside windows box when I want to host, but, have been thinking about a quick script to quickly let inside machines host without disconnecting my firewall. I'm not sure if the comments above re. divert and foward would do the trick, however. Divert simply send packets to a divert port on your router. Forwarding lets you forward packets to a different machine on your inside box, but, "The fwd action does not change the contents of the packet at all. In particular, the destination address remains unmodified, so packets forwarded to another system will usually be rejected by that system unless there is a matching rule on that system to capture them." I'm not sure if you can configure windows to let you accept packets bound to a different address or if you can create an alias ip address that has the same address as your router without creating some kind of conflict.
I think a more sure bet would be to enable VPN on your router. You'd simply tell your clients to create a windows vpn connection to your router (kinda like what kali does) so that as far as your hosting inside box is concerned, outside connections are on your same local network.
Not all routers support VPN (virtual private networking) however. FreeBSD supports VPN and is a great way to make use of outdated computers.
I too would be very interested in knowing if anyone's done this with just divert or forward rules in their firewall rules, without needing to config their host box to accept packets addressed to the router.