0% acharam este documento útil (0 voto)
5 visualizações14 páginas

Configuração BGP: Equipamentos e Rotas

O documento descreve a configuração de BGP, incluindo fluxos IPv4 e IPv6, tabelas para ASN, prefix-list e route-map, além de detalhes sobre a configuração de vizinhos e grupos de pares. Ele também explica como a netapi gera arquivos de configuração e como gerenciar a criação e remoção de vizinhos na rede. Exemplos de chamadas de API são fornecidos para a criação e remoção de vizinhos, incluindo passos para obter IDs necessários.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
5 visualizações14 páginas

Configuração BGP: Equipamentos e Rotas

O documento descreve a configuração de BGP, incluindo fluxos IPv4 e IPv6, tabelas para ASN, prefix-list e route-map, além de detalhes sobre a configuração de vizinhos e grupos de pares. Ele também explica como a netapi gera arquivos de configuração e como gerenciar a criação e remoção de vizinhos na rede. Exemplos de chamadas de API são fornecidos para a criação e remoção de vizinhos, incluindo passos para obter IDs necessários.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

BGP

• Fluxo v4 e v6

• Neighbor

• Route Map

• Prefix-list

• ASN
ASN
• Tabela asn

• Name: ASN

• Description: nome do rack/


nome acordado

• Tabela asn_equipment
(relaciona o equipamento ao
seu asn)

• Id do equipamento

• Id do asn
Prefix-list
Equipamento DELL: Template DELL:

ip prefix-list web-media-cloud_dev1 ip prefix-list {{ NAME }}


seq 10 permit [Link]/16 le 25 {{ CONFIG }}
seq 100 deny any

ip prefix-list web-media-cloud_dev2
seq 20 permit [Link]/24
seq 100 deny any

ip prefix-list web-media-cloud_devout
seq 100 deny any
Prefix-list
• Tabela list_config_bgp

• Name: identificador do
prefix-list

• Type: P (permit) ou D (deny)

• Config: sendo uma string


deve respeitar a forma
como o template foi criado
e os comandos/expressões
que o equipamento usa.
Route Map
• Tabela route_map

• Name: identificador do route-


map

• Tabela route_map_entry

• Action: P(permit) ou D(deny)

• Order: ordenação

• id_list_config_bgp: associa ao
prefix_list

• id_route_map: indica o
identificador do route_map
Route Map
• Tabela equipment_route_map:
semelhante à flag “created”

• id_equipment: id do
equipamento “local" onde o
neighbor foi configurado

• id_route_map: id do route-
map que já foi configurado
no switch

São duas entradas para cada


equipamento, um para o route-
map in e outro para o out
Route Map
Equipamento DELL: Template DELL:

route-map WEBMEDIACLOUD_DEV_IN permit 1 {% for ENTRY in ENTRIES %}


match ip address web-media-cloud_dev1 route-map {{ NAME }} {{ [Link] }}
{{ [Link] }}
route-map WEBMEDIACLOUD_DEV_IN permit 2 match ip address prefix-list {{ [Link] }}
match ip address web-media-cloud_dev2 {% endfor %}

route-map WEBMEDIACLOUD_DEV_OUT permit 1


