NAT (Network Address Translation) for BeOS
version 1.5.1
by Richard Burgess
rickb@spy.net / www.rickb.com

What Is it?

This net_server add-on allows your BeOS computer to serve as an Internet router. Unlike the existing IP Forwarding network feature, NAT allows you to use a single assigned IP Address to service all the machines on your network. That means, for example, that you could connect over a PPP connection and all the machines on your network could access the Internet without the need to obtain addresses for each one from your service provider. It is similiar to Linux's IP-Masquerade and BSD's own NAT feature.

What it is not

NAT is NOT a proxy server. Don't configure your web browser or anything else to use a proxy. NAT operates completely transparently.

Installing

With the current version of the BeOS (R4), you will need to put the nat add-on in /boot/beos/system/add-ons/net_server. After doing this, open up the NATConfig preferences app (I'd suggest making a link in your Preferences folder to it). In the Network Interfaces box, you will need to set with network interface you will use for your LAN and which will be your Internet interface. If you have not already configured your Ethernet and/or modem, you'll need to do this first before you can configure NAT. After selecting the interfaces, click the NAT on checkbox and hit restart networking. NAT is now configured! See the sections below on how to tweak the advanced settings and use static port mapping.
NOTE: NAT automatically turns on IP forwarding and requires this feature to operate, so be sure to leave it checked in the Network preferences.

Setting up your LAN

After configuring your machine you will now need to set up the machines on your LAN to use it as the default gateway. Consult the appropriate documentation for those systems on how to do this. You will also need to assign IP addresses from the "unroutable" blocks assigned for this purpose. The class C blocks are 192.168.0.x - 192.168.255.x. Your NAT machine should also use one of these addresses (that will be your gateway IP)

Advanced Settings

There are additional configuration options that you can tweak if you want. Defaults that NAT uses are shown parentheses.

START_PORT (30000) Start of ports that NAT will use for address mapping
END_PORT (60000) End of ports that NAT will use for address mapping
PORT_TIMEOUT (4) Time (in minutes) that a port used for mapping will time out
SOCKET_TIMEOUT (1) Time (in minutes) after which sockets reserved for NAT but unused will be reclaimed by the system
SOCKET_POOL_SIZE (5) The size of the pool of sockets reserved and ready for use.

Static Port Mapping

Static Port Mapping allows you map certain ports on your NAT machine to ports on other machines on your LAN. This allows you to run things like web servers, etc, from other machines through your NAT box.

Currently Tested and Supported Protocols/Apps

HTTP, POP, SMTP, NNTP, telnet, FTP in passive mode and probably others.
The main criteria is if the protocol uses port numbers and ip addresses outside the TCP/IP headers then it probably won't work.

Definitely not Supported

ping (ICMP), FTP in active mode

Source code is available on request. If you are interested in adding support for more protocols let me know as I have provided a simple API to allow support for protocols that require additional translation.

Version history

1.5.1
Fixed bug where the config app wouldn't add its settings if there wasn't already a nat section in the network file.

1.5
GUI interface
Static Port Mapping
Fixed bug where only UDP sockets were being created.
Now looks for FIN flag in TCP packets so we can reclaim the port immediately when a connection closes.
Now waits for threads to die in destructor. This should make net restarts a bit more stable.

1.0 Initial release

And a big thanks to Olaf Seibert for his very thorough testing and great suggestions.