NAT'ing two sub-nets thru Linux

Scope

This page describes how to configure Linux to properly route network traffic between two separate networks. This works the same for wireless and wired connections.

IP Address of Middle

Have a computer that has a NIC with an IP address on each network. I'm not sure if this is called a router or a bridge or something else. For this page, I call this computer the "middle". Use ifconfig to verify that each network card is up. Try pinging a host on each network as a second check.

Routing of Middle

Check the routing for each of the cards in the middle. If pinging failed, it was probably because routing is broken. Use netstat -nr to quickly see the routes to each subnet. Then, just add routes to the appropriate NIC for each subnet. Adding a route will look like this:

route add -net 192.168.0.0 netmask 255.255.255.0 dev eth0
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1

NAT in Middle

Turn on NAT'ing on the middle:

echo 1 > /proc/sys/net/ipv4/ip_forward

Route the clients

For each client machine, simply adjust the routing to use the middle as a gateway. I'm assuming the middle has the IP address of .5 in each network (eg 192.168.0.5 and 192.168.1.5).

A computer on the 192.168.1.0 network would use the following command to NAT to 192.168.0.0:

route add -net 192.168.0.0 netmask 255.255.255.0 gateway 192.168.1.5 dev eth0

This tells the the client machine that all 192.168.0.x traffic goes thru eth0 to 192.168.1.5 for further routing. At that point it will use the routing tables in middle jump to the 192.168.0.x subnet and go to the target machine.

Your rating: None Average: 5 (1 vote)