Frequently Asked Questions
What is this thing?
The Linux DirectPlay Masquerading Module is intended to be used with the Linux ip_masq functionality. It is
a loadable module which allows multiple clients behind a masquerading server to use the DirectPlay protocol
for gaming, either as game clients or hosts.
What is a masquerading server?
If you don't know, you probably don't have one or wouldn't be able to install this module yourself anyway.
For more information about Linux masquerading, visit the Linux IP Masquerade Resource webpage.
What games are supported?
In theory, any game that uses DirectPlay. In practice, see the gamelist
to find out what games it has been tested with so far. This version currently only
supports the server port 47624, and the 2300-2400 port range. I've heard possibilities that some DirectPlay
games may use additional ports, and that this module may not handle those. Depending on your masquerading
setup, however, you may not run into any problems with this. I do not know how far back the current port
arrangement goes in the DirectX version history. This module was targetted to the DirectX 7.0 release, but
it may work with earlier versions as well.
What are the system requirements?
Well, that's a good question. I've tested this thing only on a Debian 2.2.14 kernel. Theoretically it should
work with any kernel version that supports a compatible implementation of IP Masquerading functionality. I'm
guessing, however, that it is limited to the 2.2.x series Linux kernels. I don't know enough about this yet
one way or the other to say for sure.
How much is really implemented?
DirectPlay protocol support is pretty barebones at the moment. This module does not do any port conflict checking,
so if multiple clients try to use the same port, it won't know what to do with them :) Given that each client
uses 2 ports, selected at random out of 100 possibilities, the potential for collisions is not too extreme with
just a few clients. However, future versions should handle port conflicts gracefully :) Additionally, forwarding
incoming connections to a local host works fine, but clients on the WAN and any clients connected to the same
game on the LAN won't be able to see each other properly yet. Working on that.
Can I use this thing to run a DirectPlay server?
You sure can! As of version 0.2.00 you can use the "host=www.xxx.yyy.zzz" command when insmod'ing the module
to specify a local host to use as a server. Any incoming DirectPlay connection attempts will be forwarded to
this host. Future versions will hopefully include dynamic host lookups by hostname, as well as the ability
to change the host without having to remove the module and re-insmod'ing it. I've tested this functionality
with three external (Internet) clients connecting to my local host and it worked fine. However, any clients on
your LAN that are ALSO connected to the same game host will not properly communicate with clients connected
from the Internet. See the Known Bugs section of the README for more information about this problem. Finally,
be aware of the inherent limitation in the DirectPlay protocal that only ONE host behind your masquerade server
is supported at a time. Other computers may act as clients to games on the Internet at the same time, but only
one local computer can host a game at a time. This is inherent to the fact that the server port can NOT be specified
by clients connecting to your game, and every incoming connection will always hit the same port.
How safe is it?
I wouldn't put this particular module on any machine you feel might be targetted by any body for any reason.
I'm a complete newbie to Linux kernel/module coding, and there are probably vulnerabilities in this chunk of
code. Not to mention it's probably an unstable little thing that may behave unexpectedly. It was intended primarily
for home users who are running Linux masquerade servers to share a private Internet connection, and shouldn't
pose too much of a problem to anyone with such a setup who knows two cents about what they're doing. However, I
would recommend that, at least until I get a few more polished versions out the door, you don't leave this module
loaded except for when you are actually using it.
What do I do if I don't need your module?
Lots of people don't need to use this module, especially as it is still pretty
developmental. If you have only one machine behind your Linux masquerading
server that is using DirectPlay games, you can just do standard port forwarding
to send the DirectPlay traffic to that host. Use the following rules (assuming
you have the multiport module installed, and your external IP is
<external_ip> and your internal host is <local_ip>) to add the
necessary forwards to IPTABLES:
- iptables -t nat -A PREROUTING -m multiport -p tcp
--destination-port 47624,2300-2400 -d <external_ip> -j DNAT --to
<local_ip>
- iptables -t nat -A PREROUTING -m multiport -p udp
--destination-port 47624,2300-2400 -d <external_ip> -j DNAT --to
<local_ip>