Morty Posted February 18, 2023 (edited) · Report post Всем привет. Есть бордер на Linux. На данный момент у нас 3 FullView, 3 пиринга и несколько даунлинков. Есть задача подключить нового даунлинка и отдать ему только 1 FullView и 1 пиринг по двум разным bgp сессиям. Вторая задача - отдать остальным даунликам best маршруты всех 3-х fullview в одной сессии, а маршруты пиринга в другой сессии. Без vrf не обойтись. В Linux это можно реализовать с помощью ip netns. Думаю создать 6 ip netns, прокинуть в каждый по влану от аплинка, поднять в каждом по отдельной bgp сессии. Первую задачу решу прокидыванием влана от даунлинка в netns с fullview и прокидыванием другого влана в netns с пирингом. После чего подниму по bgp сессии с даунликном в каждом netns. Для второй задачи нужно создать ещё два netns для объединения fullview и пиринга... В общем получится целая куча network namespace и целая куча bgp сессий. Как это всё скажется на производительности? Правильно ли я рассуждаю при выборе подобной схемы? Или без нескольких бордеров не обойтись? Edited February 18, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted February 18, 2023 · Report post 13 минут назад, 1boris сказал: Или без нескольких бордеров не обойтись? Неймспейсы полностью независимы и если производительности хватит то нужды в отдельном железе точно нет. но что-то мне кажется что задача должна решаться проще, на уровне настройки bgpd Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 18, 2023 (edited) · Report post Вопрос именно в том, насколько будет проседать производительность сервера при десяти netns. Или вообще без разницы идёт трафик через 1 netns или через 10 netns? Средствами bgpd я знаю только один способ - навесить на каждую сессию community и отдавать маршруты даунлинкам в зависимости от community. Но тут есть много НО: 1)Даунлинк в таком случае получит только best маршруты, а значит не весь FullView 2)Входящий трафик к даунлинку пойдёт только по одному интерфейсу Если есть ещё варианты, подскажите. Edited February 18, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
orlik Posted February 18, 2023 · Report post 1 наверняка должна быть опция advertise-inactive 2 маркируйте пакет на входе и потом разруливайте куда его маршрутизировать. iptables/iproute такое умеют Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
jffulcrum Posted February 18, 2023 · Report post Вообще, в Linux уже давно завезли и "настоящий" VRF в ядре - Working with Linux VRFs – Das Blinken Lichten , Stefan's Blog - Using VRF (Virtual Routing and Forwarding) on Linux (stbuehler.de) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted February 18, 2023 · Report post 2 часа назад, jffulcrum сказал: Вообще, в Linux уже давно завезли и "настоящий" VRF в ядре - Working with Linux VRFs – Das Blinken Lichten , Stefan's Blog - Using VRF (Virtual Routing and Forwarding) on Linux (stbuehler.de) Ip netns это и есть vrf ну плюс минус и его завезли лет 10 как вопрос производительности Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted February 19, 2023 (edited) · Report post netns не работает нормально в контейнерах... также в контейнерах не работает нормально evpn Edited February 19, 2023 by ne-vlezay80 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 19, 2023 (edited) · Report post orlik, не нашел опцию advertise-inactive в quagga jffulcrum, спасибо за ссылки, немного разобрался, но так и не понял как связать с quagga Наткнулся случайно на FRRouting (форк quagga), не знал о его существовании. Вроде есть поддержка vrf. Edited February 19, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
wed Posted February 19, 2023 · Report post Покрутите Bird. Там можно создавать отдельные таблицы маршрутизации. Что-то вроде - все маршруты с этого пиринга положить вот сюда, и отдать вот туда. vrf нем тоже есть. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 19, 2023 (edited) · Report post wed, спасибо за подсказку, но хочу начать с FRR, так как есть опыт работы с quagga. Если FRR не устроит, то попробую Bird. VRF работает примерно так: Скрытый текст ip link add vrf0 type vrf table 1 ip link add vrf1 type vrf table 2 # ip link set dev vrf0 up ip link set dev vrf1 up # ip link set dev eth0.100 master vrf0 ip link set dev eth0.200 master vrf1 # ip addr add 1.0.0.2/30 dev eth0.100 ip addr add 2.0.0.2/30 dev eth0.200 В bgpd: Скрытый текст router bgp 25001 vrf vrf0 bgp router-id 100.0.0.1/24 neighbor 1.0.0.1 remote-as 25100 neighbor 1.0.0.1 update-source 1.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 neighbor 1.0.0.1 route-map uplink0-in in neighbor 1.0.0.1 route-map uplink0-out out exit-address-family exit ! router bgp 25001 vrf vrf1 bgp router-id 100.0.0.1/24 neighbor 2.0.0.1 remote-as 25200 neighbor 2.0.0.1 update-source 2.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 neighbor 2.0.0.1 route-map uplink1-in in neighbor 2.0.0.1 route-map uplink1-out out exit-address-family exit show bgp vrf vrf0 sum: Скрытый текст IPv4 Unicast Summary (VRF vrf0): BGP router identifier 1.0.0.1, local AS number 25001 vrf-id 14 BGP table version 1 RIB entries 3, using 576 bytes of memory Peers 1, using 724 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc 1.0.0.1 4 25100 22 21 0 0 0 00:01:00 1 0 uplink0 Total number of neighbors 1 show bgp vrf vrf1 sum: Скрытый текст IPv4 Unicast Summary (VRF vrf1): BGP router identifier 2.0.0.1, local AS number 25001 vrf-id 15 BGP table version 1 RIB entries 3, using 576 bytes of memory Peers 1, using 724 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc 2.0.0.1 4 25200 22 21 0 0 0 00:01:00 1 0 uplink1 Total number of neighbors 1 Всё работает из одного процесса bgpd. Пока изучаю документацию. Когда решу свои задачи, опишу решение здесь, может кому-то пригодится. Edited February 19, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted February 19, 2023 · Report post 18 часов назад, ne-vlezay80 сказал: netns не работает нормально в контейнерах... также в контейнерах не работает нормально evpn Это как не работает если вся контейнерная сеть на них и построена? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted February 20, 2023 · Report post >Это как не работает если вся контейнерная сеть на них и построена? Это в непривилигированных контейнерах. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 21, 2023 (edited) · Report post Каким образом ходит трафик между vrf при route-leaking? Нужно как-то связывать два vrf? Edited February 21, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 21, 2023 · Report post Допустим есть два vrf: vrf0 и vrf1. В vrf0 пусть будет fullview. На vrf1 делаю import vrf vrf0 и получаю маршруты с vrf0. Что нужно сделать, чтобы заставить ходить пинг с vrf1 в vrf0 и дальше в мир? Ведь у vrf0 и vrf1 нет общих интерфейсов. К каким интерфейсам привязывать айпишники? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted February 21, 2023 · Report post В 20.02.2023 в 06:45, ne-vlezay80 сказал: >Это как не работает если вся контейнерная сеть на них и построена? Это в непривилигированных контейнерах. Это вы наверно о host network в контейнере Я проверю на стенде на выходных В 19.02.2023 в 16:26, 1boris сказал: wed, спасибо за подсказку, но хочу начать с FRR, так как есть опыт работы с quagga. Если FRR не устроит, то попробую Bird. VRF работает примерно так: Скрыть содержимое ip link add vrf0 type vrf table 1 ip link add vrf1 type vrf table 2 # ip link set dev vrf0 up ip link set dev vrf1 up # ip link set dev eth0.100 master vrf0 ip link set dev eth0.200 master vrf1 # ip addr add 1.0.0.2/30 dev eth0.100 ip addr add 2.0.0.2/30 dev eth0.200 В bgpd: Показать содержимое router bgp 25001 vrf vrf0 bgp router-id 100.0.0.1/24 neighbor 1.0.0.1 remote-as 25100 neighbor 1.0.0.1 update-source 1.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 neighbor 1.0.0.1 route-map uplink0-in in neighbor 1.0.0.1 route-map uplink0-out out exit-address-family exit ! router bgp 25001 vrf vrf1 bgp router-id 100.0.0.1/24 neighbor 2.0.0.1 remote-as 25200 neighbor 2.0.0.1 update-source 2.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 neighbor 2.0.0.1 route-map uplink1-in in neighbor 2.0.0.1 route-map uplink1-out out exit-address-family exit show bgp vrf vrf0 sum: Показать содержимое IPv4 Unicast Summary (VRF vrf0): BGP router identifier 1.0.0.1, local AS number 25001 vrf-id 14 BGP table version 1 RIB entries 3, using 576 bytes of memory Peers 1, using 724 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc 1.0.0.1 4 25100 22 21 0 0 0 00:01:00 1 0 uplink0 Total number of neighbors 1 show bgp vrf vrf1 sum: Показать содержимое IPv4 Unicast Summary (VRF vrf1): BGP router identifier 2.0.0.1, local AS number 25001 vrf-id 15 BGP table version 1 RIB entries 3, using 576 bytes of memory Peers 1, using 724 KiB of memory Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt Desc 2.0.0.1 4 25200 22 21 0 0 0 00:01:00 1 0 uplink1 Total number of neighbors 1 Всё работает из одного процесса bgpd. Пока изучаю документацию. Когда решу свои задачи, опишу решение здесь, может кому-то пригодится. http://xgu.ru/wiki/VRF_в_Linux я не знаю как именно работает ip vrf и пока нет времени проверить - тоже задача на выходные 😞 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted February 21, 2023 · Report post Хм похоже vrf это не netns Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 21, 2023 (edited) · Report post Всё получилось методом тыка Для связи двух vrf не нужны дополнительные veth интерфейсы, как это требуется в netns Об этом не написано ни тут https://www.kernel.org/doc/Documentation/networking/vrf.txt, ни в документации FRR Завтра выложу конфигурацию Edited February 21, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted February 21, 2023 (edited) · Report post Цитата Это вы наверно о host network в контейнере Я проверю на стенде на выходных Я про: lxc exec border1 sh ip link add dev vni-1000 up mtu 9000 type vxlan id 1000 dstport 4789 local 10.127.192.2 ip link set dev vni-1000 address 24:00:72:00:88:01 ip addr add 172.30.255.1/24 dev vni-1000 ip -6 addr add fec0:1000::1/64 dev vni-1000 bridge fdb append 00:00:00:00:00:00 dst 172.18.22.51 dev vni-1000 bridge fdb append 00:00:00:00:00:00 dst 172.18.22.52 dev vni-1000 ... etc bridge fdb delete 00:00:00:00:00:00 dev vni-1000 Operation not permitted Edited February 21, 2023 by ne-vlezay80 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Morty Posted February 24, 2023 (edited) · Report post Приведу небольшой пример использования VRF в Linux на FRRouting 8.4. Может кому-то пригодится. В примере настрою route leaking между созданными VRF и VRF GRT (получу в GRT маршруты от двух аплинков, находящихся в разных VRF), используя FRRouting VPN MP-BGP. AS64500 - наша AS AS64505 - AS аплинка 1 AS64510 - AS аплинка 2 Создаём VRF: Скрытый текст # Создаём vrf для аплинка 1 ip link add vrf0 type vrf table 1 ip link set dev vrf0 up # Создаём vrf для аплинка 2 ip link add vrf1 type vrf table 2 ip link set dev vrf1 up # Привязываем интерфейс аплинка 1 к vrf0 ip link set dev eth0.100 master vrf0 ip link set dev eth0.100 up # Привязываем интерфейс аплинка 2 к vrf1 ip link set dev eth0.200 master vrf1 ip link set dev eth0.200 up # Добавляем ip для аплинка 1 ip addr add 1.0.0.2/30 dev eth0.100 # Добавляем ip для аплинка 2 ip addr add 2.0.0.2/30 dev eth0.200 Конфиг frr.conf: Скрытый текст frr version 8.4.2 frr defaults traditional hostname Border log syslog informational no ipv6 forwarding service integrated-vtysh-config ! router bgp 64500 vrf vrf0 bgp router-id 100.0.0.1 no bgp network import-check neighbor 1.0.0.1 remote-as 64505 neighbor 1.0.0.1 description Uplink1-FullView neighbor 1.0.0.1 update-source 1.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 redistribute connected neighbor 1.0.0.1 soft-reconfiguration inbound neighbor 1.0.0.1 route-map uplink1-in in neighbor 1.0.0.1 route-map uplink1-out out rd vpn export 64505:100 rt vpn export 64505:100 route-map vpn export vrf0-export export vpn exit-address-family exit ! router bgp 64500 vrf vrf1 bgp router-id 100.0.0.2 no bgp network import-check neighbor 2.0.0.1 remote-as 64510 neighbor 2.0.0.1 description Uplink2-FullView neighbor 2.0.0.1 update-source 2.0.0.2 ! address-family ipv4 unicast network 100.0.0.0/24 redistribute connected neighbor 2.0.0.1 soft-reconfiguration inbound neighbor 2.0.0.1 route-map uplink2-in in neighbor 2.0.0.1 route-map uplink2-out out rd vpn export 64510:100 rt vpn export 64510:100 route-map vpn export vrf1-export export vpn exit-address-family exit ! router bgp 64500 bgp router-id 100.0.0.3 ! address-family ipv4 unicast redistribute connected route-map vpn import vrf-default-import rd vpn export 64500:1000 rt vpn import 64505:100 64510:100 import vpn exit-address-family exit ! ip prefix-list our-net seq 10 permit 100.0.0.0/24 ! route-map uplink1-in permit 10 exit ! route-map uplink1-out permit 10 match ip address prefix-list our-net exit ! route-map uplink2-in permit 10 exit ! route-map uplink2-out permit 10 match ip address prefix-list our-net exit ! route-map vrf0-export permit 10 exit ! route-map vrf1-export permit 10 exit ! route-map vrf-default-import permit 10 exit ! С VRF знаком всего несколько дней, жду замечания по конфигу. Edited February 24, 2023 by 1boris Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...