Different providers for different nat clients

Daniel Hartmeier daniel at benzedrine.cx
Tue Aug 13 12:46:48 UTC 2013


On Tue, Aug 13, 2013 at 04:11:37PM +0400, artem at artem.ru wrote:

> There is a router with 3 interfaces:
> 
> IF1: PROVIDER A
> IF2: PROVIDER B
> IF3: LAN
> 
> Clients served via NAT. There are about 15 clients.
> 
> Now, what i need to do:
> 
> By default all traffic from all clients goes to PROVIDER A via IF1.
> But, if total incoming traffic for any particular client becomes
> over X Mb then that client
> and only that client must be switch for PROVIDER B. The switch must
> be automatic and must
> not use any software on the client side.
> While i know how to count traffic i don't understand how to route
> external traffic to/from
> nat clients on particular external interface.
> 
> Any idea how it is done?

This is called source-based routing, and at least pf and ipfw support
it. Using pf it could look like

  table <overquota>
  nat on IF1 from !IF1 -> IF1
  nat on IF2 from !IF2 -> IF2
  pass in on IF3 route-to (IF2 GW2) from <overquota>

with the default route going through IF1 to GW1.

To add a client to the table, use

  pfctl -t overquota -Ta 192.168.2.3

Subsequent new connections will go out through the second provider.
Existing prior connections will continue to to through the first
provider, unless you explicitly remove the sessions, as in

  pfctl -k 192.168.2.3

Daniel


More information about the freebsd-net mailing list