#!/usr/bin/env bash pkgrel='2a51' NC='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[1;34m' BOLD='\033[1;37m' WRKDIR="" ARCH="" OS="" echo="echo -e" if [[ $(uname -s) == "Darwin" ]]; then OS="darwin" WRKDIR="$HOME/Library/mbtunnel" md5="md5 -r" md5space=" " elif [[ $(uname -s) == "Linux" ]]; then OS="linux" WRKDIR="$HOME/.local/share/mbtunnel" md5="md5sum" md5space=" " else $echo "Unsupported OS $(uname -s) detected" exit fi if [[ $(uname -m) == "x86_64" ]]; then ARCH="amd64" elif [[ $(uname -m) == "aarch64" ]] || [[ $(uname -m) == "arm64" ]]; then ARCH="arm64" elif [[ $(uname -m) == "armv7l" ]]; then ARCH="armv7" else $echo "Unsupported arch $(uname -m) detected" fi curl https://www.google.com > /dev/null 2>&1 [[ $? != 0 ]] && { $echo -e "${RED}Your internet access is questionable."; $echo -e "Please check your Internet Conenction${NC}"; exit; } if [[ $(curl -sL "https://mb2.potat.cc:80/pkgrel/nix") != $pkgrel ]]; then $echo "Updating the wrapper script" curl -#L "https://mb2.potat.cc:80/src/mbtunnel-nix.sh" -o $WRKDIR/mbtunnel chmod +x $WRKDIR/mbtunnel sync mbtunnel $@ exit fi setup(){ rm -rf $WRKDIR mkdir $WRKDIR getgost getwstunnel getquiche } getudpproxy(){ $echo "Updating quiche binary" curl -#L https://mb2.potat.cc:80/bin/udpproxy/udpproxy-${OS}-${ARCH} -o $WRKDIR/udpproxy chmod +x $WRKDIR/udpproxy } getwstunnel(){ $echo "Updating wstunnel binary" curl -#L https://github.com/erebe/wstunnel/releases/download/v10.1.9/wstunnel_10.1.9_${OS}_${ARCH}.tar.gz -o $WRKDIR/wstunnel.tar.gz tar -xf $WRKDIR/wstunnel.tar.gz -C $WRKDIR chmod +x $WRKDIR/wstunnel } getquiche(){ $echo "Updating quiche binary" curl -#L https://mb2.potat.cc:80/bin/quiche/quiche-${OS}-${ARCH} -o $WRKDIR/quiche chmod +x $WRKDIR/quiche } darwin_amd64_udpproxysum="b076217a7aa7ec5727658a57e52b8227${md5space}udpproxy" darwin_arm64_udpproxysum="09067fa9d0fd1269eab33858b652ade1${md5space}udpproxy" linux_amd64_udpproxysum="fee19beeba8c67569a1196448a4095e8${md5space}udpproxy" linux_arm64_udpproxysum="6e0fa2cbdc8fa0ca8f349664147cf475${md5space}udpproxy" linux_armv7_udpproxysum="3909929f9c86331a3f4981eeb06fe6a3${md5space}udpproxy" darwin_amd64_wstunnelsum="68a2b783f64e3abd8cae8ed0978bff8f${md5space}wstunnel.tar.gz" darwin_arm64_wstunnelsum="19d926a54d229587a9a4866ddbd100f1${md5space}wstunnel.tar.gz" linux_amd64_wstunnelsum="aff97855bc20ac0743708d02c85730a9${md5space}wstunnel.tar.gz" linux_arm64_wstunnelsum="9cadee456ae1d2cd54ee529f3f8f2157${md5space}wstunnel.tar.gz" linux_armv7_wstunnelsum="24c5141a4e128d5702321eda18ee48f4${md5space}wstunnel.tar.gz" darwin_amd64_quichesum="6529d45220ee21064e34518cc4ca32ec${md5space}quiche" darwin_arm64_quichesum="49df22ed939bcfb9c16386592c5c42eb${md5space}quiche" linux_amd64_quichesum="fa287b6e48215889c499fda8dccce0df${md5space}quiche" linux_arm64_quichesum="66d444889be272acb5ef9f73adc27b51${md5space}quiche" linux_armv7_quichesum="ae1ba82e09107e91a867afe8a743f42c${md5space}quiche" [[ ! -d $WRKDIR ]] && setup cd $WRKDIR udpproxysum="${OS}_${ARCH}_udpproxysum" wstunnelsum="${OS}_${ARCH}_wstunnelsum" quichesum="${OS}_${ARCH}_quichesum" [[ $($md5 udpproxy 2>&1) != ${!udpproxysum} ]] && getudpproxy [[ $($md5 wstunnel.tar.gz 2>&1) != ${!wstunnelsum} ]] && getwstunnel [[ $($md5 quiche 2>&1) != ${!quichesum} ]] && getquiche $echo "\n${BOLD}Everything seems up to date.${NC}" IP=$(ping -c1 -t1 -W1 mb2.potat.cc 2>&1 | tr -d '():' | awk '/^PING/{print $3}') UDP=0 for i in {1..3}; do $echo "Testing if UDP/443 is open (Try ${i}/3)" if $WRKDIR/quiche --no-verify --idle-timeout 2 "https://cloudflare.com/cdn-cgi/trace" 2>&1 | grep -q "http=http/3"; then UDP=1 break else if [[ ${i} -eq 3 ]]; then UDP=0 break fi fi done if [[ $UDP != 0 ]] && [[ $1 != "tcp" ]]; then $echo "\n\nTunneling Wireguard via UDP" $echo "${GREEN}You may now connect to Wireguard${NC}" $WRKDIR/udpproxy -b 127.0.0.1 -l 51280 -h ${IP} -r 443 -d else $echo "\n\nUDP/443 seems closed. Tunneling Wireguard via TCP using Websocket relay." $echo "${GREEN}You may now connect to Wireguard${NC}" $WRKDIR/wstunnel client wss://${IP}:443 -L "udp://51280:127.0.0.1:51280?timeout_sec=0" fi