Skip to content

Instantly share code, notes, and snippets.

@Shikugawa
Last active January 3, 2024 14:16
Show Gist options
  • Save Shikugawa/2a350061ffa7154319d01947d58f4b67 to your computer and use it in GitHub Desktop.
Save Shikugawa/2a350061ffa7154319d01947d58f4b67 to your computer and use it in GitHub Desktop.
/32 maintenance mode
int net0
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
int net1
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
router bgp 65000
bgp router-id 10.255.0.1
bgp bestpath as-path multipath-relax
neighbor PEER peer-group
neighbor PEER remote-as external
neighbor PEER bfd 4 400 400
neighbor net1 interface peer-group PEER
neighbor net2 interface peer-group PEER
neighbor net3 interface peer-group PEER
!
address-family ipv4 unicast
redistribute connected
exit-address-family
!
int net0
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
int net1
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
router bgp 65001
bgp router-id 10.255.0.2
bgp bestpath as-path multipath-relax
neighbor PEER peer-group
neighbor PEER remote-as external
neighbor PEER bfd 4 400 400
neighbor net0 interface peer-group PEER
!
address-family ipv4 unicast
neighbor PEER route-map LB_OUT out
network 1.1.1.1/32
network 2.2.2.2/32
network 3.3.3.3/32
network 4.4.4.4/32
exit-address-family
!
route-map LB_OUT permit 5
match ip address prefix-list lbvip_maint
# no set as-path prependで、as-path-prependの設定を解除できる
set as-path prepend 65001 65001 65001 65001
!
route-map LB_OUT permit 10
match ip address prefix-list lbvip
!
ip prefix-list lbvip permit 1.1.1.1/32
ip prefix-list lbvip permit 2.2.2.2/32
ip prefix-list lbvip permit 3.3.3.3/32
ip prefix-list lbvip permit 4.4.4.4/32
ip prefix-list lbvip_maint permit 1.1.1.1/32
ip prefix-list lbvip_maint permit 2.2.2.2/32
!
int net0
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
int net1
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
router bgp 65001
bgp router-id 10.255.0.3
bgp bestpath as-path multipath-relax
neighbor PEER peer-group
neighbor PEER remote-as external
neighbor PEER bfd 4 400 400
neighbor net0 interface peer-group PEER
!
address-family ipv4 unicast
neighbor PEER route-map LB_OUT out
network 1.1.1.1/32
network 2.2.2.2/32
network 3.3.3.3/32
network 4.4.4.4/32
exit-address-family
!
route-map LB_OUT permit 5
match ip address prefix-list lbvip_maint
# no set as-path prependで、as-path-prependの設定を解除できる
set as-path prepend 65001 65001 65001 65001
!
route-map LB_OUT permit 10
match ip address prefix-list lbvip
!
ip prefix-list lbvip permit 1.1.1.1/32
ip prefix-list lbvip permit 2.2.2.2/32
ip prefix-list lbvip permit 3.3.3.3/32
ip prefix-list lbvip permit 4.4.4.4/32
ip prefix-list lbvip_maint permit 1.1.1.1/32
ip prefix-list lbvip_maint permit 2.2.2.2/32
!
int net0
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
int net1
ipv6 nd ra-interval 3
no ipv6 nd suppress-ra
!
router bgp 65001
bgp router-id 10.255.0.4
bgp bestpath as-path multipath-relax
neighbor PEER peer-group
neighbor PEER remote-as external
neighbor PEER bfd 4 400 400
neighbor net0 interface peer-group PEER
!
address-family ipv4 unicast
neighbor PEER route-map LB_OUT out
network 1.1.1.1/32
network 2.2.2.2/32
network 3.3.3.3/32
network 4.4.4.4/32
exit-address-family
!
route-map LB_OUT permit 5
match ip address prefix-list lbvip_maint
# no set as-path prependで、as-path-prependの設定を解除できる
set as-path prepend 65001 65001 65001 65001
!
route-map LB_OUT permit 10
match ip address prefix-list lbvip
!
ip prefix-list lbvip permit 1.1.1.1/32
ip prefix-list lbvip permit 2.2.2.2/32
ip prefix-list lbvip permit 3.3.3.3/32
ip prefix-list lbvip permit 4.4.4.4/32
ip prefix-list lbvip_maint permit 1.1.1.1/32
ip prefix-list lbvip_maint permit 2.2.2.2/32
!
postinit:
- cmds:
- cmd: docker cp frr.conf.R0 R0:/etc/frr/frr.conf
- cmd: docker cp frr.conf.R1 R1:/etc/frr/frr.conf
- cmd: docker cp frr.conf.R2 R2:/etc/frr/frr.conf
- cmd: docker cp frr.conf.R3 R3:/etc/frr/frr.conf
- cmd: docker exec R0 /usr/lib/frr/frr start
- cmd: docker exec R1 /usr/lib/frr/frr start
- cmd: docker exec R2 /usr/lib/frr/frr start
- cmd: docker exec R3 /usr/lib/frr/frr start
nodes:
- name: S0
image: slankdev/frr
interfaces:
- { name: net0, type: direct, args: R0#net0 }
- name: R0
image: slankdev/frr
sysctls:
- sysctl: net.ipv4.ip_forward=1
- sysctl: net.ipv4.conf.all.rp_filter=0
- sysctl: net.ipv4.conf.lo.rp_filter=0
- sysctl: net.ipv6.conf.all.disable_ipv6=0
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv4.fib_multipath_hash_policy=1
interfaces:
- { name: net0, type: direct, args: S0#net0 }
- { name: net1, type: direct, args: R1#net0 }
- { name: net2, type: direct, args: R2#net0 }
- { name: net3, type: direct, args: R3#net0 }
- name: R1
image: slankdev/frr
sysctls:
- sysctl: net.ipv4.ip_forward=1
- sysctl: net.ipv4.conf.all.rp_filter=0
- sysctl: net.ipv4.conf.lo.rp_filter=0
- sysctl: net.ipv6.conf.all.disable_ipv6=0
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv4.fib_multipath_hash_policy=1
interfaces:
- { name: net0, type: direct, args: R0#net1 }
- { name: net1, type: direct, args: S1#net0 }
- name: S1
image: slankdev/frr
interfaces:
- { name: net0, type: direct, args: R1#net1 }
- name: R2
image: slankdev/frr
sysctls:
- sysctl: net.ipv4.ip_forward=1
- sysctl: net.ipv4.conf.all.rp_filter=0
- sysctl: net.ipv4.conf.lo.rp_filter=0
- sysctl: net.ipv6.conf.all.disable_ipv6=0
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv4.fib_multipath_hash_policy=1
interfaces:
- { name: net0, type: direct, args: R0#net2 }
- { name: net1, type: direct, args: S2#net0 }
- name: S2
image: slankdev/frr
interfaces:
- { name: net0, type: direct, args: R2#net1 }
- name: R3
image: slankdev/frr
sysctls:
- sysctl: net.ipv4.ip_forward=1
- sysctl: net.ipv4.conf.all.rp_filter=0
- sysctl: net.ipv4.conf.lo.rp_filter=0
- sysctl: net.ipv6.conf.all.disable_ipv6=0
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv6.conf.all.forwarding=1
- sysctl: net.ipv4.fib_multipath_hash_policy=1
interfaces:
- { name: net0, type: direct, args: R0#net3 }
- { name: net1, type: direct, args: S3#net0 }
- name: S3
image: slankdev/frr
interfaces:
- { name: net0, type: direct, args: R3#net1 }
node_configs:
- name: S0
cmds:
- cmd: ip addr add 10.1.0.2/24 dev net0
- cmd: ip route replace default via 10.1.0.1
- name: R0
cmds:
- cmd: ip addr add 10.255.0.1/32 dev lo
- cmd: ip addr add 10.0.0.1/24 dev net0
- cmd: ip addr add 10.1.0.10/24 dev net1
- cmd: ip addr add 10.1.0.20/24 dev net2
- cmd: ip addr add 10.1.0.30/24 dev net3
- name: R1
cmds:
- cmd: ip addr add 10.255.0.2/32 dev lo
- cmd: ip addr add 10.0.0.11/24 dev net0
- cmd: ip addr add 192.168.0.1/24 dev net1
# VIP
- cmd: ip addr add 1.1.1.1/32 dev lo
- cmd: ip addr add 2.2.2.2/32 dev lo
- cmd: ip addr add 3.3.3.3/32 dev lo
- cmd: ip addr add 4.4.4.4/32 dev lo
- cmd: ip route replace default via 10.0.0.1
- name: S1
cmds:
- cmd: ip addr add 192.168.0.2/24 dev net0
- cmd: ip route replace default via 192.168.0.1
- cmd: sh -c "echo S1 > index.html"
- cmd: nohup python3 -m http.server 80 &
- name: R2
cmds:
- cmd: ip addr add 10.255.0.3/32 dev lo
- cmd: ip addr add 10.0.0.21/24 dev net0
- cmd: ip addr add 192.168.0.1/24 dev net1
# VIP
- cmd: ip addr add 1.1.1.1/32 dev lo
- cmd: ip addr add 2.2.2.2/32 dev lo
- cmd: ip addr add 3.3.3.3/32 dev lo
- cmd: ip addr add 4.4.4.4/32 dev lo
- cmd: ip route replace default via 10.0.0.1
- name: S2
cmds:
- cmd: ip addr add 192.168.0.2/24 dev net0
- cmd: ip route replace default via 192.168.0.1
- cmd: sh -c "echo S2 > index.html"
- cmd: nohup python3 -m http.server 80 &
- name: R3
cmds:
- cmd: ip addr add 10.255.0.4/32 dev lo
- cmd: ip addr add 10.0.0.31/24 dev net0
- cmd: ip addr add 192.168.0.1/24 dev net1
# VIP
- cmd: ip addr add 1.1.1.1/32 dev lo
- cmd: ip addr add 2.2.2.2/32 dev lo
- cmd: ip addr add 3.3.3.3/32 dev lo
- cmd: ip addr add 4.4.4.4/32 dev lo
- cmd: ip route replace default via 10.0.0.1
- name: S3
cmds:
- cmd: ip addr add 192.168.0.2/24 dev net0
- cmd: ip route replace default via 192.168.0.1
- cmd: sh -c "echo S3 > index.html"
- cmd: nohup python3 -m http.server 80 &
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment