Re: Using DNAT with multiple upstreams

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



That should be implemented with creating a seperate route table, and
create a rule to match source address to that table.

Something like:

edit /etc/iproute2/rt_tables to add a new table

ip route add table <table_name> default via xxxx dev xxx
ip rule add from xxxx table <table_name>

This will give you ability to choose nexthop base on source ip.

On Tue, Dec 18, 2012 at 12:46 PM, Alex Bligh <alex@xxxxxxxxxxx> wrote:
> I have a multihomed configuration as follows:
>
>            Provider A     Provider B
>               ^              ^
>          eth1 |              | eth2
> 192.200.0.2/24 |              | 192.200.1.2/24
>              ROUTERRUNNINGLINUX
>                      | eth3
>                      | 10.10.10.1/24
>                      |
>                   ---+----
>                          |
>                         10.10.10.99/24
>
> Internet connections A and B both inject default routes when
> they are up. I use SNAT on eth1 and eth2 to NAT the range
> on eth3 to the appropriate IP address (well, SNAT on one
> and MASQUERADE on the other for boring reasons). Connection
> B is faster so injects its default route with a lower distance.
> This gives me resilience and uses the fastest connection.
> So far so good.
>
> Now, I also want to use DNAT on eth1 so that incoming connections
> to 10.200.0.2:1234 get mapped to (say) 10.10.10.99:5678. When
> the connection to provider B is down, all this works just fine.
> However, when the connection to provider B is up, the connection
> fails. As far as I can tell, this is because return traffic
> to the external host initiating the connection follows the
> default route with the lowest distance, and goes out provider B
> instead (who knows how it gets NATted).
>
> What I'd really like to do is say "if the connection is in
> your DNAT table, send it out the way it came", but I think
> the DNAT is undone after the routing decision. I can think
> of a pile of ways to solve this, many of which involve
> ugly source routing. I could use the connmark stuff I think.
> I could also (conceivably) SNAT the incoming connection
> to be originated by 192.200.0.1 so that the route out would
> always be via provider A (as that's an interface route).
> I know I have a million options. My question is what is the
> fastest way to do this (with minimal impact on other traffic).
> I'm loathe to go down the ip rule route unless I really need to.
>
> --
> Alex Bligh
> --
> To unsubscribe from this list: send the line "unsubscribe netfilter" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe netfilter" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Netfilter Development]     [Linux Kernel Networking Development]     [Netem]     [Berkeley Packet Filter]     [Linux Kernel Development]     [Advanced Routing & Traffice Control]     [Bugtraq]

  Powered by Linux