We are a small company which is dual-homed using BGP to two seperate providers. We have two routers each speaking EBGP to our providers and speaking IBGP to each other. Router A has a DS3 to provider A and router B has a 3MBps multilink pipe to provider B. We want traffic to both come in and go out through provider A as much as possible. What we used to do to achieve this is set the local preference on Router B for routes learned via Provider B to be lower and then set the local preference for routes learned via Provider A on Router A to be higher for outbound traffic. For inbound traffic we would set as-path prepend on RouterB for our block announcements. We are announcing a single /24 network.
Recently we switched provider B to a new provider. This provider has numerous private peering arrangments with different networks. So when I as-path prepend, I still get some traffic inbound over link B because of the peering our provider has with the networks we are trying to access and that are trying to access us. This has always been the case but now many more prefixes reach us via the B link than before. Recently I abandoned this as-path prepending in favor of a community that I send to our provider B which essentially sets the local preference on their network for our prefix to be lower than what is learned through our provider A. The problem with this is that despite us setting the local preference on routes learned from provider B lower in our AS (mostly because the routes being learned are of a more specific prefix from provider B), a certain number of prefixes still get installed in my AS as going out through Provider B. Since the local preference is set on their network for my announced prefixes, when I try and send traffic through them that traffic dies at their peer router. This results in certain prefixes not being able to reach us. Another issue is that my community setup for provider B would work good if they were to summarize routes some, which they don't seem to be doing. for example, I get a route for x.x.0.0/17 and a route for x.x.0.0/18 for them. Same network just different lengths. Provider A only sends the /17 so when connecting to this network BGP uses the /18 route through provider B where the traffic dies. If they would summarize then I would just get the /17 from both providers, the local preference would install the route to provider A and everything would work fine.
So I would like some creative ideas of how to fix this issue. My ideas are:
1. Send the local-preference community to them and filter routes learned from them such that no routes get learned from provider B. Then add a static default route to them on Router B.
2. Have provider B only send a default route to me so that if a failure occurs on provider A then networks will fall out and the static route will take over on router B and send traffic through provider B.
3. Have provider B summarize on their router so more specific routes are install in my AS learned from provider A.
Would like to keep getting full route tables from both providers for routing flexibility in my AS. I understand the path prepending debate amongst Internet engineers and if its really an effective solution to drive inbound traffic through one link over another. It seems to be the standard way to do this though based on my reading. I am including our configurations as well to see if anyone can spot an error in my setup. Hopefully I have explained this fully in such a way that it makes sense.
Thanks in advance for your help.