I have a Linux box running Ubuntu 10.04 with three interfaces: eth0
, eth1
and eth2
. I am planning to use it as a WAN router for 4 public subnets assigned by two different ISP's. Here are the subnets (I have converted the ISP assigned subnets to class C private subnets):
ISP 1
WAN 192.168.0.176/30 gateway 192.168.0.177
LAN 192.168.3.192/29
ISP 2
WAN 192.168.6.208/30 gateway 192.168.6.209
LAN 192.168.9.216/29
/30
subnets face respectives ISPs and /29
subnets face my LAN switch.
This is how IPs are assigned to the interfaces:
LAN interface
eth0 192.168.3.193/29
eth0:0 192.168.9.217/29
ISP 1 interface
eth1 192.168.0.178/30
ISP 2 interface
eth2 192.168.6.210/30
I want to route traffic between respective ISP assigned /30
and /29
subnets separetly. If traffic comes from one ISP's /30
network, it should be routed to that ISPs /29
network and visa versa. I don't mind if traffic originated in one ISP's /29
network destined to the other ISP's /29
network gets routed in my router (without getting it sent to one ISP and comes back other ISP's link).
My aim is to not to buy two routers for two ISP's. How can I achieve this by using iproute2 tables and policy routing?
First, create a routing table for each ISP (only done once):
Then add a default route to each table pointing to the corresponding gateway:
Then add rules to send traffic to these tables based on the source address: