From 7a4c1fb72a78a19e6d7775472266dba3a4b23356 Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sat, 28 Aug 2021 20:36:20 +0200 Subject: -added ppid prefix to netjail netns and interfaces Signed-off-by: TheJackiMonster --- contrib/scripts/netjail/netjail_core.sh | 47 +++++++++--- contrib/scripts/netjail/netjail_setup_internet.sh | 92 ++++++++++------------- 2 files changed, 73 insertions(+), 66 deletions(-) (limited to 'contrib') diff --git a/contrib/scripts/netjail/netjail_core.sh b/contrib/scripts/netjail/netjail_core.sh index 1bfc365e7..c93f26dc9 100755 --- a/contrib/scripts/netjail/netjail_core.sh +++ b/contrib/scripts/netjail/netjail_core.sh @@ -2,6 +2,7 @@ # JAILOR=${SUDO_USER:?must run in sudo} +PREFIX=${PPID:?must run from a parent process} # running with `sudo` is required to be # able running the actual commands as the @@ -9,6 +10,24 @@ JAILOR=${SUDO_USER:?must run in sudo} export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +# initialize the numbering to ensure unique names + +NAMESPACE_NUM=${NAMESPACE_FD:?must have a file for ids} +INTERFACE_NUM=${INTERFACE_FD:?must have a file for ids} + +netjail_read_inc() { + local FD=$1 + local NUM=$(cat $FD) + NUM=${NUM:-0} + + local RES=$NUM + NUM=$(($NUM + 1)) + + echo $NUM > $FD + + printf "$RES" +} + netjail_opt() { local OPT=$1 shift 1 @@ -73,15 +92,14 @@ netjail_check_bin() { fi } -netjail_print_name() { - printf "%s%02x%02x" $1 $2 ${3:-0} -} - netjail_bridge() { - local BRIDGE=$1 + local NUM=$(netjail_read_inc $INTERFACE_NUM) + local BRIDGE=$(printf "%06x-%08x" $PREFIX $NUM) ip link add $BRIDGE type bridge ip link set dev $BRIDGE up + + printf "%s" $BRIDGE } netjail_bridge_clear() { @@ -91,9 +109,12 @@ netjail_bridge_clear() { } netjail_node() { - local NODE=$1 + local NUM=$(netjail_read_inc $NAMESPACE_NUM) + local NODE=$(printf "%06x-%08x" $PREFIX $NUM) ip netns add $NODE + + printf "%s" $NODE } netjail_node_clear() { @@ -108,8 +129,11 @@ netjail_node_link_bridge() { local ADDRESS=$3 local MASK=$4 - local LINK_IF="$NODE-$BRIDGE-0" - local LINK_BR="$NODE-$BRIDGE-1" + local NUM_IF=$(netjail_read_inc $INTERFACE_NUM) + local NUM_BR=$(netjail_read_inc $INTERFACE_NUM) + + local LINK_IF=$(printf "%06x-%08x" $PREFIX $NUM_IF) + local LINK_BR=$(printf "%06x-%08x" $PREFIX $NUM_BR) ip link add $LINK_IF type veth peer name $LINK_BR ip link set $LINK_IF netns $NODE @@ -120,13 +144,12 @@ netjail_node_link_bridge() { ip -n $NODE link set up dev lo ip link set $LINK_BR up + + printf "%s" $LINK_BR } netjail_node_unlink_bridge() { - local NODE=$1 - local BRIDGE=$2 - - local LINK_BR="$NODE-$BRIDGE-1" + local LINK_BR=$1 ip link delete $LINK_BR } diff --git a/contrib/scripts/netjail/netjail_setup_internet.sh b/contrib/scripts/netjail/netjail_setup_internet.sh index 6ae047274..c9a6fd6d8 100755 --- a/contrib/scripts/netjail/netjail_setup_internet.sh +++ b/contrib/scripts/netjail/netjail_setup_internet.sh @@ -1,4 +1,10 @@ #!/bin/sh + +NAMESPACE_FD=$(mktemp) +INTERFACE_FD=$(mktemp) + +trap "rm -f $NAMESPACE_FD $INTERFACE_FD; exit" ERR EXIT + . "./netjail_core.sh" set -eu @@ -6,6 +12,7 @@ set -x export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +PREFIX=$PPID LOCAL_M=$1 GLOBAL_N=$2 @@ -32,8 +39,6 @@ if [ $STUN -gt 0 ]; then netjail_check_bin stunserver shift 1 - - STUN_NODE=$(netjail_print_name "S" 254) fi netjail_check_bin $1 @@ -45,43 +50,33 @@ KNOWN_GROUP="92.68.151" CLEANUP=0 echo "Start [local: $LOCAL_GROUP.0/24, global: $GLOBAL_GROUP.0/16, stun: $STUN]" -NETWORK_NET=$(netjail_print_name "n" $GLOBAL_N $LOCAL_M) - -netjail_bridge $NETWORK_NET +NETWORK_NET=$(netjail_bridge) for X in $(seq $KNOWN); do - KNOWN_NODE=$(netjail_print_name "K" $X) - - netjail_node $KNOWN_NODE - netjail_node_link_bridge $KNOWN_NODE $NETWORK_NET "$KNOWN_GROUP.$X" 16 + KNOWN_NODES[$X]=$(netjail_node) + KNOWN_LINKS[$X]=$(netjail_node_link_bridge ${KNOWN_NODES[$X]} $NETWORK_NET "$KNOWN_GROUP.$X" 16) done -for N in $(seq $GLOBAL_N); do - ROUTER=$(netjail_print_name "R" $N) - - netjail_node $ROUTER - netjail_node_link_bridge $ROUTER $NETWORK_NET "$GLOBAL_GROUP.$N" 16 - - ROUTER_NET=$(netjail_print_name "r" $N) +declare -A NODES +declare -A NODE_LINKS - netjail_bridge $ROUTER_NET +for N in $(seq $GLOBAL_N); do + ROUTERS[$N]=$(netjail_node) + NETWORK_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} $NETWORK_NET "$GLOBAL_GROUP.$N" 16) + ROUTER_NETS[$N]=$(netjail_bridge) for M in $(seq $LOCAL_M); do - NODE=$(netjail_print_name "N" $N $M) - - netjail_node $NODE - netjail_node_link_bridge $NODE $ROUTER_NET "$LOCAL_GROUP.$M" 24 + NODES[$N,$M]=$(netjail_node) + NODE_LINKS[$N,$M]=$(netjail_node_link_bridge ${NODES[$N,$M]} ${ROUTER_NETS[$N]} "$LOCAL_GROUP.$M" 24) done ROUTER_ADDR="$LOCAL_GROUP.$(($LOCAL_M+1))" - - netjail_node_link_bridge $ROUTER $ROUTER_NET $ROUTER_ADDR 24 - netjail_node_add_nat $ROUTER $ROUTER_ADDR 24 + ROUTER_LINKS[$N]=$(netjail_node_link_bridge ${ROUTERS[$N]} ${ROUTER_NETS[$N]} $ROUTER_ADDR 24) + + netjail_node_add_nat ${ROUTERS[$N]} $ROUTER_ADDR 24 for M in $(seq $LOCAL_M); do - NODE=$(netjail_print_name "N" $N $M) - - netjail_node_add_default $NODE $ROUTER_ADDR + netjail_node_add_default ${NODES[$N,$M]} $ROUTER_ADDR done done @@ -89,67 +84,56 @@ WAITING="" KILLING="" if [ $STUN -gt 0 ]; then - netjail_node $STUN_NODE - netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16 + STUN_NODE=$(netjail_node) + STUN_LINK=$(netjail_node_link_bridge $STUN_NODE $NETWORK_NET "$GLOBAL_GROUP.254" 16) netjail_node_exec $STUN_NODE 0 1 stunserver & KILLING="$!" fi for X in $(seq $KNOWN); do - KNOWN_NODE=$(netjail_print_name "K" $X) INDEX=$(($X - 1)) - + FD_X=$(($INDEX * 2 + 3 + 0)) FD_Y=$(($INDEX * 2 + 3 + 1)) - netjail_node_exec $KNOWN_NODE $FD_X $FD_Y $@ & + netjail_node_exec ${KNOWN_NODES[$X]} $FD_X $FD_Y $@ & WAITING="$! $WAITING" done for N in $(seq $GLOBAL_N); do for M in $(seq $LOCAL_M); do - NODE=$(netjail_print_name "N" $N $M) INDEX=$(($LOCAL_M * ($N - 1) + $M - 1 + $KNOWN)) - + FD_X=$(($INDEX * 2 + 3 + 0)) FD_Y=$(($INDEX * 2 + 3 + 1)) - netjail_node_exec $NODE $FD_X $FD_Y $@ & + netjail_node_exec ${NODES[$N,$M]} $FD_X $FD_Y $@ & WAITING="$! $WAITING" done done cleanup() { if [ $STUN -gt 0 ]; then - STUN_NODE=$(netjail_print_name "S" 254) - - netjail_node_unlink_bridge $STUN_NODE $NETWORK_NET + netjail_node_unlink_bridge $STUN_LINK netjail_node_clear $STUN_NODE fi for X in $(seq $KNOWN); do - KNOWN_NODE=$(netjail_print_name "K" $X) - - netjail_node_unlink_bridge $KNOWN_NODE $NETWORK_NET - netjail_node_clear $KNOWN_NODE + netjail_node_unlink_bridge ${KNOWN_LINKS[$X]} + netjail_node_clear ${KNOWN_NODES[$X]} done for N in $(seq $GLOBAL_N); do - ROUTER_NET=$(netjail_print_name "r" $N) - for M in $(seq $LOCAL_M); do - NODE=$(netjail_print_name "N" $N $M) - - netjail_node_unlink_bridge $NODE $ROUTER_NET - netjail_node_clear $NODE + netjail_node_unlink_bridge ${NODE_LINKS[$N,$M]} + netjail_node_clear ${NODES[$N,$M]} done - ROUTER=$(netjail_print_name "R" $N) - - netjail_bridge_clear $ROUTER_NET - netjail_node_unlink_bridge $ROUTER $NETWORK_NET - netjail_node_clear $ROUTER + netjail_node_unlink_bridge ${ROUTER_LINKS[$N]} + netjail_bridge_clear ${ROUTER_NETS[$N]} + netjail_node_unlink_bridge ${NETWORK_LINKS[$N]} + netjail_node_clear ${ROUTERS[$N]} done netjail_bridge_clear $NETWORK_NET @@ -162,7 +146,7 @@ trapped_cleanup() { cleanup } -trap 'trapped_cleanup' 2 +trap 'trapped_cleanup' ERR netjail_waitall $WAITING netjail_killall $KILLING -- cgit v1.2.3