Skip to content

Instantly share code, notes, and snippets.

@takehaya
Last active March 22, 2023 03:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takehaya/bf73fd782c91e040bfc09890f55be24e to your computer and use it in GitHub Desktop.
Save takehaya/bf73fd782c91e040bfc09890f55be24e to your computer and use it in GitHub Desktop.
cml2のubuntuでcloudinitを行う際にexabgpとfrrをインストールしておく例です。鍵はいい感じに好きなのに変えておいて使ってください
#cloud-config
hostname: exabgp1
manage_etc_hosts: True
timezone: Asia/Tokyo
system_info:
default_user:
name: cisco
password: cisco
chpasswd: { expire: False }
ssh_pwauth: True
ssh_authorized_keys:
- "<your insert key>"
packages:
- unzip
- make
- python3
- python3-pip
write_files:
- path: /root/install-exabgp.sh
permissions: 0744
owner: root
content: |
#!/usr/bin/env bash
set -e
apt-get update
curl -sSL https://install.python-poetry.org | python3 -
wget https://github.com/Exa-Networks/exabgp/archive/refs/heads/main.zip
unzip main.zip
pushd exabgp-main
make build
pip install --system ./dist/exabgp-5.0.0-py3-none-any.whl
cat << EOF >/etc/systemd/system/exabgp.service
[Unit]
Description=ExaBGP
Documentation=man:exabgp(1)
Documentation=man:exabgp.conf(5)
Documentation=https://github.com/Exa-Networks/exabgp/wiki
After=network.target
ConditionPathExists=/etc/exabgp/exabgp.conf
[Service]
User=exabgp
Group=exabgp
Environment=exabgp_daemon_daemonize=false
RuntimeDirectory=exabgp
RuntimeDirectoryMode=0750
ExecStartPre=-/usr/bin/mkfifo /run/exabgp/exabgp.in
ExecStartPre=-/usr/bin/mkfifo /run/exabgp/exabgp.out
ExecStart=/usr/local/bin/exabgp /etc/exabgp/exabgp.conf
ExecReload=/bin/kill -USR1 $MAINPID
Restart=always
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
popd
mkdir /etc/exabgp
cat << EOF > /etc/exabgp/exabgp.conf
neighbor 10.0.0.2 {
router-id 10.0.0.1;
local-address 10.0.0.1;
local-as 65000;
peer-as 65000;
family {
ipv4 mup;
ipv6 mup;
}
announce {
ipv4 {
mup \
mup-isd 10.0.1.0/24 rd 100:100 \
next-hop 2001::1 \
extended-community [ target:10:10 ] \
bgp-prefix-sid-srv6 ( l3-service 2001:db8:1:1:: 0x48 [64,24,16,0,0,0] );
mup \
mup-dsd 10.0.0.1 rd 100:100 \
next-hop 2001::2 \
extended-community [ target:10:10 mup:10:10 ] \
bgp-prefix-sid-srv6 ( l3-service 2001:db8:1:1:: 0x13 [64,24,16,0,0,0] );
mup \
mup-t1st 192.168.0.1/32 rd 100:100 teid 12345 qfi 9 endpoint 10.0.0.1 \
next-hop 10.0.0.2 \
extended-community [ target:10:10 ];
mup \
mup-t2st 10.0.0.1 rd 100:100 teid 12345/32 \
next-hop 10.0.0.2 \
extended-community [ target:10:10 mup:10:10 ];
}
ipv6 {
mup \
mup-isd 2001::/64 rd 100:100 \
next-hop 2001::2 \
extended-community [ target:10:10 ] \
bgp-prefix-sid-srv6 ( l3-service 2001:db8:1:1:: 0x47 [64,24,16,0,0,0] );
mup \
mup-dsd 2001::1 rd 100:100 \
next-hop 2001::2 \
extended-community [ target:10:10 mup:10:10 ] \
bgp-prefix-sid-srv6 ( l3-service 2001:db8:2:2:: 0x18 [64,24,16,0,0,0] );
mup \
mup-t1st 2001:db8:1:1::1/128 rd 100:100 teid 12345 qfi 9 endpoint 2001::1\
next-hop 10.0.0.2 \
extended-community [ target:10:10 ];
mup \
mup-t2st 2001::1 rd 100:100 teid 12345/32 \
next-hop 10.0.0.2 \
extended-community [ target:10:10 mup:10:10 ];
}
}
}
EOF
groupadd --system exabgp
useradd --system -d /var/lib/exabgp -s /bin/bash -g exabgp exabgp
systemctl enable exabgp
systemctl start exabgp
- path: /etc/netplan/50-cloud-init.yaml
content: |
network:
ethernets:
ens2:
dhcp4: true
ens3:
dhcp4: false
ens4:
dhcp4: false
version: 2
- path: /root/install-frr.sh
permissions: 0744
owner: root
content: |
curl -s https://deb.frrouting.org/frr/keys.asc | apt-key add -
echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) frr-stable | tee -a /etc/apt/sources.list.d/frr.list
apt-get update && apt-get install -y frr frr-pythontools
runcmd:
- sudo netplan apply
- sudo bash /root/install-exabgp.sh
- sudo bash /root/install-frr.sh
@takehaya
Copy link
Author

これが正常動作してるかはこんな感じの雰囲気で確認できる。

cisco@exabgp1:~$ sudo exabgp-cli show adj-rib out
command: show adj-rib out
neighbor 10.0.0.2 ipv4 mup mup:isd::100:100:10.0.1.0/24
neighbor 10.0.0.2 ipv4 mup mup:dsd::100:100:10.0.0.1
neighbor 10.0.0.2 ipv4 mup mup:t1st::100:100:192.168.0.1/32:12345:9:32:10.0.0.1
neighbor 10.0.0.2 ipv4 mup mup:t2st::100:100:12345:32:10.0.0.1
neighbor 10.0.0.2 ipv6 mup mup:isd::100:100:2001::/64
neighbor 10.0.0.2 ipv6 mup mup:dsd::100:100:2001::1
neighbor 10.0.0.2 ipv6 mup mup:t1st::100:100:2001:db8:1:1::1/128:12345:9:128:2001::1
neighbor 10.0.0.2 ipv6 mup mup:t2st::100:100:12345:128:2001::1

コンフィグを書き換えるときはvim /etc/exabgp/exabgp.conf でよしなにする感じ。その後は sudo exabgp-cli reloadとかで更新ができるはず

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment