Skip to content

Commit

Permalink
Merge pull request #8 from DennoN-RUS/v3.6.0-test
Browse files Browse the repository at this point in the history
v3.6.0
  • Loading branch information
DennoN-RUS committed Feb 7, 2023
2 parents c2dbef5 + 2b70f6a commit c67b20d
Show file tree
Hide file tree
Showing 13 changed files with 288 additions and 191 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
lists/
scripts/
10 changes: 10 additions & 0 deletions Install/common/bird4-bgp.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

protocol bgp antifilter {
table route_vpn1;
import all;
export none;
local as 64999;
neighbor BPGIPINPUT as BGPASINPUT;
multihop;
hold time 240;
}
82 changes: 67 additions & 15 deletions Install/common/func.sh
Original file line number Diff line number Diff line change
@@ -1,13 +1,75 @@
#SCRIPT VARIABLE
SYSTEM_FOLDER=SYSTEMFOLDERINPUT
BLACKLIST=$HOMEPATH/lists/antifilter.list
ROUTE_FORCE_ISP=$SYSTEM_FOLDER/etc/bird4-force-isp.list
ROUTE_FORCE_VPN1=$SYSTEM_FOLDER/etc/bird4-force-vpn1.list
ROUTE_FORCE_VPN2=$SYSTEM_FOLDER/etc/bird4-force-vpn2.list
ROUTE_BASE_VPN=$SYSTEM_FOLDER/etc/bird4-base-vpn.list
ROUTE_USER_VPN=$SYSTEM_FOLDER/etc/bird4-user-vpn.list
BIRD_CONF=$SYSTEM_FOLDER/etc/bird4.conf
VPNTXT=$HOMEPATH/lists/user-vpn.list
VPN1TXT=$HOMEPATH/lists/user-vpn1.list
VPN2TXT=$HOMEPATH/lists/user-vpn2.list
ISPTXT=$HOMEPATH/lists/user-isp.list
MD5_SUM=$HOMEPATH/scripts/sum.md5

#INFO VARIABLE
VERSION=VERSIONINPUT
SCRIPT_FILE=SCRIPTSINPUT/add-bird4_routes.sh
VCONF=CONFINPUT
VHOMEPATH="$(awk -F= '/^HOMEPATH=/{print $2}' $SCRIPT_FILE)"
VMODE=MODEINPUT
VURLS="$(awk -F= '/^URLS=/{print $2}' $SCRIPT_FILE)"
VBGP_IP=BPGIPINPUT && VBGP_AS=BGPASINPUT
VISP="$(awk -F= '/^ISP=/{print $2}' $SCRIPT_FILE)"
VVPN1="$(awk -F= '/^VPN1=/{print $2}' $SCRIPT_FILE)"
VVPN2="$(awk -F= '/^VPN2=/{print $2}' $SCRIPT_FILE)"

#GET INFO
get_info_func() {
if [[ "$1" == "-v" ]]; then
echo "VERSION=$VERSION"
echo "CONF=$VCONF"
if [ $VCONF == 1 ]; then echo -e " Use one vpn\n ISP=$VISP VPN=$VVPN1"; else echo -e " Use double vpn\n ISP=$VISP VPN1=$VVPN1 VPN2=$VVPN2"; fi
echo "MODE=$VMODE"
if [ $VMODE == 1 ]; then echo -e " Download mode\n URLS=$VURLS";
elif [ $VMODE == 2 ]; then echo -e " BGP mode\n IP=$VBGP_IP AS=$VBGP_AS";
else echo " File mode"
fi
exit
fi
}

#INIT FILES FUNCTION
init_files_func() {
if [[ "$DEBUG" == 1 ]]; then echo -e "\n########### $(date) STEP_2: add init files ###########\n" >&2; fi
touch $@
if [[ "$INIT" == "-i" ]]; then exit; fi
}

#WAIT DNS FUNCTION
wait_dns_func() {
if [[ "$DEBUG" == 1 ]]; then echo -e "\n########### $(date) STEP_1: wait dns ###########\n" >&2; fi
until ADDRS=$(dig +short google.com @localhost -p 53) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done
}

#INIT FILES FUNCTION
init_files_func() {
if [[ "$DEBUG" == 1 ]]; then echo -e "\n########### $(date) STEP_2: add init files ###########\n" >&2; fi
touch $@
#check VPN in bird config
vpn_bird_func() {
if [ "$(grep -c "ifname = \"$2\"; #MARK_VPN1" $1)" == 0 ]; then sed -i '/#MARK_VPN1/s/".*"/"'$2'"/' $1; fi
if [ "$#" == 2 ]; then
if [ "$(grep -c "interface \"$2\"" $1)" == 0 ]; then sed -i '/interface/s/".*"/"'$2'"/' $1; fi
elif [ "$#" == 3 ]; then
if [ "$(grep -c "interface \"$2\", \"$3\"" $1)" == 0 ]; then sed -i '/interface/s/".*", ".*"/"'$2'", "'$3'"/' $1; fi
if [ "$(grep -c "ifname = \"$3\"; #MARK_VPN2" $1)" == 0 ]; then sed -i '/#MARK_VPN2/s/".*"/"'$3'"/' $1; fi
fi
}

#CURL FUNCTION
curl_funk() {
for var in $@; do
if [[ $var =~ ^http ]]; then cur_url=$(echo "$cur_url $var"); else last=$var; fi
done
if [ "$(curl -s $cur_url | grep -E '([0-9]{1,3}.){3}[0-9]{1,3}')" ]; then curl -s $cur_url | sort ; else cat $last; fi
}

#DIFF FUNCTION
Expand Down Expand Up @@ -56,21 +118,11 @@ restart_bird_func() {
fi
}

#CURL FUNCTION
curl_funk() {
if [[ "$DISABLE_URLS" == 0 ]]; then
for var in $@; do
if [[ $var =~ ^http ]]; then cur_url=$(echo "$cur_url $var"); else last=$var; fi
done
if [ "$(curl -s $cur_url | grep -E '([0-9]{1,3}.){3}[0-9]{1,3}')" ]; then curl -s $cur_url | sort ; else cat $last; fi
fi
}

#CHECK DUPLICATE IN ROUTES FUNCTION
check_dupl_func(){
dupl_route=$(sort -m $SYSTEM_FOLDER/etc/bird4-force*.list | awk '{print $2}' | uniq -d | grep -Fw -f - $SYSTEM_FOLDER/etc/bird4-force*.list)
if [[ -n "$dupl_route" ]]; then
echo "DUPLICATE IN FILES"
echo $dupl_route | sed 's/; /;\n/g' -
fi
}
}
37 changes: 13 additions & 24 deletions Install/double_vpn/add-bird4_routes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,39 @@

#USER VARIABLE
DEBUG=0
DISABLE_URLS=0
ISP=ISPINPUT
VPN1=VPN1INPUT
VPN2=VPN2INPUT
HOMEPATH=HOMEPATHINPUT
SYSTEM_FOLDER=SYSTEMFOLDERINPUT
URLS="URLINPUT"

#SCRIPT VARIABE
BLACKLIST=$HOMEPATH/lists/antifilter.list
ROUTE_FORCE_ISP=$SYSTEM_FOLDER/etc/bird4-force-isp.list
ROUTE_FORCE_VPN1=$SYSTEM_FOLDER/etc/bird4-force-vpn1.list
ROUTE_FORCE_VPN2=$SYSTEM_FOLDER/etc/bird4-force-vpn2.list
ROUTE_BASE_VPN1=$SYSTEM_FOLDER/etc/bird4-base-vpn1.list
ROUTE_USER_VPN1=$SYSTEM_FOLDER/etc/bird4-user-vpn1.list
ROUTE_BASE_VPN2=$SYSTEM_FOLDER/etc/bird4-base-vpn2.list
ROUTE_USER_VPN2=$SYSTEM_FOLDER/etc/bird4-user-vpn2.list
VPNTXT=$HOMEPATH/lists/user-vpn.list
VPN1TXT=$HOMEPATH/lists/user-vpn1.list
VPN2TXT=$HOMEPATH/lists/user-vpn2.list
ISPTXT=$HOMEPATH/lists/user-isp.list
MD5_SUM=$HOMEPATH/scripts/sum.md5
HOMEPATH=HOMEFOLDERINPUT

source $HOMEPATH/scripts/func.sh

#WAIT DNS
wait_dns_func
#GET INFO ABOUT SCRIPT
get_info_func $1

#INIT FILES
WORK_FILES="$BLACKLIST \
$ROUTE_FORCE_ISP $ROUTE_FORCE_VPN1 $ROUTE_FORCE_VPN2 \
$ROUTE_BASE_VPN1 $ROUTE_USER_VPN1 \
$ROUTE_BASE_VPN2 $ROUTE_USER_VPN2 \
$ROUTE_BASE_VPN $ROUTE_USER_VPN \
$MD5_SUM"
INIT=$1
init_files_func $WORK_FILES

#WAIT DNS
wait_dns_func

#CHECK AND REPLACE VPN IN BIRD CONF
vpn_bird_func $BIRD_CONF $VPN1 $VPN2

#BASE_LIST
curl_funk $URLS $BLACKLIST | diff_funk $BLACKLIST -
ipr_func $VPN1 $BLACKLIST | diff_funk $ROUTE_BASE_VPN1 -
sed "s/$VPN1/$VPN2/g" $ROUTE_BASE_VPN1 | diff_funk $ROUTE_BASE_VPN2 -
ipr_func lo $BLACKLIST | diff_funk $ROUTE_BASE_VPN -

#BASE_USER_LIST
ipr_func $VPN1 $VPNTXT | diff_funk $ROUTE_USER_VPN1 -
sed "s/$VPN1/$VPN2/g" $ROUTE_USER_VPN1 | diff_funk $ROUTE_USER_VPN2 -
ipr_func lo $VPNTXT | diff_funk $ROUTE_USER_VPN -

#FORCE_LIST
ipr_func $ISP $ISPTXT | diff_funk $ROUTE_FORCE_ISP -
Expand Down
10 changes: 5 additions & 5 deletions Install/double_vpn/bird-table.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

start()
{
if [ -z "$(ip rule | awk '/^30000/' )" ]; then
ip rule add table 1000 priority 30000
fi
if [ -z "$(ip rule | awk '/^30001/' )" ]; then
ip rule add table 1000 priority 30001
ip rule add table 1001 priority 30001
fi
if [ -z "$(ip rule | awk '/^30002/' )" ]; then
ip rule add table 1001 priority 30002
fi
if [ -z "$(ip rule | awk '/^30003/' )" ]; then
ip rule add table 1002 priority 30003
ip rule add table 1002 priority 30002
fi
}

Expand Down
94 changes: 44 additions & 50 deletions Install/double_vpn/bird4.conf
Original file line number Diff line number Diff line change
@@ -1,71 +1,65 @@
log syslog all;
log stderr all;

router id 123.123.123.123; # current external ip

protocol direct {
interface "VPN1INPUT", "VPN2INPUT";
}
router id IDINPUT;

table route_force;
table route_vpn1;
table route_vpn2;

protocol device {
scan time 15;
}

