From f71f6139f4401474166a41b8918df7e29318c405 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Sun, 12 Jan 2020 04:10:38 -0500 Subject: Scripts to run a toxcore DHT network on localhost. --- dht/vnet/README.vnet.md | 2 + dht/vnet/build.sh | 4 +- dht/vnet/core-build.sh | 183 ++++++++++++++++++++++++++++++++++++++++++ dht/vnet/core-clean.sh | 46 +++++++++++ dht/vnet/core-run.sh | 49 +++++++++++ dht/vnet/core-screen-shell.sh | 58 +++++++++++++ dht/vnet/run.sh | 2 +- 7 files changed, 342 insertions(+), 2 deletions(-) create mode 100755 dht/vnet/core-build.sh create mode 100755 dht/vnet/core-clean.sh create mode 100755 dht/vnet/core-run.sh create mode 100755 dht/vnet/core-screen-shell.sh diff --git a/dht/vnet/README.vnet.md b/dht/vnet/README.vnet.md index caa84057..9bceb221 100644 --- a/dht/vnet/README.vnet.md +++ b/dht/vnet/README.vnet.md @@ -65,6 +65,8 @@ environments. The following man pages are relevant: man 2 clone man 8 iptables man 7 cgroups + man 7 network_namespaces + man 1 nsenter We need to bootstrap an instance of dhtd off of our test network and also an instance of uTox (or some other toxcore-based client) and get them to build a diff --git a/dht/vnet/build.sh b/dht/vnet/build.sh index 5354969a..7f7787f0 100755 --- a/dht/vnet/build.sh +++ b/dht/vnet/build.sh @@ -72,7 +72,9 @@ buildtaps() { buildtaps -num=$(ip addr show wlan0 | sed -n '/\s\+inet 192/ s/\s\+inet 192\.168\.[0-9]*\.\([0-9]*\).*$/\1/ p') +iface=$(ip route | awk '/^default/{ if ($4 == "dev") print($5); }') +iface=${iface:-wlan0} +num=$(ip addr show $iface | sed -n '/\s\+inet 192/ s/\s\+inet 192\.168\.[0-9]*\.\([0-9]*\).*$/\1/ p') num=${num:-88} ip addr add 80.$num.99.99 dev ep0 diff --git a/dht/vnet/core-build.sh b/dht/vnet/core-build.sh new file mode 100755 index 00000000..1b8f3d8a --- /dev/null +++ b/dht/vnet/core-build.sh @@ -0,0 +1,183 @@ +#!/bin/sh + +set -x + +buildveths() { + ip link add ve0 type veth peer name vep0 + ip link add ve1 type veth peer name vep1 + ip link add ve2 type veth peer name vep2 + ip link add ve3 type veth peer name vep3 + ip link add ve4 type veth peer name vep4 + ip link add ve5 type veth peer name vep5 + ip link add ve6 type veth peer name vep6 + ip link add ve7 type veth peer name vep7 + ip link add ve8 type veth peer name vep8 + ip link add ve9 type veth peer name vep9 + ip link add veA type veth peer name vepA + ip link add veB type veth peer name vepB + ip link add veC type veth peer name vepC + ip link add veD type veth peer name vepD + ip link add veE type veth peer name vepE + ip link add veF type veth peer name vepF + + ip netns add vep0; ip link set vep0 netns vep0 + ip netns add vep1; ip link set vep1 netns vep1 + ip netns add vep2; ip link set vep2 netns vep2 + ip netns add vep3; ip link set vep3 netns vep3 + ip netns add vep4; ip link set vep4 netns vep4 + ip netns add vep5; ip link set vep5 netns vep5 + ip netns add vep6; ip link set vep6 netns vep6 + ip netns add vep7; ip link set vep7 netns vep7 + ip netns add vep8; ip link set vep8 netns vep8 + ip netns add vep9; ip link set vep9 netns vep9 + ip netns add vepA; ip link set vepA netns vepA + ip netns add vepB; ip link set vepB netns vepB + ip netns add vepC; ip link set vepC netns vepC + ip netns add vepD; ip link set vepD netns vepD + ip netns add vepE; ip link set vepE netns vepE + ip netns add vepF; ip link set vepF netns vepF +} + +buildveths + +iface=$(ip route | awk '/^default/{ if ($4 == "dev") print($5); }') +iface=${iface:-wlan0} +num=$(ip addr show $iface | sed -n '/\s\+inet 192/ s/\s\+inet 192\.168\.[0-9]*\.\([0-9]*\).*$/\1/ p') +num=${num:-88} + +ip addr add 60.$num.99.98/31 dev ve0 +ip addr add 61.$num.99.98/31 dev ve1 +ip addr add 62.$num.99.98/31 dev ve2 +ip addr add 63.$num.99.98/31 dev ve3 +ip addr add 64.$num.99.98/31 dev ve4 +ip addr add 65.$num.99.98/31 dev ve5 +ip addr add 66.$num.99.98/31 dev ve6 +ip addr add 67.$num.99.98/31 dev ve7 +ip addr add 68.$num.99.98/31 dev ve8 +ip addr add 69.$num.99.98/31 dev ve9 +ip addr add 70.$num.99.98/31 dev veA +ip addr add 71.$num.99.98/31 dev veB +ip addr add 72.$num.99.98/31 dev veC +ip addr add 73.$num.99.98/31 dev veD +ip addr add 74.$num.99.98/31 dev veE +ip addr add 75.$num.99.98/31 dev veF + +ip link set up dev ve0 +ip link set up dev ve1 +ip link set up dev ve2 +ip link set up dev ve3 +ip link set up dev ve4 +ip link set up dev ve5 +ip link set up dev ve6 +ip link set up dev ve7 +ip link set up dev ve8 +ip link set up dev ve9 +ip link set up dev veA +ip link set up dev veB +ip link set up dev veC +ip link set up dev veD +ip link set up dev veE +ip link set up dev veF + + +nsenter --net=/var/run/netns/vep0 ip addr add 60.$num.99.99/31 dev vep0 +nsenter --net=/var/run/netns/vep1 ip addr add 61.$num.99.99/31 dev vep1 +nsenter --net=/var/run/netns/vep2 ip addr add 62.$num.99.99/31 dev vep2 +nsenter --net=/var/run/netns/vep3 ip addr add 63.$num.99.99/31 dev vep3 +nsenter --net=/var/run/netns/vep4 ip addr add 64.$num.99.99/31 dev vep4 +nsenter --net=/var/run/netns/vep5 ip addr add 65.$num.99.99/31 dev vep5 +nsenter --net=/var/run/netns/vep6 ip addr add 66.$num.99.99/31 dev vep6 +nsenter --net=/var/run/netns/vep7 ip addr add 67.$num.99.99/31 dev vep7 +nsenter --net=/var/run/netns/vep8 ip addr add 68.$num.99.99/31 dev vep8 +nsenter --net=/var/run/netns/vep9 ip addr add 69.$num.99.99/31 dev vep9 +nsenter --net=/var/run/netns/vepA ip addr add 70.$num.99.99/31 dev vepA +nsenter --net=/var/run/netns/vepB ip addr add 71.$num.99.99/31 dev vepB +nsenter --net=/var/run/netns/vepC ip addr add 72.$num.99.99/31 dev vepC +nsenter --net=/var/run/netns/vepD ip addr add 73.$num.99.99/31 dev vepD +nsenter --net=/var/run/netns/vepE ip addr add 74.$num.99.99/31 dev vepE +nsenter --net=/var/run/netns/vepF ip addr add 75.$num.99.99/31 dev vepF + +nsenter --net=/var/run/netns/vep0 ip link set up dev vep0 +nsenter --net=/var/run/netns/vep1 ip link set up dev vep1 +nsenter --net=/var/run/netns/vep2 ip link set up dev vep2 +nsenter --net=/var/run/netns/vep3 ip link set up dev vep3 +nsenter --net=/var/run/netns/vep4 ip link set up dev vep4 +nsenter --net=/var/run/netns/vep5 ip link set up dev vep5 +nsenter --net=/var/run/netns/vep6 ip link set up dev vep6 +nsenter --net=/var/run/netns/vep7 ip link set up dev vep7 +nsenter --net=/var/run/netns/vep8 ip link set up dev vep8 +nsenter --net=/var/run/netns/vep9 ip link set up dev vep9 +nsenter --net=/var/run/netns/vepA ip link set up dev vepA +nsenter --net=/var/run/netns/vepB ip link set up dev vepB +nsenter --net=/var/run/netns/vepC ip link set up dev vepC +nsenter --net=/var/run/netns/vepD ip link set up dev vepD +nsenter --net=/var/run/netns/vepE ip link set up dev vepE +nsenter --net=/var/run/netns/vepF ip link set up dev vepF + +nsenter --net=/var/run/netns/vep0 ip route add default via 60.$num.99.98 +nsenter --net=/var/run/netns/vep1 ip route add default via 61.$num.99.98 +nsenter --net=/var/run/netns/vep2 ip route add default via 62.$num.99.98 +nsenter --net=/var/run/netns/vep3 ip route add default via 63.$num.99.98 +nsenter --net=/var/run/netns/vep4 ip route add default via 64.$num.99.98 +nsenter --net=/var/run/netns/vep5 ip route add default via 65.$num.99.98 +nsenter --net=/var/run/netns/vep6 ip route add default via 66.$num.99.98 +nsenter --net=/var/run/netns/vep7 ip route add default via 67.$num.99.98 +nsenter --net=/var/run/netns/vep8 ip route add default via 68.$num.99.98 +nsenter --net=/var/run/netns/vep9 ip route add default via 69.$num.99.98 +nsenter --net=/var/run/netns/vepA ip route add default via 70.$num.99.98 +nsenter --net=/var/run/netns/vepB ip route add default via 71.$num.99.98 +nsenter --net=/var/run/netns/vepC ip route add default via 72.$num.99.98 +nsenter --net=/var/run/netns/vepD ip route add default via 73.$num.99.98 +nsenter --net=/var/run/netns/vepE ip route add default via 74.$num.99.98 +nsenter --net=/var/run/netns/vepF ip route add default via 75.$num.99.98 + +nsenter --net=/var/run/netns/vep0 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep1 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep2 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep3 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep4 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep5 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep6 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep7 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep8 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vep9 ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepA ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepB ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepC ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepD ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepE ip addr add 127.0.0.1/8 dev lo +nsenter --net=/var/run/netns/vepF ip addr add 127.0.0.1/8 dev lo + +nsenter --net=/var/run/netns/vep0 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep1 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep2 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep3 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep4 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep5 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep6 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep7 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep8 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vep9 ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepA ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepB ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepC ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepD ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepE ip addr add ::1/128 dev lo +nsenter --net=/var/run/netns/vepF ip addr add ::1/128 dev lo + +nsenter --net=/var/run/netns/vep0 ip link set up dev lo +nsenter --net=/var/run/netns/vep1 ip link set up dev lo +nsenter --net=/var/run/netns/vep2 ip link set up dev lo +nsenter --net=/var/run/netns/vep3 ip link set up dev lo +nsenter --net=/var/run/netns/vep4 ip link set up dev lo +nsenter --net=/var/run/netns/vep5 ip link set up dev lo +nsenter --net=/var/run/netns/vep6 ip link set up dev lo +nsenter --net=/var/run/netns/vep7 ip link set up dev lo +nsenter --net=/var/run/netns/vep8 ip link set up dev lo +nsenter --net=/var/run/netns/vep9 ip link set up dev lo +nsenter --net=/var/run/netns/vepA ip link set up dev lo +nsenter --net=/var/run/netns/vepB ip link set up dev lo +nsenter --net=/var/run/netns/vepC ip link set up dev lo +nsenter --net=/var/run/netns/vepD ip link set up dev lo +nsenter --net=/var/run/netns/vepE ip link set up dev lo +nsenter --net=/var/run/netns/vepF ip link set up dev lo diff --git a/dht/vnet/core-clean.sh b/dht/vnet/core-clean.sh new file mode 100755 index 00000000..e905c61a --- /dev/null +++ b/dht/vnet/core-clean.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +cleanveths() +{ + ip link del ve0 + ip link del ve1 + ip link del ve2 + ip link del ve3 + ip link del ve4 + ip link del ve5 + ip link del ve6 + ip link del ve7 + + ip link del ve8 + ip link del ve9 + ip link del veA + ip link del veB + ip link del veC + ip link del veD + ip link del veE + ip link del veF +} + +set -x + +cleanveths + +rm -rf ve0 ve1 ve2 ve3 ve4 ve5 ve6 ve7 \ + ve8 ve9 veA veB veC veD veE veF + +ip netns del vep0 +ip netns del vep1 +ip netns del vep2 +ip netns del vep3 +ip netns del vep4 +ip netns del vep5 +ip netns del vep6 +ip netns del vep7 +ip netns del vep8 +ip netns del vep9 +ip netns del vepA +ip netns del vepB +ip netns del vepC +ip netns del vepD +ip netns del vepE +ip netns del vepF diff --git a/dht/vnet/core-run.sh b/dht/vnet/core-run.sh new file mode 100755 index 00000000..b2db5354 --- /dev/null +++ b/dht/vnet/core-run.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +[ -L ./DHT_bootstrap ] || { echo "Missing symbolic link to DHT_bootstrap." ; exit 1 ; } + +rm -rf ve0 ve1 ve2 ve3 ve4 ve5 ve6 ve7 ve8 ve9 veA veB veC veD veE veF +echo nobody > core-user +user=$(cat core-user) +mkdir -p ve0 ve1 ve2 ve3 ve4 ve5 ve6 ve7 ve8 ve9 veA veB veC veD veE veF +chown $user ve0 ve1 ve2 ve3 ve4 ve5 ve6 ve7 ve8 ve9 veA veB veC veD veE veF + +rm -f core-count +echo detach > core-detached + +set -x + +screen -S core-test -s ./core-screen-shell.sh -c core-detached +sleep 3 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 + +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 + +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 + +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen +sleep 0.5 +screen -S core-test -X screen diff --git a/dht/vnet/core-screen-shell.sh b/dht/vnet/core-screen-shell.sh new file mode 100755 index 00000000..012c8540 --- /dev/null +++ b/dht/vnet/core-screen-shell.sh @@ -0,0 +1,58 @@ +#!/bin/bash +digit=$1 +[ -z "$digit" ] && { + touch core-count + count=$(cat core-count) + count=${count:-(-1)} + count=$(( $count + 1 )) + echo $count > core-count + digit=$(printf '%X' $count) + user=$(cat core-user) + ( + cd ve$digit + port=$(( 33400 + $count )) + echo nsenter --net=/var/run/netns/vep$digit chpst -u $user ../$0 $digit $port > cmd0 + exec nsenter --net=/var/run/netns/vep$digit chpst -u $user ../$0 $digit $port + exit 1 + ) +} +port=$2 + +addr=$(ip -o address show dev vep$digit | sed -n 's#.* inet \([^ /]*\).*#\1#p') +echo $addr +pwd +whoami +# Usage (connected) : ./DHT_bootstrap [--ipv4|--ipv6] IP PORT KEY +# Usage (unconnected): ./DHT_bootstrap [--ipv4|--ipv6] + +if [ "$digit" = 0 ] +then + echo $$ > pid + echo ../DHT_bootstrap > cmd.txt + echo $addr > addr.txt + { + sleep 0.5 + echo IP: $addr >> PUBLIC_ID.txt + } & + exec ../DHT_bootstrap +else + vars='{ + if( boot_key == "" ) { boot_key=$0 ; print("boot_key=" boot_key) } + else if( $1 == "Port:" ) print("boot_port=" $2); + else if( $1 == "IP:" ) print("boot_ip=" $2); + }' + boot_ip= + boot_port= + boot_key= + awk "$vars" ../ve0/PUBLIC_ID.txt > vars.txt 2>&1 + . vars.txt + echo ../DHT_bootstrap $boot_ip $boot_port $boot_key > cmd.txt + echo $$ > pid + echo $addr > addr.txt + { + sleep 0.5 + echo IP: $addr >> PUBLIC_ID.txt + } & + exec ../DHT_bootstrap $boot_ip $boot_port $boot_key +fi +sleep 30 diff --git a/dht/vnet/run.sh b/dht/vnet/run.sh index 0189b6b7..16854026 100755 --- a/dht/vnet/run.sh +++ b/dht/vnet/run.sh @@ -1,6 +1,6 @@ #!/bin/sh -[ -L ./dhtd ] || ( echo "Missing symbolic link to your build: ./dhtd" ; exit 1 ) +[ -L ./dhtd ] || { echo "Missing symbolic link to your build: ./dhtd" ; exit 1; } mkdir -p ep0 ep1 ep2 ep3 ep4 ep5 ep6 ep7 \ ep8 ep9 epA epB epC epD epE epF -- cgit v1.2.3