#!/bin/sh # # OpenIPC.org | v.20230212 # by Igor Zalatov, aka FlyRouter, aka ZigFisher # Busybox applets: awk cat echo insmod ip modprobe sha1sum sleep tr tunctl udhcpc uptime # vtund_enable="true" vtund_server=${1:-vtun.localhost} vtund_port="5000" vtund_iface="tunnel" device_name="IPC-VTUND" working_dir="/tmp" identity() { identity_src=$(ip r | awk '/default/ {print $5}' | head -n 1) identity_mac=$(cat /sys/class/net/"$identity_src"/address | tr 'a-z' 'A-Z') identity_pas=$(echo "$identity_mac" | sha1sum | awk '{print $1}') identity_tid=$(echo "$identity_mac" | tr -d ':') identity_cfg=$working_dir/vtund.conf } interface() { [ -L /sys/class/net/$vtund_iface ] || (modprobe tun; tunctl -t $vtund_iface) >/dev/null 2>&1 [ -f $working_dir/udhcpc-$vtund_iface.pid ] && kill -9 "$(cat $working_dir/udhcpc-$vtund_iface.pid)" >/dev/null 2>&1 } config() { ( echo "options {" echo " port $vtund_port;" echo " ifconfig /sbin/ifconfig;" echo "}" echo "$identity_tid {" echo " password $identity_pas;" echo " device $vtund_iface;" echo " stat no;" echo " persist yes;" echo " keepalive 10:5;" echo " timeout 10;" echo " up {" echo " ifconfig \"$vtund_iface hw ether $identity_mac mtu 1500 -multicast up\";" echo " program \"udhcpc -T 1 -t 5 -R -b -O staticroutes -S -s tapip -p $working_dir/udhcpc-$vtund_iface.pid -i $vtund_iface -x hostname:$device_name-$identity_tid\";" echo " };" echo " down {" echo " ifconfig \"$vtund_iface down\";" echo " };" echo "}" ) >$identity_cfg } if [ "$vtund_enable" = "true" ]; then (while true; do identity; interface; config; vtund -n -f "$identity_cfg" "$identity_tid" "$vtund_server" >/dev/null 2>&1; done) & fi