mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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
 |