I have two ethernet interfaces in my computer, which is running Ubuntu 9.04. Both interfaces sport static IPs, but use separate gateways. My /etc/network/interfaces
file looks something like this:
auto eth0 eth1 iface eth0 inet static address 10.0.0.5 netmask 255.255.255.0 gateway 10.0.0.1 iface eth1 inet static address 192.168.2.5 netmask 255.255.255.0 gateway 192.168.2.1
I want to have all traffic going to the internet-at-large run through eth0
, but it seems to want to go through eth1
. Is there a way that I can channel my general outbound traffic through eth0
instead and only use eth1
for traffic to its subnet?
The answer should be persistent; that is to say, it should survive reboot without a superuser needing to run a command after restart.
EDIT: as requested, here is the output of my route -n
command:
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1 0.0.0.0 192.168.2.1 0.0.0.0 UG 100 0 0 eth1 0.0.0.0 10.0.0.1 0.0.0.0 UG 100 0 0 eth0
You should only have one default gateway. If you remove the gateway line from eth1, it'll all just work (after networking is restarted).
Remove gateway from eth1 in /etc/network/interfaces and add it as a static route:
With this, 10.0.0.1 will be your default gateway and eth1 will be used only to connect to 192.168.2.0 network
Modifing the routing table with route as suggested will fix this temporarily, but it will revert to it's current state on the next boot.
It would be possible to set route rules in /etc/rc.local or some kind of other init script, but in this case the simplest option is just to remove the gateway from eth1 in the interfaces file.
By removing that gateway that system will still automatically use eth1 as the route 192.168.2/24, but will route all other traffic through eth0.
Look at your current routing table by typing in route. Your machine will use the first default gw it sees in the routing table. This will be denoted by default or 0.0.0.0 as the destination. If you only want eth1 to be used for the local 192.168.2.0/24 network, remove the gateway command. This should make eth1's default gw your only default one.
I've been using this solution for 4+ years, have published it on the Linode wiki, and it's been working flawlessly. Edit
/etc/network/interfaces
and make it match this: