Link Search Menu Expand Document

Network split test scripts

Today I want to share two simple scripts for simulating a network split and rejoin between two groups of hosts. The split is done by adding per-host network blackhole routes on each host for all hosts of the other group. Please be careful with using this. Forgetting a blackhole route can result in long hours of debugging as this is something you probably rarely use nowadays.

Script Usage

./network_split.sh <filter1> <filter2> <hosts>
./network_join.sh <filter1> <filter2> <hosts>
The script expects SSH equivalency and sudo on the target hosts. The filters are grep patterns.

network_split.sh

#!/bin/bash

group1_filter=$1; shift
group2_filter=$1; shift
hosts=$*

hosts1=$(echo $hosts | xargs -n1 | grep "$group1_filter")
hosts2=$(echo $hosts | xargs -n1 | grep "$group2_filter")

if [ "$hosts1" == "" -o "$hosts2" == "" ]; then
	echo "ERROR: Syntax: $0   "
	exit 1
fi

for h in $hosts1; do
	echo "backlisting other zone on $h"
	for i in $hosts2; do
		ssh $h sudo route add $i gw 127.0.0.1 lo
	done
done
for h in $hosts2; do
	echo "Backlisting other zone on $h"
	for i in $hosts1; do
		ssh $h sudo route add $i gw 127.0.0.1 lo
	done
done

network_join.sh

#!/bin/bash

group1_filter=$1; shift
group2_filter=$1; shift
hosts=$*

hosts1=$(echo $hosts | xargs -n1 | grep "$group1_filter")
hosts2=$(echo $hosts | xargs -n1 | grep "$group2_filter")

if [ "$hosts1" == "" -o "$hosts2" == "" ]; then
	echo "ERROR: Syntax: $0   "
	exit 1
fi

for h in $hosts1; do
	echo "De-blacklisting other zone on $h"
	for i in $hosts2; do
		ssh $h sudo route del $i gw 127.0.0.1 lo
	done
done
for h in $hosts2; do
	echo "De-blacklisting other zone on $h"
	for i in $hosts1; do
		ssh $h sudo route del $i gw 127.0.0.1 lo
	done
done