Browse Source

Merge pull request #11 from acetoneRu/master

Добавил скрипт для Yggdrasil-ресида
pull/13/head
orignal 3 years ago committed by GitHub
parent
commit
dc6c218947
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      yggdrasil/README.md
  2. 22
      yggdrasil/err.html
  3. 15
      yggdrasil/reseed_nginx.conf
  4. 19
      yggdrasil/seed.html
  5. BIN
      yggdrasil/wild-putin.png
  6. 186
      yggdrasil/y2r.sh

9
yggdrasil/README.md

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
# Yggdrasil I2P Reseed creator
## bash script for creating reseed with Yggdrasil routers
Also add `y2r.sh` to cron for automatically updating.
Example:`/etc/cron.hourly/i2preseed`
#!/bin/bash
/path/to/y2r.sh

22
yggdrasil/err.html

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Access denied</title>
<style media="screen">
* {
box-sizing: border-box;
font-size: 30px;
font-family: monospace;
margin: 20;
padding: 20;
background-color: black;
color: red;
}
</style>
</head>
<body><center>
<p>The reseed is available for download from an I2P router only!<p>
<img src="wild-putin.png">
</center></body>
</html>

15
yggdrasil/reseed_nginx.conf

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
limit_req_zone $binary_remote_addr zone=reseed:512k rate=10r/m;
server {
root /srv/pyseeder/output;
listen [324:9de3:fea4:f6ac::ace]:7070;
index seed.html;
location /i2pseeds.su3 {
limit_req zone=reseed burst=5;
error_page 403 /err.html;
if ($http_user_agent !~* "Wget/1.11.4" ) { return 403; }
}
location /acetone_at_mail.i2p.crt {
limit_req zone=reseed;
}
}

19
yggdrasil/seed.html

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> <meta http-equiv="Refresh" content="3600" />
<title>I2P Reseed in Yggdrasil.</title>
<style media="screen">
* {
font-family: monospace;
background-color: black;
color: white;
}
</style>
</head>
<body><center>
<p>Number of Yggdrasil routers in the I2P network.</p>
<p style="color: gray">Data from the current reseed. Updated hourly.</p>
<p style="font-size: 200px">99</p>
</center></body>
</html>

BIN
yggdrasil/wild-putin.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

186
yggdrasil/y2r.sh

@ -0,0 +1,186 @@ @@ -0,0 +1,186 @@
#!/bin/bash
#
# The script finds routers with a Yggdrasil IPv6
# and mixes 30% of regular routers with them.
#
# If Yggdrasil < 25 then regular routers 25;
#
# Путь до папки netDb, которая будет скопирована
netdb=/var/lib/i2pd/netDb
# Путь до выходной папки
outdb=/srv/pyseeder/transitoutput
#
###
temp=/tmp/yggreseed
success=/tmp/yggreseed.success
padding=/tmp/yggreseed.padding
minimum=25 # Минимальное количество роутеров с Ygg
timestart=$(date '+%Y-%m-%d %H:%M:%S')
###
# Проверка рабочих директорий:
echo -n $netdb...
cd $netdb &> /dev/null
if [[ $? != 0 ]]; then
echo "X"
exit 1
else
echo "OK"
fi
ls
echo -n $outdb...
cd $outdb &> /dev/null
if [[ $? != 0 ]]; then
echo "X"
exit 2
else
echo "OK"
fi
ls
# Очистка выходной директории
echo "Clearing the output directory..."
rm -r $outdb/* &> /dev/null
maketemp () { # Создание временной папки первичной сортировки
echo "Creating temp directory..."
rm -r $temp &> /dev/null
mkdir $temp &> /dev/null
if [[ $? != 0 ]]; then
echo "Error. Exiting."
exit 3
fi
}
maketemp
copy () { # Копирование базы роутера в первичную временную папку
echo "Copying the router base to the temp directory..."
cp -r $netdb/* $temp/ &> /dev/null
if [[ $? != 0 ]]; then
echo "Error. Exiting."
exit 4
fi
}
copy
# Main section
echo "Finding the Yggdrasil routers:"
cd $temp
yggaddr=0
count=1
for((;;)); do # Поиск Yggdrasil-роутеров и их копирование в выходную директорию
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
if [[ $? != 0 ]]; then
break
fi
cd $dir
for((;;)); do
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
cd $temp
rmdir $dir
break
fi
echo -n "[$count] "
echo -n "$dat ["
cat $dat | grep '=.[23]..:' &> /dev/null # Поиск host=200: или host=300:
if [[ $? == 0 ]]; then # Успех, забираем
echo "+]"
let yggaddr++
mkdir $outdb/$dir &> /dev/null
mv ./$dat $outdb/$dir
echo $dat >> $success
else # Не успех, удаляем
echo ".]"
rm ./$dat
fi
let count++
done
done
echo -e "\n================================================= YGGDRASIL *"
cat $success
rm $success
echo -e "==========================================================="
echo -e "Reseed building..."
yggvolume=$(($yggaddr / 100 * 70)) # 70% ресида - Ygg-роутеры.
echo -n "Need "
if [[ $yggvolume < $minimum ]]; then # Если их меньше minimum, докладываем 25 роутеров обычных
echo -n "25 "
paddingcount=25
else
paddingcount=$(($yggaddr / 100 * 30))
echo -n "$paddingcount "
fi
echo "regular routers"
cd $temp
maketemp
copy
echo -n "Padding status: "
realpadding=0
for((i=0; $i < $paddingcount; i++)); do
rand=$(( $RANDOM % 10 ))
for((j=0;$j!=$rand;j++)); do
cd $temp
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
if [[ $? != 0 ]]; then
echo "Dir error! PADDING-RAND-FOR"
exit 5
fi
cd $dir
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
cd $temp
rmdir $dir
else
rm ./$dat
fi
cd $temp
done
padselect () { # Дополнение ресида случайными роутерами
cd $temp
dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
if [[ $? != 0 ]]; then
echo "."
padselect
fi
cd $dir
dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
cd $temp
rmdir $dir
padselect
fi
}
padselect
mkdir $outdb/$dir &> /dev/null
mv ./$dat $outdb/$dir
echo $dat >> $padding
let realpadding++
echo -n "*"
done
echo -e "\n=================================================== PADDING *"
cat $padding
rm $padding
echo -e "==========================================================="
echo -e "\nstarted: $timestart\nfinished: $(date '+%Y-%m-%d %H:%M:%S')"
echo -e "total routers: $count"
echo -e "reseed build: $(($yggaddr+$realpadding)) ($yggaddr/$realpadding)\n"
echo -e "Yggdrasil I2P reseed creator | acetone, 2021\n"
# Update web page
sed -i "s/>[0-9]\{1,1000\}</>$yggaddr</" /srv/pyseeder/output/seed.html
echo "Web page updated"
Loading…
Cancel
Save