Tech Journal Back to Tech Journal

How can I link IPX between two Linux-firewalled networks?

Well, the reason I wanted to do this, was to place StarCraft without having to resort to disconnecting one of the networks from the Internet and dialing in directly from the Windows box. Why would I need to do that? Because the host machine in any StarCraft game needs to have a internet-real IP address. Anyway, bottom line is I wanted to be able to play StarCraft without changing the topography of my network.

OK, I tried various solutions to connect two IPX networks, but the first one that worked was sib. I used sib v1.1, but the same info might hold true for any newer version, if there ever will be such a thing.

Since I run my network fairly closed, I had to make sure that I opened the correct ports. This means editing /etc/host.allow to enable access to UDP port 7820. If you don't know how to do this, figure it out. You may also need to change the ipchains or iptables to allow access. Since I tend to forget the syntax, I will include that here (choose one):

# for 2.2.x kernels
$ ipchains -I input 1 -p UDP -s 0/0 -d 0/0 7820 -j ACCEPT
# for 2.4.x kernels
$ iptables -I INPUT 1 -p udp -s 0/0 -d 0/0 --destination-port 7820 -j ACCEPT

Hopefully, by this point you're computer's UDP port of 7820 is accessable from the Internet (or whatever WAN you're trying to travese). Now to get the IPX bridge working. First, a brief guide to getting the Linux box to read IPX packets off the network. I'm not sure this actually sets up IPX on the network, but it works well enough for playing StarCraft through it.

### load kernel module
$ modprobe ipx
### tell the kernel to make sure an interface+primary are selected
$ ipx_configure --auto_primary on --auto_interface on
### tell it to be internel net 1, and internal net-node 2 (didn't work for me)
$ ipx_internal_net add 1 2
### set up etho as an IPX interface using 803.2
$ ipx_interface add eth0 802.2 3
### check the interface
### (you should see something like 00000003:00000002 or 00000003:<MAC-ADDRESS>
$ ipx_interface check eth0 802.
### start the IPXd routing daemon
### (I'm not sure this is needed for StarCraft, but hey ;-)
$ ipxd

I found ipxd as part of ipxripd-0.7-2cl.i386.rpm (that was the latest version that didn't have any dependencies), and you can find the ipx-kernel stuff usually as part of RedHat 6.0 and above. (Or just search for ipxutils2.2.0.12-5.i386.rpm).

To recap: you now have an IPX-enabled machine which has a UDP port accessable from the Internet. Now, to fit something in between those two facts so that we can play starcraft between the two networks. That's where sib comes into the picture. Just run on both computers:

$ /usr/bin/sib -H remote_computer -p 7820 -i eth0 -c

That was assuming you have LZO installed (and therefore uses compression, which helps a bit). Anyway, replace remote_computer with the other computer you're trying to connect to. (i.e. computer A should list computer B as a remote computer, and vice-versa.)

That's it. You should be able to run StarCraft on the various Windows computers on your LAN. Just use the IPX/SPX protocl, create a game and join it. I've tried playing on low-bandwidth systems, but the IPX part of StarCraft is designed for LANs, and something like a 6K upstream will only last for about 20 minutes before keeling over and dying. (That was with two computers on one side, where one of them was the host. Only one computer was running StarCraft in the second LAN). It ran pretty well within the 6KB/sec upstream limit - smooth, not jumping until it started to die. Do not try running two computers on one LAN and have the other LAN run the host via a 6KB upstream. It dies within less than 10 minutes.

Whew! That was long, but I'd like to avoid having to figure it all out again...

Last updated on 2001-11-14 14:00:00 -0700, by Shalom Craimer

Back to Tech Journal