Hello,

we are trying to run two Linux based servers for routing: one for BGP
daemon only (BGP-box) and one for actual routing (router).
So we have the following setup:

ISP - <bgp traffic only link> - BGP box (with bgp daemon, eBGP-ISP,
iBGP-router) - router (with bgp daemon for read-only basically, iBGP) -
<traffic only link> - ISP

ISP handles all the peerring with the carriers, so we basically have one
uplink (Linux bond) for the traffic, but for redundancy we use 2 different
addresses (ISP routers) for BGP and 2 for router gateways. So we need to
get the routes via BGP.
We use VyOS (debian based software router with customized kernel) with both
servers. VyOS provides some wrappers around configs / terminal interfaces
but I'll provide resulting bgpd configurations at the end
kernel version 3.13.11
bgpd (quagga) version 0.99.20.1

Our IPv4 setup works fine, but IPv6 is completely broken for the routing
purposes. As I understand we can only replace next-hop with the desired
gateway (I can choose it between 2 values based on source ISP BGP address
and community, this is out of this question's scope). This method works
fine for IPv4: I see good routes in BGP routing table, in zebra routing
table and in kernel routing table. However for IPv6 I see link-local
address with source interface built-in to routes, which is fine for
link-local routing overall but we dont need it with next hop redirection.

For example for our bgp box we have 2 interfaces: bond0 - bgp link to ISP,
eth0 - link to our router.
Using only global next-hop rewrite we have the following in BGP table:
BGP table version is 0, local router ID is 10.11.25.3
Status codes: s suppressed, d damped, h history, * valid, > best, i -
internal,
              r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  2001::/32        fd01:1842:400:1126::2
                                                           0 15085 3356
6667 29432 i
*>                  fd01:1842:400:1126::1
                                                           0 15085 3356
6667 29432 i
...
--------
The following is in zebra(?) table
Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3,
       I - ISIS, B - BGP, * - FIB route.

C>* ::1/128 is directly connected, lo
B>* 2001::/32 [20/0] via fe80::d66d:50ff:fe0f:15fb, bond0, 00:05:58
...
--------
And the following is in kernel table (ip -6 route):
2001::/32 via fe80::d66d:50ff:fe0f:15fb dev bond0  proto zebra  metric 1024
...
--------
Using rewrite for local next-hop value we get the same in BGP table, but
for zebra we have
Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3,
       I - ISIS, B - BGP, * - FIB route.

C>* ::1/128 is directly connected, lo
B   2001::/32 [20/0] via fd01:1842:400:1126::1, bond0 inactive, 00:00:23
...
--------
And kernel table does not have entries for BGP values at all.
We have static routes to fd01:1842:400:1126::1 in kernel and zebra tables.

So basically I have the questions:
How to make it work properly?
More specifically: why do we have link-local routes for routes we got from
BGP daemon in zebra table (and kernel consequently)? Why are those zebra
routes always get interface based routes even when I replace link-local
address with non-link-local (just internal network address); even when I
use another link-local address (fe80::/10) to replace original link-local
it does not work because it sets interface route and send packets to wrong
interface (to ISP bgp iface).

Zebra.conf snippet http://pastebin.com/b4gaWE2D
bgpd.conf snippet http://pastebin.com/serQUYxy


Regards,
Dmitriy.
_______________________________________________
Quagga-users mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-users

Reply via email to