Добрый день!
Стоит следующая задача: есть центральная сеть (AS65000, сети 192.168.1.0/24 и 2001:470:xxxx::/64) и несколько дополнительных (AS651yy, сети 172.16.yy.0/24 и 2001:470:yyyy::/64). В каждой сети установлено ровно по одному шлюзу под Linux или FreeBSD, с пакетом Quagga. Шлюзы доп. сетей соединяются с центральной с помощью OpenVPN (топология subnet, для туннелей используются сети 172.18.65.0/24 и 2001:470:tttt::/64, центральная сеть имеет адреса туннеля 172.18.65.1 и 2001:470:tttt::1, дополнительные -- 172.18.65.yy и 2001:470:tttt::yy).
Необходимо настроить BGP таким образом, чтобы:
* Центральной сети были доступны маршруты во все дополнительные сети
* Дополнительным сетям был доступен маршрут в центральную сеть
* Дополнительным сетям НЕ были доступны маршруты между собой
Доступ к некоторым сетям обеспечивается только по IPv4, к части -- по IPv4 и IPv6, к некоторым -- только по IPv6.
На текущий момент конфигурация bgpd на шентральном шлюзе выглядит следующим образом:
bgpd.conf
!
router bgp 65000
bgp router-id 172.0.0.1
!
neighbor 172.18.65.10 remote-as 65110
neighbor 172.18.65.10 prefix-list c10-filter-in in
neighbor 172.18.65.10 prefix-list clients-filter-out out
!
neighbor 172.18.65.11 remote-as 65111
neighbor 172.18.65.11 prefix-list c11-filter-in in
neighbor 172.18.65.11 prefix-list clients-filter-out out
!
neighbor 172.18.65.12 remote-as 65112
neighbor 172.18.65.12 prefix-list c12-filter-in in
neighbor 172.18.65.12 prefix-list clients-filter-out out
!
neighbor 172.18.65.27 remote-as 65127
neighbor 172.18.65.27 prefix-list c27-filter-in in
neighbor 172.18.65.27 prefix-list clients-filter-out out
!
neighbor 2001:470:tttt::27 remote-as 65127
neighbor 2001:470:tttt::27 prefix-list c27-filter6-in in
neighbor 2001:470:tttt::27 prefix-list c27-filter6-out out
!
neighbor 2001:470:tttt::30 remote-as 65130
neighbor 2001:470:tttt::30 prefix-list c30-filter6-in in
neighbor 2001:470:tttt::30 prefix-list c30-filter6-out out
!
neighbor 2001:470:tttt::40 remote-as 65140
neighbor 2001:470:tttt::40 prefix-list c40-filter6-in in
neighbor 2001:470:tttt::40 prefix-list c40-filter6-out out
!
address-family ipv4
network 192.168.1.0/24
neighbor 172.18.16.2 activate
neighbor 172.18.65.10 activate
neighbor 172.18.65.11 activate
neighbor 172.18.65.12 activate
neighbor 172.18.65.27 activate
exit-address-family
!
address-family ipv6
network 2001:470:dc8b:c000::/64
neighbor 2001:470:tttt::27 activate
neighbor 2001:470:tttt::30 activate
neighbor 2001:470:tttt::40 activate
exit-address-family
!
timers bgp 10 30
!
ip prefix-list clients-filter-out seq 20 permit 192.168.1.0/24
ip prefix-list clients-filter-out seq 25 deny any
!
ip prefix-list c10-filter-in seq 20 permit 172.16.10.0/24
ip prefix-list c10-filter-in seq 25 deny any
!
ip prefix-list c11-filter-in seq 20 permit 172.16.11.0/24
ip prefix-list c11-filter-in seq 25 deny any
!
ip prefix-list c12-filter-in seq 20 permit 172.16.12.0/24
ip prefix-list c12-filter-in seq 25 deny any
!
ip prefix-list c27-filter-in seq 20 permit 172.16.27.0/24
ip prefix-list c27-filter-in seq 25 deny any
!
ipv6 prefix-list c27-filter6-in seq 20 permit 2001:470:yy27::/64
ipv6 prefix-list c27-filter6-in seq 25 deny any
ipv6 prefix-list c27-filter6-out seq 20 permit 2001:470:xxxx::/64
ipv6 prefix-list c27-filter6-out seq 25 deny any
!
ipv6 prefix-list c30-filter6-in seq 20 permit 2001:470:yy30::/64
ipv6 prefix-list c30-filter6-in seq 25 deny any
ipv6 prefix-list c30-filter6-out seq 20 permit 2001:470:xxxx::/64
ipv6 prefix-list c30-filter6-out seq 25 deny any
!
ipv6 prefix-list c40-filter6-in seq 20 permit 2001:470:yy40::/48
ipv6 prefix-list c40-filter6-in seq 30 deny any
ipv6 prefix-list c40-filter6-out seq 20 permit 2001:470:xxxx::/64
ipv6 prefix-list c40-filter6-out seq 25 deny any
!
line vty
!
На дополнительном шлюзе сети c27 (доступна по IPv4 и IPv6):
bgpd.conf
!
router bgp 65127
bgp router-id 172.16.27.1
!
neighbor 172.18.65.1 remote-as 65000
neighbor 2001:470:tttt::1 remote-as 65000
!
address-family ipv4
network 172.16.27.1/24
neighbor 172.18.65.1 activate
exit-address-family
!
address-family ipv6
network 2001:470:yy27::/64
neighbor 2001:470:tttt::1 activate
exit-address-family
!
timers bgp 10 30
!
Задача полностью решена для IPv4: все шлюзы дополнительных сетей получают по BGP единственный маршрут через туннель до сети 192.168.1.0/24 и не видят других дополнительных сетей.
Для IPv6 складывается впечатление, что не работают ipv6 prefix-lists вообще: все шлюзы видят все сети.
Нужно, чтобы каждый шлюз в дополнительных сетях получал только один маршрут до сети 2001:470:xxxx::/64.