protocol kernel {
table route_force;
persist;
protocol direct { interface "VPN1INPUT", "VPN2INPUT"; }
protocol device { scan time 15; }
template kernel KERNEL_BASE {
learn;
scan time 900;
scan time 60;
import none;
export all;
kernel table 1000; # kernel routing table number
}
filter pref_50_force {
preference = 50;
accept;
}
filter pref_100_vpn1 {
ifname = "VPN1INPUT"; #MARK_VPN1
preference = 100;
accept;
}
filter pref_150_vpn2 {
ifname = "VPN2INPUT"; #MARK_VPN2
preference = 150;
accept;
}

protocol kernel {
protocol kernel kernel_force from KERNEL_BASE {
export filter pref_50_force;
table route_force;
kernel table 1000;
}
protocol kernel kernel_vpn1 from KERNEL_BASE {
export filter pref_100_vpn1;
table route_vpn1;
persist;
learn;
scan time 900;
import none;
export all;
kernel table 1001; # kernel routing table number
kernel table 1001;
}

protocol kernel {
protocol kernel kernel_vpn2 from KERNEL_BASE {
export filter pref_150_vpn2;
table route_vpn2;
persist;
learn;
scan time 900;
import none;
export all;
kernel table 1002; # kernel routing table number
kernel table 1002;
}

protocol static {
protocol static static_force {
table route_force;
include "SYSTEMFOLDERINPUT/etc/bird4-force-isp.list";
include "SYSTEMFOLDERINPUT/etc/bird4-force-vpn1.list";
include "SYSTEMFOLDERINPUT/etc/bird4-force-vpn2.list";
check link on;
preference 50;
include "bird4-force-isp.list";
include "bird4-force-vpn1.list";
include "bird4-force-vpn2.list";
}

protocol static {
protocol static static_vpn {
table route_vpn1;
include "SYSTEMFOLDERINPUT/etc/bird4-base-vpn1.list";
include "SYSTEMFOLDERINPUT/etc/bird4-user-vpn1.list";
check link on;
preference 250;
}
include "bird4-base-vpn.list";
include "bird4-user-vpn.list";
}

protocol static {
table route_vpn2;
include "SYSTEMFOLDERINPUT/etc/bird4-base-vpn2.list";
include "SYSTEMFOLDERINPUT/etc/bird4-user-vpn2.list";
check link on;
preference 500;
}
protocol pipe pipe_vpn1_to_vpn2 {
table route_vpn1;
peer table route_vpn2;
export all;
import none;
}
28 changes: 13 additions & 15 deletions Install/one_vpn/add-bird4_routes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,39 @@

#USER VARIABLE
DEBUG=0
DISABLE_URLS=0
ISP=ISPINPUT
VPN1=VPN1INPUT
HOMEPATH=HOMEPATHINPUT
SYSTEM_FOLDER=SYSTEMFOLDERINPUT
URLS="URLINPUT"

#SCRIPT VARIABE
BLACKLIST=$HOMEPATH/lists/antifilter.list
ROUTE_FORCE_ISP=$SYSTEM_FOLDER/etc/bird4-force-isp.list
ROUTE_FORCE_VPN1=$SYSTEM_FOLDER/etc/bird4-force-vpn1.list
ROUTE_BASE_VPN1=$SYSTEM_FOLDER/etc/bird4-base-vpn1.list
VPN1TXT=$HOMEPATH/lists/user-vpn.list
ISPTXT=$HOMEPATH/lists/user-isp.list
MD5_SUM=$HOMEPATH/scripts/sum.md5
HOMEPATH=HOMEFOLDERINPUT

source $HOMEPATH/scripts/func.sh

#WAIT DNS
wait_dns_func
#GET INFO ABOUT SCRIPT
get_info_func $1

#INIT FILES
WORK_FILES="$BLACKLIST \
$ROUTE_FORCE_ISP $ROUTE_FORCE_VPN1 \
$ROUTE_BASE_VPN1 \
$ROUTE_BASE_VPN \
$MD5_SUM"
INIT=$1
init_files_func $WORK_FILES

#WAIT DNS
wait_dns_func

#CHECK AND REPLACE VPN IN BIRD CONF
vpn_bird_func $BIRD_CONF $VPN1

#BASE_LIST
curl_funk $URLS $BLACKLIST | diff_funk $BLACKLIST -
ipr_func $VPN1 $BLACKLIST | diff_funk $ROUTE_BASE_VPN1 -
ipr_func lo $BLACKLIST | diff_funk $ROUTE_BASE_VPN -

#FORCE_LIST
ipr_func $ISP $ISPTXT | diff_funk $ROUTE_FORCE_ISP -
ipr_func $VPN1 $VPN1TXT | diff_funk $ROUTE_FORCE_VPN1 -
ipr_func $VPN1 $VPNTXT | diff_funk $ROUTE_FORCE_VPN1 -

#RESTART BIRD
restart_bird_func
Expand Down
8 changes: 4 additions & 4 deletions Install/one_vpn/bird-table.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

start()
{
if [ -z "$(ip rule | awk '/^30001/' )" ]; then
ip rule add table 1000 priority 30001
if [ -z "$(ip rule | awk '/^30000/' )" ]; then
ip rule add table 1000 priority 30000
fi
if [ -z "$(ip rule | awk '/^30002/' )" ]; then
ip rule add table 1001 priority 30002
if [ -z "$(ip rule | awk '/^30001/' )" ]; then
ip rule add table 1001 priority 30001
fi
}

Expand Down
Loading

0 comments on commit c67b20d

Please sign in to comment.