2021-09-10 19:00:28 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
die() {
|
|
|
|
|
printf '%s\n' "$*"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-14 13:23:26 +02:00
|
|
|
do_cleanup() {
|
2021-09-10 19:00:28 +02:00
|
|
|
local IDX="$1"
|
2021-09-20 19:03:05 +02:00
|
|
|
local NAME_PREFIX="${2:-net}"
|
|
|
|
|
local PEER_PREFIX="${3:-d_}"
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
pkill -F "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" dnsmasq &>/dev/null || :
|
|
|
|
|
rm -rf "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid"
|
2021-09-13 20:33:50 +02:00
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
pkill -F "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" radvd &>/dev/null || :
|
|
|
|
|
rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid"
|
2021-09-13 20:33:50 +02:00
|
|
|
|
2021-10-01 17:43:01 +02:00
|
|
|
pkill -F "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid" pppoe-server &>/dev/null || :
|
|
|
|
|
rm -rf "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid"
|
|
|
|
|
rm -rf "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX"
|
|
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
ip link del "$PEER_PREFIX$IDX" &>/dev/null || :
|
2021-09-10 19:00:28 +02:00
|
|
|
}
|
|
|
|
|
|
2021-09-14 13:23:26 +02:00
|
|
|
do_setup() {
|
2021-09-10 19:00:28 +02:00
|
|
|
local IDX="$1"
|
2021-09-20 19:03:05 +02:00
|
|
|
local NAME_PREFIX="${2:-net}"
|
|
|
|
|
local PEER_PREFIX="${3:-d_}"
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-09-14 13:23:26 +02:00
|
|
|
do_cleanup "$IDX"
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
ip link add "$NAME_PREFIX$IDX" type veth peer "$PEER_PREFIX$IDX"
|
|
|
|
|
ip link set "$PEER_PREFIX$IDX" up
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-10-01 17:43:01 +02:00
|
|
|
ip addr add "192.168.$((120 + IDX)).1/23" dev "$PEER_PREFIX$IDX"
|
2021-09-20 19:03:05 +02:00
|
|
|
ip addr add "192:168:$((120 + IDX))::1/64" dev "$PEER_PREFIX$IDX"
|
2021-09-10 19:00:28 +02:00
|
|
|
|
2021-10-01 17:43:01 +02:00
|
|
|
# PPPoE inside the rootless container is not actually working, because
|
|
|
|
|
# /dev/ppp is not accessible. Still start it, so that we at least can
|
|
|
|
|
# test how far it goes...
|
|
|
|
|
echo "192.168.$((120 + $IDX)).180-200" > "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX"
|
|
|
|
|
pppoe-server -X "/tmp/nm-pppoe-$PEER_PREFIX$IDX.pid" -S isp -C isp -L "192.168.$((120 + IDX)).1" -p "/tmp/nm-pppoe-allip-$PEER_PREFIX$IDX" -I "$PEER_PREFIX$IDX" &
|
|
|
|
|
|
2021-09-10 19:00:28 +02:00
|
|
|
dnsmasq \
|
|
|
|
|
--conf-file=/dev/null \
|
2021-09-20 19:03:05 +02:00
|
|
|
--pid-file="/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" \
|
2021-09-10 19:00:28 +02:00
|
|
|
--no-hosts \
|
|
|
|
|
--keep-in-foreground \
|
|
|
|
|
--bind-interfaces \
|
|
|
|
|
--except-interface=lo \
|
|
|
|
|
--clear-on-reload \
|
|
|
|
|
--listen-address="192.168.$((120 + $IDX)).1" \
|
|
|
|
|
--dhcp-range="192.168.$((120 + $IDX)).100,192.168.$((120 + $IDX)).150" \
|
|
|
|
|
--no-ping \
|
|
|
|
|
&
|
2021-09-13 20:33:50 +02:00
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
cat <<EOF > "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
|
|
|
|
|
interface $PEER_PREFIX$IDX
|
2021-09-13 20:33:50 +02:00
|
|
|
{
|
|
|
|
|
AdvSendAdvert on;
|
|
|
|
|
prefix 192:168:$((120 + IDX))::/64
|
|
|
|
|
{
|
|
|
|
|
AdvOnLink on;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
EOF
|
|
|
|
|
radvd \
|
2021-09-20 19:03:05 +02:00
|
|
|
--config "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf" \
|
|
|
|
|
--pidfile "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" \
|
2021-09-13 20:33:50 +02:00
|
|
|
&
|
2021-09-10 19:00:28 +02:00
|
|
|
}
|
|
|
|
|
|
2021-09-14 13:23:26 +02:00
|
|
|
do_redo() {
|
2021-09-20 19:03:05 +02:00
|
|
|
do_cleanup "$@"
|
|
|
|
|
do_setup "$@"
|
2021-09-14 13:23:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
2021-09-10 19:00:28 +02:00
|
|
|
IDX=1
|
2021-09-20 19:03:05 +02:00
|
|
|
NAME_PREFIX=net
|
|
|
|
|
PEER_PREFIX=
|
2021-09-14 13:23:26 +02:00
|
|
|
CMD=redo
|
2021-09-10 19:00:28 +02:00
|
|
|
for (( i=1 ; i<="$#" ; )) ; do
|
|
|
|
|
c="${@:$i:1}"
|
|
|
|
|
i=$((i+1))
|
|
|
|
|
case "$c" in
|
2021-09-14 13:23:26 +02:00
|
|
|
redo|setup|cleanup)
|
2021-09-10 19:00:28 +02:00
|
|
|
CMD="$c"
|
|
|
|
|
;;
|
2021-09-20 19:03:05 +02:00
|
|
|
--prefix|-p)
|
|
|
|
|
NAME_PREFIX="${@:$i:1}"
|
|
|
|
|
test -n "$NAME_PREFIX" || die "missing argument to --prefix"
|
|
|
|
|
i=$((i+1))
|
|
|
|
|
;;
|
|
|
|
|
--peer-prefix)
|
|
|
|
|
PEER_PREFIX="${@:$i:1}"
|
|
|
|
|
test -n "$PEER_PREFIX" || die "missing argument to --peer-prefix"
|
|
|
|
|
i=$((i+1))
|
|
|
|
|
;;
|
2021-09-10 19:00:28 +02:00
|
|
|
--idx|-i)
|
|
|
|
|
test $i -le "$#" || die "missing argument to --idx"
|
|
|
|
|
IDX="${@:$i:1}"
|
|
|
|
|
i=$((i+1))
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
die "invalid argument"
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
2021-09-20 19:03:05 +02:00
|
|
|
if [ -z "$PEER_PREFIX" ]; then
|
|
|
|
|
if [ "$NAME_PREFIX" = net ]; then
|
|
|
|
|
PEER_PREFIX=d_
|
|
|
|
|
else
|
|
|
|
|
PEER_PREFIX="d_${NAME_PREFIX}_"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
do_$CMD "$IDX" "$NAME_PREFIX" "$PEER_PREFIX"
|