first commit
This commit is contained in:
commit
bb377472b0
|
@ -0,0 +1,5 @@
|
|||
wit-hypervisor (1.0) unstable; urgency=low
|
||||
|
||||
* Initial release.
|
||||
|
||||
-- Toby Paler <toby@wit.com> Wed, 25 Jul 2018 22:54:00 +0100
|
|
@ -0,0 +1 @@
|
|||
7
|
|
@ -0,0 +1,14 @@
|
|||
Source: wit-hypervisor
|
||||
Section: config
|
||||
Priority: extra
|
||||
Maintainer: toby <toby@wit.com>
|
||||
Build-Depends: debhelper (>= 7.0.0~), config-package-dev (>= 4.15), lynx
|
||||
Standards-Version: 3.9.2
|
||||
|
||||
Package: wit-hypervisor
|
||||
Architecture: all
|
||||
Depends: ${misc:Depends}, sed, tcpdump, mtr-tiny, iproute2, ifupdown, ipmitool, iptables, lldpd, strongswan, telnet, netcat, fping, curl, wget, ifstat, rsyslog, ncurses-term, net-tools, bridge-utils, vlan
|
||||
Provides: ${diverted-files}
|
||||
Conflicts: ${diverted-files}
|
||||
Description: Installs basic network packages and
|
||||
configures the box as hypervisor or datanode.
|
|
@ -0,0 +1,3 @@
|
|||
wit-hypervisor package.
|
||||
|
||||
Author: Toby <toby@wit.com>
|
|
@ -0,0 +1,55 @@
|
|||
#!/bin/sh
|
||||
# postinst script for #PACKAGE#
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <postinst> `abort-remove'
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
|
||||
systemctl stop systemd-networkd.socket
|
||||
systemctl stop systemd-networkd.service
|
||||
systemctl stop systemd-networkd-wait-online
|
||||
systemctl disable systemd-networkd.service
|
||||
systemctl disable systemd-networkd.socket
|
||||
systemctl disable systemd-networkd-wait-online
|
||||
|
||||
systemctl enable firewall
|
||||
systemctl restart systemd-timesyncd
|
||||
systemctl restart strongswan
|
||||
|
||||
update-grub
|
||||
|
||||
sysctl -p /etc/sysctl.d/10-frr.conf
|
||||
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,65 @@
|
|||
#!/bin/sh
|
||||
# preinst script for #PACKAGE#
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <new-preinst> `install'
|
||||
# * <new-preinst> `install' <old-version>
|
||||
# * <new-preinst> `upgrade' <old-version>
|
||||
# * <old-preinst> `abort-upgrade' <new-version>
|
||||
# for details, see https://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
install|upgrade)
|
||||
|
||||
[ -z "$NODE_ID" ] && export NODE_ID=$(ip -4 -br addr | grep 10.0. | awk '{ print $3 }' | awk 'BEGIN{FS="[./]"} { print $4 }')
|
||||
|
||||
MGMT_ID=$(ip -4 -br addr | grep 10.0. | awk '{ print $3 }' | awk 'BEGIN{FS="[./]"} { print $3 }')
|
||||
|
||||
|
||||
[ "$MGMT_ID" -ge 0 -a "$MGMT_ID" -lt 16 ] && export DOMAINNAME=.usw1.wit.com
|
||||
[ "$MGMT_ID" -ge 16 -a "$MGMT_ID" -lt 32 ] && export DOMAINNAME=.usw2.wit.com
|
||||
|
||||
|
||||
[ ${HOSTNAME:0:1} = h ] && export HOSTTYPE=hypervisor
|
||||
[ ${HOSTNAME:0:1} = d ] && export HOSTTYPE=datanode
|
||||
|
||||
|
||||
[ $HOSTTYPE = hypervisor -a $DOMAINNAME = .usw1.wit.com ] && export TIER_ID=2
|
||||
[ $HOSTTYPE = datanode -a $DOMAINNAME = .usw1.wit.com ] && export TIER_ID=4
|
||||
[ $HOSTTYPE = hypervisor -a $DOMAINNAME = .usw2.wit.com ] && export TIER_ID=18
|
||||
[ $HOSTTYPE = datanode -a $DOMAINNAME = .usw2.wit.com ] && export TIER_ID=20
|
||||
|
||||
|
||||
if [ -z "$TIER_ID" ]; then
|
||||
echo "Unable to autodetect TIER_ID, looks like we deal with a special node, please set in environment"
|
||||
exit 2
|
||||
fi
|
||||
if [ -z "$DOMAINNAME" ]; then
|
||||
echo "Unable to autodetect DOMAINNAME, looks like we deal with a special case, please set in environment and/or update the code"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
|
||||
;;
|
||||
|
||||
abort-upgrade)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "preinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/make -f
|
||||
|
||||
%:
|
||||
dh $@ --with=config-package
|
|
@ -0,0 +1 @@
|
|||
3.0 (native)
|
|
@ -0,0 +1 @@
|
|||
/etc/systemd/network/*
|
|
@ -0,0 +1,14 @@
|
|||
files/vrf.conf etc/iproute2/rt_tables.d
|
||||
files/vrf-dhcp-enter etc/dhcp/dhclient-enter-hooks.d
|
||||
files/vrf-dhcp-exit etc/dhcp/dhclient-exit-hooks.d
|
||||
files/rc.local etc
|
||||
files/10-frr.conf etc/sysctl.d
|
||||
files/wit-gc usr/local/bin
|
||||
files/resolv.conf etc
|
||||
files/bashrc-witaddon root
|
||||
files/qemu-ifdown etc/libvirt/hooks
|
||||
files/qemu-ifup-public etc/libvirt/hooks
|
||||
files/qemu-ifup etc/libvirt/hooks
|
||||
files/firewall etc/init.d
|
||||
files/frr.conf etc/frr
|
||||
files/interfaces etc/network
|
|
@ -0,0 +1,9 @@
|
|||
/etc/network/interfaces sed -e "s/TIERID/$TIER_ID/g"
|
||||
/etc/frr/frr.conf sed -e "s/VTEPINDEX/$NODE_ID/" -e "s/TIERID/$TIER_ID/" -e "s/TIERASN/$(printf "%03d" $TIER_ID)/" -e "s/VTEPASN/$(printf "%03d" $NODE_ID)/"
|
||||
/etc/hosts sed -e "/.*debcore1/d" -e "/.*$MYHOSTNAME/d" -e "$ s/$/\n10.1.$TIER_ID.$NODE_ID\t$MYHOSTNAME/"
|
||||
/etc/frr/daemons sed -e 's/bgpd=no/bgpd=yes/' -e 's/zebra=no/zebra=yes/'
|
||||
/etc/ssh/sshd_config sed -e '/PasswordAuthentication/d' -e '$ s/$/\nPasswordAuthentication no/'
|
||||
/etc/systemd/timesyncd.conf sed -e 's/#NTP=.*/NTP=ipv6.ntp.ubuntu.com/g'
|
||||
/etc/default/grub sed -e '/GRUB_CMDLINE_LINUX_DEFAULT=/d' -e '/GRUB_CMDLINE_LINUX=/d' -e '/GRUB_SERIAL_COMMAND=/d' -e '/GRUB_TERMINAL=/d' -e '$ s/$/\nGRUB_CMDLINE_LINUX_DEFAULT=""\nGRUB_CMDLINE_LINUX="console=tty0 console=ttyS1,115200n8"\nGRUB_TERMINAL=serial\nGRUB_SERIAL_COMMAND="serial --speed=115200 --unit=1 --word=8 --parity=no --stop=1"/'
|
||||
/root/.bashrc sed -e '/.*bashrc-witaddon.*/d' -e '$ /$/\nsource ~/bashrc-witaddon/'
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
# Enables IPv4/IPv6 Routing
|
||||
net.ipv4.ip_forward = 1
|
||||
net.ipv6.conf.all.forwarding=1
|
||||
|
||||
# Routing
|
||||
net.ipv6.route.max_size=131072
|
||||
net.ipv4.conf.all.ignore_routes_with_linkdown=1
|
||||
net.ipv6.conf.all.ignore_routes_with_linkdown=1
|
||||
|
||||
|
||||
# Best Settings for Peering w/ BGP Unnumbered
|
||||
# and OSPF Neighbors
|
||||
net.ipv4.conf.all.rp_filter = 0
|
||||
net.ipv4.conf.default.rp_filter = 0
|
||||
net.ipv4.conf.lo.rp_filter = 0
|
||||
net.ipv4.conf.all.forwarding = 1
|
||||
net.ipv4.conf.default.forwarding = 1
|
||||
net.ipv4.conf.default.arp_announce = 2
|
||||
net.ipv4.conf.default.arp_notify = 1
|
||||
net.ipv4.conf.default.arp_ignore=1
|
||||
net.ipv4.conf.all.arp_announce = 2
|
||||
net.ipv4.conf.all.arp_notify = 1
|
||||
net.ipv4.conf.all.arp_ignore=1
|
||||
net.ipv4.icmp_errors_use_inbound_ifaddr=1
|
||||
|
||||
# Miscellaneous Settings
|
||||
|
||||
# Keep ipv6 permanent addresses on an admin down
|
||||
net.ipv6.conf.all.keep_addr_on_down=1
|
||||
|
||||
# igmp
|
||||
net.ipv4.igmp_max_memberships=1000
|
||||
net.ipv4.neigh.default.mcast_solicit = 10
|
||||
|
||||
# MLD
|
||||
net.ipv6.mld_max_msf=512
|
||||
|
||||
# Garbage Collection Settings for ARP and Neighbors
|
||||
net.ipv4.neigh.default.gc_thresh2=7168
|
||||
net.ipv4.neigh.default.gc_thresh3=8192
|
||||
net.ipv4.neigh.default.base_reachable_time_ms=14400000
|
||||
net.ipv6.neigh.default.gc_thresh2=3584
|
||||
net.ipv6.neigh.default.gc_thresh3=4096
|
||||
net.ipv6.neigh.default.base_reachable_time_ms=14400000
|
||||
|
||||
# Use neigh information on selection of nexthop for multipath hops
|
||||
net.ipv4.fib_multipath_use_neigh=1
|
||||
|
||||
# Allows Apps to Work with VRF
|
||||
net.ipv4.tcp_l3mdev_accept=1
|
||||
|
||||
|
||||
# disable forwarding for mgmt interface
|
||||
net.ipv6.conf.mgmt1.forwarding = 0
|
|
@ -0,0 +1,8 @@
|
|||
PROMPT_COMMAND='export VRF=$(ip vrf identify $$)'
|
||||
PS1=$PS1'[${VRF:=default}] '
|
||||
|
||||
function chvrf() {
|
||||
ip vrf exec $1 /bin/bash
|
||||
}
|
||||
|
||||
alias ll='ls -lha'
|
|
@ -0,0 +1,100 @@
|
|||
#!/bin/bash
|
||||
### BEGIN INIT INFO
|
||||
# Provides: scriptname
|
||||
# Required-Start: $network
|
||||
# Required-Stop: $network
|
||||
# Default-Start: 2 3 4 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: iptables
|
||||
# Description: Enable firewall rules
|
||||
### END INIT INFO
|
||||
|
||||
exec 1> >(logger -s -t $(basename $0)) 2>&1
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
echo -n "firewall start..."
|
||||
### IPv4
|
||||
iptables -P INPUT ACCEPT
|
||||
iptables -F INPUT
|
||||
#unencrypted traffic
|
||||
iptables -A INPUT -s 10.1.0.0/16 -p esp -j ACCEPT
|
||||
iptables -A INPUT -s 10.1.0.0/16 -p udp --dport 500 --sport 500 -j ACCEPT
|
||||
iptables -A INPUT -s 10.1.0.0/16 -p udp --dport 4500 --sport 4500 -j ACCEPT
|
||||
iptables -A INPUT -p icmp -j ACCEPT
|
||||
#traffic we wanna see from the VPN
|
||||
iptables -A INPUT -m policy --pol ipsec --dir in -s 10.1.0.0/16 -p udp --dport 4789 -m policy --pol ipsec --dir in -j ACCEPT # vxlan traffic
|
||||
iptables -A INPUT -m policy --pol ipsec --dir in -m multiport -s 10.1.0.0/16 -p tcp --dports 49152:49215 -j ACCEPT # libvirt live migration
|
||||
#iptables -A INPUT -m policy --pol ipsec --dir in -m multiport -s 10.1.0.0/16 -p tcp --dports 6800:7300 -j ACCEPT # ceph traffic
|
||||
|
||||
##### DROP the rest
|
||||
iptables -P INPUT DROP
|
||||
|
||||
|
||||
#### IPv6
|
||||
ip6tables -P INPUT ACCEPT
|
||||
ip6tables -F INPUT
|
||||
ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
|
||||
ip6tables -A INPUT -s fe80::/10 -p tcp --sport 179 -j ACCEPT
|
||||
ip6tables -A INPUT -s fe80::/10 -p tcp --dport 179 -j ACCEPT
|
||||
ip6tables -A INPUT -s 2001:4860:4860::8888 -p udp --sport 53 -j ACCEPT
|
||||
ip6tables -A INPUT -s 2001:4860:4860::8844 -p udp --sport 53 -j ACCEPT
|
||||
ip6tables -A INPUT -s 2001:67c:1560:8003::c7 -p udp --sport 123 -j ACCEPT
|
||||
ip6tables -A INPUT -s 2001:67c:1560:8003::c8 -p udp --sport 123 -j ACCEPT
|
||||
### DROP the rest
|
||||
ip6tables -P INPUT DROP
|
||||
|
||||
|
||||
#special tables
|
||||
iptables -t mangle -F
|
||||
iptables -t nat -F
|
||||
iptables -t raw -F
|
||||
|
||||
ip6tables -t mangle -F
|
||||
ip6tables -t nat -F
|
||||
ip6tables -t raw -F
|
||||
|
||||
|
||||
ip6tables -t raw -A PREROUTING -j NOTRACK
|
||||
ip6tables -t raw -A OUTPUT -j NOTRACK
|
||||
##### temp rules till we get VRF in place in the factory, just flip the 3 rules below
|
||||
if ip link show dev mgmt >/dev/null 2>&1; then
|
||||
iptables -t raw -A PREROUTING ! -i mgmt1 -j NOTRACK
|
||||
iptables -t raw -A OUTPUT ! -o mgmt -j NOTRACK
|
||||
iptables -A INPUT -i mgmt -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
iptables -A INPUT -i mgmt -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT
|
||||
else
|
||||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||
iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 22 -j ACCEPT
|
||||
fi
|
||||
##### end temp rules
|
||||
|
||||
|
||||
;;
|
||||
|
||||
stop)
|
||||
echo -n "firewall stop..."
|
||||
|
||||
#### Firewall rules
|
||||
iptables -P INPUT ACCEPT
|
||||
iptables -F
|
||||
iptables -t raw -F
|
||||
iptables -t nat -F
|
||||
iptables -t mangle -F
|
||||
|
||||
ip6tables -P INPUT ACCEPT
|
||||
ip6tables -F
|
||||
ip6tables -t raw -F
|
||||
ip6tables -t nat -F
|
||||
ip6tables -t mangle -F
|
||||
|
||||
echo " done"
|
||||
;;
|
||||
restart)
|
||||
#$0 stop
|
||||
$0 start
|
||||
;;
|
||||
*)
|
||||
echo "use $0 [start|stop|restart]"
|
||||
;;
|
||||
esac
|
|
@ -0,0 +1,78 @@
|
|||
frr defaults datacenter
|
||||
username cumulus nopassword
|
||||
!
|
||||
service integrated-vtysh-config
|
||||
!
|
||||
log syslog informational
|
||||
!
|
||||
interface feth1
|
||||
ipv6 nd ra-interval 10
|
||||
no ipv6 nd suppress-ra
|
||||
!
|
||||
interface feth2
|
||||
ipv6 nd ra-interval 10
|
||||
no ipv6 nd suppress-ra
|
||||
!
|
||||
router bgp 4200TIERASNVTEPASN
|
||||
bgp router-id 10.1.TIERID.VTEPINDEX
|
||||
no bgp default ipv4-unicast
|
||||
coalesce-time 1000
|
||||
bgp bestpath as-path multipath-relax
|
||||
bgp bestpath compare-routerid
|
||||
neighbor fabric peer-group
|
||||
neighbor fabric remote-as external
|
||||
neighbor fabric capability extended-nexthop
|
||||
neighbor feth1 interface peer-group fabric
|
||||
neighbor feth2 interface peer-group fabric
|
||||
!
|
||||
address-family ipv4 unicast
|
||||
redistribute kernel route-map EIP
|
||||
redistribute connected route-map LOOPBACK
|
||||
neighbor fabric activate
|
||||
neighbor fabric addpath-tx-all-paths
|
||||
neighbor fabric soft-reconfiguration inbound
|
||||
exit-address-family
|
||||
!
|
||||
address-family ipv6 unicast
|
||||
redistribute kernel route-map EIPv6
|
||||
redistribute connected route-map LOOPBACKv6
|
||||
neighbor fabric activate
|
||||
neighbor fabric addpath-tx-all-paths
|
||||
neighbor fabric soft-reconfiguration inbound
|
||||
exit-address-family
|
||||
!
|
||||
address-family l2vpn evpn
|
||||
neighbor fabric activate
|
||||
advertise-all-vni
|
||||
exit-address-family
|
||||
!
|
||||
ip prefix-list LOOPBACK seq 5 permit 10.1.0.0/16 ge 32
|
||||
ip prefix-list WITV4 seq 5 permit 168.245.146.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 10 permit 170.199.210.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 15 permit 170.199.211.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 20 permit 170.199.212.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 25 permit 170.199.213.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 30 permit 170.199.214.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 35 permit 170.199.215.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 40 permit 170.199.216.0/24 ge 25
|
||||
ip prefix-list WITV4 seq 45 permit 170.199.217.0/24 ge 25
|
||||
!
|
||||
ipv6 prefix-list LOOPBACK seq 5 permit 2604:bbc0::/96 ge 128
|
||||
ipv6 prefix-list WITV6-CUSTOMERS seq 5 permit 2604:bbc0:1::/48 ge 64
|
||||
!
|
||||
route-map EIPv6 permit 5
|
||||
match ipv6 address prefix-list WITV6-CUSTOMERS
|
||||
!
|
||||
route-map EIP permit 5
|
||||
match ip address prefix-list WITV4
|
||||
!
|
||||
route-map LOOPBACK permit 5
|
||||
description "permit loopback ips"
|
||||
match ip address prefix-list LOOPBACK
|
||||
!
|
||||
route-map LOOPBACKv6 permit 5
|
||||
description "permit ipv6 loopback ips"
|
||||
match ipv6 address prefix-list LOOPBACK
|
||||
!
|
||||
line vty
|
||||
!
|
|
@ -0,0 +1,28 @@
|
|||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
auto lo:0
|
||||
iface lo:0 inet static
|
||||
address 10.1.TIERID.VTEPINDEX/32
|
||||
|
||||
iface lo:0 inet6 static
|
||||
address 2604:bbc0::TIERID:VTEPINDEX/128
|
||||
|
||||
auto mgmt1
|
||||
iface mgmt1 inet6 auto
|
||||
iface mgmt1 inet dhcp
|
||||
pre-up /bin/ip link add mgmt type vrf table mgmt
|
||||
pre-up /bin/ip link set up dev mgmt
|
||||
pre-up /bin/ip link set master mgmt dev mgmt1
|
||||
post-down /bin/ip link del dev mgmt
|
||||
|
||||
|
||||
auto feth1
|
||||
iface feth1 inet manual
|
||||
mtu 9000
|
||||
|
||||
auto feth2
|
||||
iface feth2 inet manual
|
||||
mtu 9000
|
||||
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
IFACE=$1
|
||||
|
||||
|
||||
### IPv4 is IFACE public and has a route? if so, nuke it
|
||||
for route in $(vtysh -c "show ip route kernel" | grep "$IFACE" | awk '{ print $2 }')
|
||||
do
|
||||
echo "removing route for $IFACE: $route"
|
||||
ip route del $route
|
||||
done
|
||||
#### IPv6 is IFACE public and has a route? if so, nuke it
|
||||
#for route in $(vtysh -c "show ipv6 route kernel" | grep "$IFACE" | awk '{ print $2 }')
|
||||
# do
|
||||
# echo "removing route for $IFACE: $route"
|
||||
# ip route del $route
|
||||
#done
|
||||
|
||||
|
||||
### is IFACE private and has a local bridge?
|
||||
BRIDGE=$(readlink -f /sys/devices/virtual/net/$IFACE/brport/bridge || true)
|
||||
|
||||
if [ ! -z $BRIDGE ]; then
|
||||
BRIDGE=${BRIDGE##*/}
|
||||
echo "removing $IFACE from $BRIDGE"
|
||||
brctl delif $BRIDGE $IFACE
|
||||
if ! ls /sys/devices/virtual/net/$BRIDGE/brif/ | grep -qv vxlan; then #if so is the *local* bridge now empty? if so, nuke the whole bridge including tunnel endpoint
|
||||
echo "removing unused bridge: $BRIDGE"
|
||||
ip link del dev $(ls /sys/devices/virtual/net/$BRIDGE/brif/ | grep vxlan)
|
||||
ip link set down $BRIDGE
|
||||
brctl delbr $BRIDGE
|
||||
fi
|
||||
fi
|
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
IFACE=$1
|
||||
# vm<vm_id>.<num>
|
||||
|
||||
CLUSTER=$(curl -s -H 'X-Wit-Auth: true' http://10.0.0.1:4000/get-by-iface/${IFACE} | sed 's/"//g' | awk '{print $1}')
|
||||
|
||||
if ! [[ $CLUSTER =~ ^[0-9]+$ ]]; then
|
||||
echo "CLUSTER seems not to be valid"
|
||||
exit 10
|
||||
fi
|
||||
|
||||
LOOPBACKIP=$(hostname -i)
|
||||
BRIDGE=br${CLUSTER}
|
||||
VXLAN=vxlan${CLUSTER}
|
||||
VNI=${CLUSTER}
|
||||
|
||||
ip link set up ${IFACE}
|
||||
|
||||
if ! ip link show dev ${VXLAN} &>/dev/null; then
|
||||
ip link add ${VXLAN} type vxlan id ${VNI} dstport 4789 local ${LOOPBACKIP} nolearning
|
||||
ip link set up ${VXLAN}
|
||||
fi
|
||||
|
||||
if ! ip link show dev ${BRIDGE} &>/dev/null; then
|
||||
brctl addbr ${BRIDGE}
|
||||
brctl stp ${BRIDGE} off
|
||||
brctl addif ${BRIDGE} ${VXLAN}
|
||||
ip link set up dev ${BRIDGE}
|
||||
bridge vlan del dev ${BRIDGE} vid 1 self
|
||||
echo 1 >/sys/class/net/${BRIDGE}/bridge/vlan_filtering
|
||||
fi
|
||||
|
||||
brctl addif ${BRIDGE} ${IFACE}
|
|
@ -0,0 +1,69 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
IFACE=$1
|
||||
|
||||
maxprefixv6=64
|
||||
maxprefixv4=29
|
||||
|
||||
publicmac=52:54:00:00:00:11
|
||||
|
||||
|
||||
IP=$(curl -s -H 'X-Wit-Auth: true' http://10.0.0.1:4000/get-by-iface/${IFACE} | sed 's/"//g' | awk '{print $2}')
|
||||
|
||||
if [ -z $IP ]; then
|
||||
echo "got nothing back from the API"
|
||||
exit 10
|
||||
fi
|
||||
|
||||
eui64() {
|
||||
local macaddr="$1"
|
||||
printf "%02x%s" $(( 16#${macaddr:0:2} ^ 2#00000010 )) "${macaddr:2}" \
|
||||
| sed -E -e 's/([0-9a-zA-Z]{2})*/0x\0|/g' \
|
||||
| tr -d ':\n' \
|
||||
| xargs -d '|' \
|
||||
printf "fe80::%02x%02x:%02xff:fe%02x:%02x%02x"
|
||||
}
|
||||
|
||||
|
||||
|
||||
ip link set up ${IFACE}
|
||||
arp -i ${IFACE} -Ds 169.254.0.1 ${IFACE} netmask 255.255.255.255 pub
|
||||
|
||||
|
||||
|
||||
IFS=',' read -ra IPS <<< "$IP"
|
||||
for IP in "${IPS[@]}"; do
|
||||
if [[ $IP =~ ^170.199.21[0-9]\.[0-9]{1,3}/([0-9]{2})$ ]]; then ### we got a IPv4 prefix < maxprefixv4
|
||||
|
||||
if [ ${BASH_REMATCH[1]} -lt $maxprefixv4 ]; then
|
||||
echo "we don't support such a big customer net?"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ ${BASH_REMATCH[1]} -gt 32 ]; then
|
||||
echo "prefix is invalid"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "we got IPv4 with prefix ${BASH_REMATCH[0]}"
|
||||
ip route add ${IP} dev ${IFACE}
|
||||
|
||||
elif [[ $IP =~ ^2604:bbc0:[0-9,a-f,:]{1,444}/([0-9]{2,3})$ ]]; then ### we got a PIv6 prefix < masprefixv6
|
||||
|
||||
if [ ${BASH_REMATCH[1]} -lt $maxprefixv6 ]; then
|
||||
echo "we don't support such a big customer net?"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ ${BASH_REMATCH[1]} -gt 128 ]; then
|
||||
echo "prefix is invalid"
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "we got IPv6 with prefix ${BASH_REMATCH[0]}"
|
||||
ip route add ${IP} dev ${IFACE} via $(eui64 $publicmac)
|
||||
|
||||
else ### don't know what we have but something we can't work with
|
||||
echo "Unable to detect with what prefix I'm working with"
|
||||
fi
|
||||
done
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo lldp stop | /usr/bin/tee /sys/kernel/debug/i40e/*/command
|
|
@ -0,0 +1,2 @@
|
|||
nameserver 2001:4860:4860::8888
|
||||
nameserver 2001:4860:4860::8844
|
|
@ -0,0 +1,7 @@
|
|||
vrfid=$(ip -o -d link show dev ${interface} 2>/dev/null | egrep ' vrf_slave table [0-9]*' | sed -e 's/.*vrf_slave table \([0-9]*\) .*/\1/')
|
||||
|
||||
if [ "$reason" = "BOUND" ] && [ "$vrfid" != "" ]; then
|
||||
/sbin/ip route flush table $vrfid
|
||||
vrfgateway=$new_routers
|
||||
new_routers=""
|
||||
fi
|
|
@ -0,0 +1,3 @@
|
|||
if [ "$reason" = "BOUND" ] && [ "$vrfid" != "" ]; then
|
||||
/sbin/ip route add default via $vrfgateway table $vrfid
|
||||
fi
|
|
@ -0,0 +1 @@
|
|||
1001 mgmt
|
|
@ -0,0 +1,27 @@
|
|||
#!/bin/bash
|
||||
|
||||
EMPTYBR=$(for br in /sys/devices/virtual/net/br*; do if [ ! -d $br ]; then continue; fi; ls $br/brif/ | grep -qv vxlan || echo ${br##*/br}; done)
|
||||
|
||||
for id in $EMPTYBR
|
||||
do
|
||||
echo "removing unused customer bridge/vxlan id: $id"
|
||||
ip link del dev vxlan$id
|
||||
ip link set down br$id
|
||||
brctl delbr br$id
|
||||
done
|
||||
|
||||
|
||||
|
||||
for route in $(vtysh -c "show ip route kernel" | grep 'unknown inactive' | awk '{ print $3 }')
|
||||
do
|
||||
echo "removing zombie route: $route"
|
||||
ip route add blackhole $route
|
||||
ip route del $route
|
||||
done
|
||||
|
||||
#for route in $(vtysh -c "show ipv6 route kernel" | grep 'unknown inactive' | awk '{ print $3 }')
|
||||
# do
|
||||
# echo "removing zombie route: $route"
|
||||
# ip route add blackhole $route
|
||||
# ip route del $route
|
||||
#done
|
Loading…
Reference in New Issue