match ip address web-media-cloud_devout
Peer Group
• Tabela peer_group (agrupa a
informação sobre os route-
maps

• Name: nome do peer group

• id_route_map_in: id do
route-map das rotas
recebidas

• id_route_map_out: id do
route-map das rotas
anunciadas
Neighbor
• Tabela neighbor_v4 (ipv4)

• Local: equipamento que vai ser


configurado

• id_local_asn: id do asn

• id_local_ip: id do ip da config do
bgp

• Remoto: peer bgp

• id_remote_asn: id do asn do peer

• id_remote_ip: id do ip do peer

• id_peer_group: associa aos route-maps


Neighbor
Template DELL:
Equipamento DELL:
router bgp {{ AS_NUMBER }}
vrf {{ VRF_NAME }}
neighbor [Link] remote-as 65040 neighbor {{ REMOTE_IP }}
description {{ DESCRIPTION }}
neighbor [Link] description None remote-as {{ REMOTE_AS }}
neighbor [Link] fall-over {% if not PASSWORD == None %}
password {{ PASSWORD }}
neighbor [Link] route-map {% endif %}
{% if not TIMER_KEEPALIVE == None %}
WEBMEDIACLOUD_DEV_IN in timers {{ TIMER_KEEPALIVE }} {{ TIMER_TIMEOUT }}
neighbor [Link] route-map {% endif %}
{% if REMOVE_PRIVATE_AS %}
WEBMEDIACLOUD_DEV_OUT out remove-private-AS
{% endif %}
neighbor [Link] next-hop-self {% if COMMUNITY %}
send-community extended
neighbor [Link] send-community {% endif %}
neighbor [Link] soft-reconfiguration fall-over

inbound address-family ipv4 unicast


{% if NEXT_HOP_SELF %}
neighbor [Link] no shutdown next-hop-self
{% endif %}

{% if SOFT_RECONFIGURATION %}
soft-reconfiguration inbound
{% endif %}

{% if not ROUTE_MAP_IN == None %}


route-map {{ ROUTE_MAP_IN }} in
{% endif %}

{% if not ROUTE_MAP_OUT == None %}


route-map {{ ROUTE_MAP_OUT }} out
{% endif %}

no shutdown
Plugin
• A netapi gera três arquivos de configuração. Um para configurar o neighbor, um para
configurar o route-map e outro para configurar o prefix-list.

• A configuração do neighbor sempre vai acontecer. Pra configurar os filtros, a netapi


utiliza a tabela equipment_route_map para o controle. Se os filtros forem utilizados em
mais de um neighbor do mesmo switch, ela não tenta configurar novamente. Exemplo:

• Se há mais de um peer com os mesmos route-maps no mesmo switch (o


equipamento que a netapi conhece como ”local”), ao configurar o primeiro, a api vai
deployar o neighbor, o route-map e o prefix-list. No segundo, vai configurar apenas
o neighbor pois, através da entrada na tabela equipment_route_map ela sabe que
os filtros já foram configurados.

• Na remoção é semelhante, se há mais de um neighbor deployado no mesmo


equipamento com o mesmos route-maps, a netapi vai remover apenas as
configurações do neighbor. Se há apenas um, vai remover o neighbor, os route-
maps e o prefix-list.
Exemplos
1. Criar o neighbor para o servidor

POST /api/v4/neighborv4/ - Essa chamada vai retornar um ID de neighbor.

{
"neighbors": [
{
"local_asn": <ID do AS do switch - vamos decidir e passar pra voces de acordo com onde rodaremos os testes>,
"local_ip": <ID ip do router/switch ToR que sera utilizado para o bgp>,
"remote_asn": <ID do ASN para testes - vamos decidir e passar pra voces>,
"remote_ip": <ID ip do host tsuru que será utilizado para bgp>,
"soft_reconfiguration": true,
"community": true,
"next_hop_self": true,
"peer_group": <vamos decidir e passar pra voces>,
"remove_private_as": false,
"kind": "I"
}
]
}

Ex: [{"id": 3}]

2. Fazer deploy da config do neighbor para o switch


POST /api/v4/neighborv4/deploy/<id>

REMOCAO
1. Remover deploy da config do neighbor para o switch:
DELETE /api/v4/neighborv4/deploy/<id>/
{}

2. Remover entrada do neighbor da networkapi


DELETE /api/v4/neighborv4/<id>/
{}
Exemplos
Exemplo passo a passo incluindo buscas que possam ser necessárias para ter o id de ips, asns e afins para o json de criação do neighbor:

Dado a seguinte máquina:


node: [Link]
ip: [Link]

## Passo 1:
Fazer uma consulta na api pelo ip do host para descobrir o id da rede que esse host se encontra.

GET {{network-api}}/api/v3/ipv4/?fields=networkipv4,id&search={"extends_search":[{"oct1":10,"oct2":224,"oct3":158,"oct4":200}]}

## Passo 2
Utilizando esse id e o nome do ToR extraído do hostname e seguindo a regra de formação combinada (no caso al08, forma-se o nome 'LF-CM-<RACK>-<1|2>'
para os dois leafs).

Com esses dados fazer essa consulta para descobrir o ip do ToR nessa rede.
OBS: O ip do ToR é o último resultado. O primeiro é o ip do ToR em uma rede entre os leafs.

GET {{network-api}}/api/v3/ipv4/?fields=id,networkipv4&search={"extends_search":[{"networkipv4":322656, "ipequipamento__equipamento__nome":"LF-CM-


AL08-1"}]}

Fazer essa consulta para os dois ToR.

## Passo 3
O passo anterior retorna o id do ip, então é necessário fazer a consulta abaixo para cada leaf.

GET {{network-api}}/api/v3/ipv4/2634097
Exemplos
## Passo 4
Descobrir id do ASN do rack

GET {{network-api}}/api/v4/as/?fields=id&search={'custom_search': 'AL08', 'searchable_columns': ['description']}

## Passo 5
Criar o neighbor

POST {{network-api}}/api/v4/neighborv4/
{"neighbors": [{
"local_asn": 3, # Id do AS do switch do rack retornado no passo 4,
"local_ip": 2634097, # Id do IP retornado no passo 2
"remote_asn": <a definir>, # Id do ASN do cluster definido e criado por suptel.
"remote_ip": 2634260, # id do ip retornado no passo 1
"soft_reconfiguration": true,
"community": true,
"next_hop_self": true,
"peer_group": <a definir>, # Id do peer_group criado para o neighbor por suptel
"remove_private_as": false,
"kind": "I" }]}

Você também pode gostar