I recently had reason to set up a Linux box with two network interfaces, each with a different IP on a different subnet. I wanted both IPs to be addressable, for no routing/forwarding to be done between the two subnets, and for the Linux box to reply out the same interface that a connection was requested on.
This setup is explained pretty well in the Advanced Routing HOWTO. For anyone running Debian GNU/Linux (at least woody or sarge), here's my /etc/network/interfaces file to accomplish this:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address $ip1 netmask $mask1 network $network1 broadcast $bcast1 gateway $gw1 up ip route add $network1/$cidr1 dev eth0 src $ip1 table T0 && \ ip route add default via $gw1 table T0 && \ ip rule add from $ip1 table T0 down ip rule del from $ip1 table T0 || true auto eth1 iface eth1 inet static address $ip2 netmask $mask2 network $network2 broadcast $bcast2 up ip route add $network2/$cidr2 dev eth1 src $ip2 table T1 && \ ip route add default via $gw2 table T1 && \ ip rule add from $ip2 table T1 down ip rule del from $ip2 table T1 || true
I also needed to:
Network interfaces defined in the interfaces file can be brought up or down with ifup and ifdown. To view link, IP, route, and rule information, use ip link show, ip addr show, ip route show, and ip rule show respectively.