Instalare Wireguard si Squid cu Adguard

=====================

In cadrul acestui tutorial vom seta un server VPN Wireguard, un server PROXY Squid si un server DNS Adguard.
La aceste servere va veti conecta de pe PC-ul cu windows sau linux sau direct pe telefonul cu android, f posibil sa mearga si pe iphone, nu am, nu am cum sa testez.
Serverul adguard va avea niste filtre care vor bloca reclamele de pe orice site, mai putin youtube, pt youtube avem alta solutie aici

In locatia unde instalezi ce se va explica aici (cu docker) trebuie sa ai ip public si un DNS. Ex: example.com
Se forwardeaza din router (sau security group daca e vps in cloud) porturile catre linuxul unde vor rula serviciile:
- 443/tcp (pt nginx)
- 51820/udp (pt adguard)
- 19504/tcp (pt squid, folosim un port non standard)
De asemeni pt configurare adguard de la zero veti avea nevoie si de 3000. Voi explica mai jos ca puteti folosi adguard-ul meu gata configurat si nu mai este nevoie.
Ca sa functioneze acest setup, va trebui ca pe VPS-ul unde puneti aceste servicii sa schimbati DNS-ul linuxului cu adguard si ca sa fie functional veti avea nevoie de asemeni si de dnsmasq, este obligatoriu.
Eu am pus aceasta solutie pe un server free de la oracle cloud care din pacate este cu arm64 dar e testat si functional. Evident ca merge si pe orice linux x86_64
Pe ubuntu trebuie oprit systemd-resolved.service si dezactivat insa nu de la inceput si cam pe orice linux procedura este similara:
$ systemctl stop systemd-resolved
$ systemctl mask systemd-resolved

Eu am pus totul cu root, recomandat este sa se foloseasca totusi un user separat.
Se da allow din firewall pe masina la aceste porturi (iptables, ufw, depinde ce ai).
Exemplu basic iptables pt custom ports exista aici

In /root creati urmatoarele 5 foldere:
$ cd /root
$ mkdir dnsmasq adguard squid wg-easy nginx

In fiecare folder va exista un fisier start.sh cu drepturi execute si fisierele si subfoldere aditionale.
Se instaleaza docker pe linuxul respectiv, e mai simplu asa, ce este de explicat aici va fi integral docker:
$ apt install docker.io -y
(deci daca ai ubuntu/debian pachetul este docker.io, daca ai fedora/centos exista repo special pt docker-ce)


O sa luam cele 5 foldere pe rand:

DNSmasq

Va duceti in folder prima data si ramaneti acolo.
In acest folder veti avea nevoie de dnsmasq.conf care se creeaza automat ruland acest fisier:
il puteti crea cu numele generare_conf.sh:
$nano generare_conf.sh

#!/bin/bash

# Output file
output_file="dnsmasq.conf"

echo "" > "$output_file"
echo -e "no-resolv\nserver=127.0.0.1#5353" > "$output_file"

# Get network interfaces
interfaces=$(ip link show | grep -E 'eth[0-9]+|ens[0-9]+|enp[0-9]+|docker[0-9]+|br-'| grep -v veth|awk -F ': ' '{print $2}')

for interface in $interfaces; do
echo "interface=$interface" >> "$output_file"
done
ipuri=$(ip a | grep -E 'eth[0-9]+|ens[0-9]+|enp[0-9]+|docker[0-9]+|br-'| grep -v veth|grep inet|awk '{print $2}'|cut -d/ -f1|tr "\n" ","|sed 's/.$//')
echo "listen-address="$ipuri >> "$output_file"
Il faceti executabil ca dealtfel toate fisierele .sh ce vor urma cu chmod +x generare_conf.sh si il rulati din folderul respectiv adica /root/dnsmasq cu ./generare_conf.sh
Imediat dupa ce l-ati rulat o sa vedeti ca s-a creat fisierul dnsmasq.conf care la mine ca exemplu arata asa:
no-resolv
server=127.0.0.1#5353
interface=enp0s3
interface=docker0
interface=br-f1945aa7d16f
listen-address=10.0.0.112,172.17.0.1,192.168.11.1
Ce face generare_conf.sh, pai citeste numele interfetelor pe care le aveti cu niste conditii si IP-urile care trebuie si le aranjeaza in asa fel in fisierul dnsmasq.conf astfel incat serverul dnsmasq sa il citeasca corect.

Dupa ce ati oprit serviciul systemd-resolved (am scris mai sus), trebuie sa puneti o singura data in /etc/resolv.conf:
$ cat /etc/resolv.conf
nameserver 127.0.0.1

Fisierul start.sh care apeleaza si generarea dnsmasq.conf de mai sus:
$ nano start.sh

#! /bin/bash
/root/dnsmasq/generare_conf.sh
sleep 5

if test -f /root/dnsmasq/dnsmasq.conf; then

docker run -d --name dnsmasq \
--restart unless-stopped \
--network=host \
--cap-add=NET_ADMIN \
-v /root/dnsmasq/dnsmasq.conf:/config/dnsmasq.conf \
dpvduncan/dnsmasq

fi
Din folderul /root/dnsmasq porniti containerul cu ./start.sh si ulterior verificati daca a pornit containerul, loguri samd.

Creare retea docker

- Pt urmatoarele 3 containere va trebui creata o retea docker speciala care va fi folosita de adguard, squid si wg-easy:
$ docker network create --driver=bridge --subnet=192.168.11.0/28 retea
$ docker network ls|grep retea
f1945aa7d16f retea bridge local
O mica mentiune, aceste 3 containere folosesc docker network "retea" creeata aici iar dnsmasq si nginx folosesc docker network host!!

Adguard

Va duceti in folder prima data si ramaneti acolo.
Creati 2 subfoldere confdir si workdir si apoi start.sh
$ nano start.sh

docker run -d \
--name adguard \
--network=retea --link dnsmasq --restart unless-stopped \
-v /root/adguard/workdir:/opt/adguardhome/work \
-v /root/adguard/confdir:/opt/adguardhome/conf \
-p 5353:53/tcp -p 5353:53/udp -p 8080:80/tcp -p 3000:3000/tcp -p 853:853/tcp \
adguard/adguardhome
Ca sa instalati si sa configurati adguard trebuie sa accesati prima data serverul pe portul 3000 dupa care pe 8080 pt toate setarile care nu sunt putine insa trebuie sa acceptati din firewall portul 3000, sa accesati si sa configurati manual mai intai.
Pt a evita treaba asta o sa pun o arhiva cu toate folderele inclusiv adguard cu tot ce contine, cu ce upstream DNS folosesc eu, setari, filtre, DNS custom samd si administrarea se va face pe 8080, ma rog, prin intermediul nginx care se va explica mai jos.
Daca vreti sa folositi cum am setat eu va logati cu user: adguard si parola1234.
Din folderul /root/adguard porniti containerul cu ./start.sh si ulterior verificati daca a pornit containerul, loguri samd.

Inainte de a trece mai departe, avand in vedere ca deja dnsmasq si adguard ruleaza si este configurat indiferent de metoda, ar trebui sa va rezolve DNS-ul pe host, verificati orice site cu nslookup, ping etc.

Squid

Va duceti in folder prima data si ramaneti acolo.
O sa gasiti toate fisierele in arhiva pe langa start.sh: squid.conf si password. Squid se poate restrictiona sa functioneze pe baza de trusted IP insa in situatia aceasta este mai bine pe baza de htpasswd. Aici va puteti genera continutul fisierului password cu user si parola criptata.
Va sfatuiesc sa folositi o parola cu multe caractere, caractere speciale, cifre etc

Fisierul de configurare squid.conf care nu necesita nicio modificare decat port daca il rulati cu network host (recomandat pt o performanta mult mai buna):


Creati start.sh
$ nano start.sh

docker run -d \
--name squid --dns 10.0.0.112 \ #aici puneti IP-ul vostru
--network=host \
--memory="1g" --restart=always \
-v /root/squid/squid.conf:/etc/squid/squid.conf \
-v /root/squid/passwords:/etc/squid/passwords \
ubuntu/squid
Din folderul /root/squid porniti containerul cu ./start.sh si ulterior verificati daca a pornit containerul, loguri samd.

Creare forward pe host

Inainte de a porni wirequard (wg-easy) pe host trebuie activat port forward la nivel de kernel:
$ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Verificare:
$ /sbin/sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Wireguard

Va duceti in folderul wg-easy prima data si ramaneti acolo.
Creati aici subfolderul care se va numi tot wg-easy cu mkdir wg-easy
Creati start.sh
$ nano start.sh

docker run -d \
--name=wg-easy \
--network=retea \
--restart unless-stopped \
--link adguard \
-e WG_HOST=11.22.33.44 \ #Aici puneti ip-ul public chiar daca pe VPS aveti ip de retea
-e PASSWORD=parola_administrare \
-e WG_DEFAULT_DNS=192.168.11.1 \ #Asta asa ramane pt ca asta e GW-ul de la reteaua docker "retea"
-v /root/wg-easy/wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
Din acelasi folder /root/wg-easy porniti containerul cu ./start.sh si ulterior verificati daca a pornit containerul, loguri samd.

Wireguard este dificil de setat fara aceasta interfata web (wg-easy) care are in spate nodejs din ce am citit, este f profesional facut, totul intr-un singur container.
Dupa ce o sa accesati mai jos in browser interfata wg-easy veti observa in subfolderul wg-easy fisierele de configurare.
Ca si curiozitate puteti observa de asemeni si cum este setat iptables in container, este nevoie de forward si postrouting pt a primi IP-ul pe partea de client:

Configurarea wireguard pe host fara acest wg-easy este destul de complicata si ar fi necesitat foarte multe explicatii mai ales pe parte de firewall, generare si imperechere a keylor de criptate server/client samd. Solutia wg-easy este exceptionala, repet.
Nota* Din pacate aceasta solutie cu docker dpdv performanta pierde pana la 50% din viteza up/down comparativ cu wireguard instalat nativ.
wg-easy se poate instala si nativ insa necesita sa instalezi si nodejs. Se bazeaza de asemeni pe wireguard instalat nativ insa nu am testat, totul se face pe host.

-------------------------------------------------------------------------------------------------------------------------------------------------

Alternativa server wireguard fara docker, mai rapida cu pana la ~ 50% cu management ce ruleaza docker


Pe o conexiune gigabit unde la speedtest am la download in jur de 900, 950 mbps, cu wg-easy(docker) am cam 450 mbps iar cu solutia urmatoare chiar depasesc 750 mbps la download.


Asigurati-va ca este oprit containerul wg-easy si ca nu porneste accidental, foarte important!

Se instaleaza wireguard pe linuxul respectiv, deci trebuie sa fie functional, initial fara niciun fisier de configurare dar sa fie instalat.
$ apt install wireguard
$ apt-get install -y qrencode
Obligatoriu trebuie iptables, este mai sus un link catre un exemplu.

$ mkdir /root/easy-wg-quick
$ chmod 777 /root/easy-wg-quick #php-ul va avea nevoie de 777 in acest folder ca sa poata scrie
$ cd /root/easy-wg-quick #(si ramanem aici)
$ wget https://git.io/fjb5R -O gen.sh
$ chmod +x gen.sh

Se editeaza fisierul gen.sh in mai multe locuri, fisierul arata asa dupa modificari:

Se ruleaza gen.sh si genereaza toate fisierele necesare si totodata se creeaza si primul client (client1) dupa care se restarteaza serverul:
$ ./gensh client1
Listati cu ls sa vedeti ca a creat niste fisiere, nu voi explica ce face fiecare, doar pt client1 sunt 3 fisiere la numar.

In momentul asta wireguard ar trebui sa fie deja pornit si se verifica ca s-a ridicat:
$ wg

Nota* In Adguard se trece si IP-ul 10.88.188.1 la lista de IP-uri permise.
De asemeni in dnsmasq.conf (docker) trebuie refacut dnsmasq.conf:
-se adauga interface=wghub si jos la listen-address se pune si 10.88.188.1
si apoi se restarteaza containerul dnsmasq


Pt generarea urmatorilor clienti. de ex client2 sau cum vreti sa il denumiti ca sa stiti cine il foloseste:
$ ./gensh client2
Cu comanda asta se genereaza cele 3 fisiere pt client2, adauga automat index nou in fisierul seqno.txt si de asemeni adauga noul client(peer) in server wghub.conf. Comanda nu mai modifica/adauga nimic altceva!

Ca sa stergeti un client (peer) rulati acest script si va sterge peer-ul din wghub.conf si sterge cele 3 fisiere client.
Fisierul il aveti dedesubt si il rulati cu:
$ ./del.sh clientx.
Daca ati scris gresit numele clientului scriptul de opreste, nu are sens sa restarteze wireguard degeaba.

Observam ca exista si un fisier inclus included.sh, acest fisier mai verifica inca o data seqno.txt si elimina liniile goale inutile din fisierul wghub.conf care mai apar la rularea gen.sh sau del.sh:


Cam atat, scripturile functioneaza daca se face administrarea ssh insa scopul este sa facem management web ca sa nu intram ssh de fiecare data.
Ca sa fie clar, toate fisierele trebuie sa fie in /root/easy-wg-quick: del.sh, gen.sh, included.sh, index.php, qrcode.png, wireguard.png plus ce se genereaza ulterior. Doar primele 3 va trebuie daca ramaneti la ssh!

Pt management web este relativ complicat de setat, o sa incerc sa explic aici cum am reusit:
Dupa ce este pus si php-ul (vedeti mai jos cum) testati din browser adaugarea unui peer si ar trebui sa va genereze 3 fisiere noi si sa modifice si continutul fisierului wghub.conf
Din cauza containerului php, fisierele se creaza cu alt owner, in cazul meu 82 (pt ca userul www-data din container are uid 82) si ca atare tot folderul /root/easy-wg-quick trebuie sa aiba chown 82:82 cu tot cu fisierele din interior. Puteti crea manual pe host www-data cu id 82 sau daca exista deja doar ii schimbati id cu usermod si o sa va arate frumos fisierele cu www-data insa sincer nu ajuta la nimic.
Acelasi folder /root/easy-wg-quick are chmod 777, din pacate nu merge altfel. Deci la un ls in folder, totul trebuie sa fie cu 82 (user si group) sau www-data daca ati facut ce am scris si de asemeni toate fisierele trebuie sa aiba chmod 644 cel putin.
Fisierul seqno.txt trebuie sa aiba 777 iar cele sh 755 (execute) altfel nu merge nimic. Pe alocuri se mai strica permisiunile si am pus niste comenzi chmod si chown prin scripturile sh.
Daca sunt indeplinite toate conditiile puteti genera si sterge clienti din pagina web, adica pe partea de fisiere e totul ok insa din browser nu se poate da restart la wireguard ca sa le mai si ia in considerare. Comanda de restart este inclusa in gen.sh si del.sh dar merge numai daca scriptul este executat din consola, nu din php! Tot din cauza userului www-data, in momentul in care ajunge sa execute comanda wg-quick down/up, (wireguard-tools si sudo de asemeni instalate in container) nu are cum sa execute pe host din lipsa de drepturi.
Am incercat tot felul de workaround-uri inclusiv sa schimb uid in container din 82 in 1000, nu are niciun efect.
Culmea este ca in container functioneaza comanda wg-quick, nu mai da nici o eroare in loguri dar totusi nu restarteaza.
Intr-un final am renuntat, posibil sa se poata faca insa probabil s-ar crea niste gauride securitate dupa cum am citit, nu prea avea rost si pe cale de consecinta am comentat comanda de reload wg de la sfarsitul scripturilor gen.sh si del.sh, nu isi mai are rostul.

Asadar pt restart wireguard ca sa se ia in considerare modificarile fisierelor facute din browser, aveti doua metode:
Metoda 1. cro.sh pe care il puneti pe host direct in /root/ nu in subfolderul easy-wg-quick care ruleaza in crontab la 2 minute si verifica cand s-a modificat ultima data wghub.conf. Daca e mai nou de 1.99 min (aprox 119 secunde) atunci da restart la wireguard, daca nu, nu pt ca nu are sens:

#!/bin/bash

fisier="/root/easy-wg-quick/wghub.conf"

if find "$fisier" -mmin -1.99 | grep -q '.'; then
#/bin/bash -c 'exec /usr/bin/wg syncconf wghub <(exec /usr/bin/wg-quick strip wghub)'
wg-quick down $fisier
wg-quick up $fisier
fi

Crontab-ul:
$ crontab -l
*/2 * * * * /bin/bash /root/cro.sh

Metoda 2. Cream in systemd un serviciu wgui.service si un fisier path wgui.path cu care se monitorizeaza fisierul wghub.conf si da restart wireguard cand acesta s-a modificat. Nu sunt mare fan systemd, e prima data cand am testat scenariul asta:

Nu dati enable la serviciul asta wgui pt ca va porni la reboot si o sa dea eroare pt ca el se astepta ca interfata wghub sa fie up.
Trebuie sa dati si un systemctl daemon-reload dupa ce creati astea 2 fisiere systemd:
$ systemctl daemon-reload
$ wg-quick up /root/easy-wg-quick/wghub.conf
$ systemctl restart wgui.{path,service}

De asemeni mai trebuie inca un fisier sa zicem /root/easy-wg-quick/restartwg.sh apelat de wgui.service care e la fel ca si fisierul cro.sh dar fara niciun fel de conditie:
#!/bin/bash

/usr/bin/wg-quick down /root/easy-wg-quick/wghub.conf
/usr/bin/wg-quick up /root/easy-wg-quick/wghub.conf

Nu sunt fan systemd, serviciul wireguardului nu il manage-uiesc cu systemctl, nu merge niciodata cum trebuie insa artificul cu acest wgui isi face treaba.
Nu garantez ca va functiona din prima, trebuie monitorizate logurile de la containerul php in caz ca nu merge ceva, am facut asa de multe incercari si modificari incat nu stiu daca e totul acoperit aici, din pacate le-am bajbait si eu intr-un mare fel pana a iesit...
A doua metoda modifica instant, practic este un fel de reload, face fix acelasi lucru.
Singurul avantaj e ca face instant insa necesita un serviciu aditional, chestie de gust.
Aceasta solutie de deasupra are management web docker (nginx+php) facut de mine si wireguard instalat nativ pe host.

Nginx

Va duceti in folderul nginx prima data si ramaneti acolo.
Aici creati subfolderul conf.d in care veti avea 2 fisiere: adguard.conf si wg.conf. Creati de asemeni si subfolder cert.
Aceste 2 vhosturi vor folosi certificate LetEncrypt care se genereaza cu mai multe metode, puteti cauta exemplu aici
Indiferent de metoda, se vor genera 2 fisiere, recomand sa fie certificat wildcard pt ca aveti nevoie de 2 inregistrari:
A wireguard.example.com 11.22.33.44 #DNS pt servicii aditionale
A adguard.example.com 11.22.33.44 #DNS pt servicii aditionale

Creati vhost-urile care arata cam asa:

In cazul in care folositi wireguard instalat nativ pe baza solutiei prezentate mai sus, vhostul pt wg se schimba si va functiona in tandem cu un alt container php:


Dupa ce aveti vhost-urile si certificatele puse in foldere, creati start.sh
$ nano start.sh

docker run -itd \
--name nginx \
--restart unless-stopped \
-v /root/nginx/cert:/etc/ssl \
-v /root/nginx/conf.d/wg.conf:/etc/nginx/conf.d/wg.conf \
-v /root/nginx/conf.d/adguard.conf:/etc/nginx/conf.d/adguard.conf \
-v /root/easy-wg-quick:/usr/share/nginx/html \
--network=host \
nginx:1.25.3-alpine
Din acelasi folder /root/nginx porniti containerul cu ./start.sh si ulterior verificati daca a pornit containerul, loguri samd.

-Deschideti in browser https://adguard.example.com si revizuiti setarile, adaugati custom DNS, adaugati alte liste etc
Am specificat mai sus cum si am pus si credentialele. Vreti de la zero sa configurati, aveti mai sus explicatii.
Trebuie sa aveti mare atentie la Settings/DNS Settings la sectiunea Allowed clients unde trebuie sa adaugati ip-ul de pe VPS si clasa "retea": 192.168.11.0/28! sau 10.88.188.0/24 pt wg nativ si eventual si clasa network default 172.17.0.0/26 daca mai sunt si alte containere pe masina si vreti sa aiba resolver Adguard-ul.
-Deschideti in browser https://wireguard.example.com si creati clienti pt utilizare pe android (QR code) sau pe PC (download config file)
-Pt varianta wireguard instalata nativ veti deschide acelasi https://wireguard.example.com dar ca sa functioneze veti avea nevoie si de un container php:

PHP (pt varianta wireguard fara docker)

Se build-uieste imaginea php cu pachete aditionale, in principiu wireguard-tools si sudo nu cred ca mai sunt necesare, restul insa trebuie.

Creati folderul /root/php daca nu este creat si intrati in el:
$ docker build -t php:1 .

Ramanem in folderul /root/php si cream start.sh
$ nano start.sh

docker run -itd --name php \
-v /root/easy-wg-quick:/usr/share/nginx/html \
-v /root/php/php.ini:/usr/local/etc/php/php.ini \
--privileged --network=host \
php:1

Fisierul index.php care se va folosi trebuie pus in /root/easy-wg-quick unde sunt toate fisierele wireguard, php de acolo citeste:

Acest php apeleaza scripturile bash gen.sh si del.sh pt a crea si sterge clienti(peers) direct din pagina web.
Pt download exista si un fisier separat download.php ca sa puteti descarca peername.conf curat:

index.php trebuie sa aiba chown 82 sau www-data daca exista!

Se poate introduce si o pseudo monitorizare care afiseaza dedesubt ce peers sunt activi, IP de la care sunt conectati, iata un mic bash care creaza mon3.txt de asemeni apelat de index.php:
$ nano /root/easy-wg-quick/clienti.sh

#!/bin/bash

wg show wghub | \
awk ' \
/peer:/ {pid=$2} \
/endpoint:/ {endpoint=$2} \
/latest handshake:/ {handshake=$3" "$4" "$5" "$6; printf "Client: %s| Endpoint: %s| Latest Handshake: %s\n", substr(allowed, 1, length(allowed)-3), endpoint, handshake} \
/allowed ips:/ {allowed=$3}' > /root/easy-wg-quick/mon1.txt

cat /root/easy-wg-quick/wghub.conf | egrep '.conf|AllowedIPs' | grep -v configuration | awk '{print $3}'|cut -d "/" -f1|tr "\n" " "|xargs -n 2 > /root/easy-wg-quick/mon2.txt

while IFS="|" read -r client endpoint handshake; do
ip=$(echo $client | awk '{print $2}' | cut -d " " -f2)
name=$(grep $ip /root/easy-wg-quick/mon2.txt | awk '{print $1}')
echo "Client: $name, $endpoint, $handshake"
done < /root/easy-wg-quick/mon1.txt > /root/easy-wg-quick/mon3.txt
Nici nu mai e nevoie de chown, mon3.txt poate ramane si cu root

Se poate updata la 10 secunde de ex dar se complica prea mult partea de cron, la minut este suficient:
* * * * * /bin/bash /root/easy-wg-quick/clienti.sh

Pagina nu are autentificare, e simplu de facut insa nu merita efortul momentan. Securizarea consider ca este suficient facuta din nginx cu htpasswd.
Comparativ cu varianta docker wg-easy ce am facut eu aici e mai minimalist, permite generarea si stergerea clientilor din browser insa are monitorizare precara. Este destul de greu de setat insa avand in vedere sporul de performanta fata de wg-easy(docker) cu peste 50% in unele cazuri,eu cred ca a meritat tot efortul. Ca sa faci monitorizare real time nu ai cum cu php, sau nu stiu eu cum, ai nevoie de ceva syncron sa ruleze in continuu asa cum e facut wg-easy, ai nevoie de nodejs. Clar se poate face si asta insa nu acopera acest tutorial, e suficient si asa cum am facut eu, macar ai link sa verifici IP-ul clientului.
Aveti aici fisierele pt management, ce trebuie pus in /root/wg-quick plus serviciul systemd wgui.


Dupa crearea unui nou client(peer) si scanarea pe telefon, aveti doua metode de restart wireguard ca sa se ia setarile in considerare, ambele functioneaza perfect.
Avand in vedere ca pt monitorizare (daca vreti sa puneti) trebuie cron-ul ala la minut, mai bine va chinuiti cu metoda2 pt restart wireguard, scapati de inca un cron, cum doriti.
Scopul proiectului este sa putem face web management cu docker pt wireguard instalat nativ.

Functionare si Mentenanta

In mod normal un setup cu 5 containere docker se pune cu docker-compose insa eu nu i-am dat de cap. Nu am reusit sa setez docker-compose.yaml sa porneasca in ordine containerele, nu inteleg ce am gresit, indiferent de ce fac nu am DNS nici in squid nici in wireguard deci nu merge nimic.
Am reusit insa in schimb sa fac un mic script bash care se asigura ca este totul in regula si indiferent de situatie porneste totul corect:

Acest script se poate pune pe linux si in crontab sa ruleze singur o data la o ora sa zicem, cum e ceva in neregula se asigura ca fiecare container este up and running.
Se poate pune si la startup cand se da reboot la masina pt updates, etc. Mare atentie sa scoateti wg-easy din variabila array daca folositi wireguard instalat nativ si sa il inlocuiti cu php!

Aveti aici o arhiva cu toate folderele si fisierele pe care le-am explicat pas cu pas ce face fiecare.

Utilizare clienti

Clientul VPN wireguard se descarca de pe siteul oficial pt windows si linux iar pe telefoanele cu Android se instaleaza gratis din Google Play.
Dupa cum am explicat mai sus, pe PC se foloseste fisier de configurare iar pe Android se adauga conexiunea pe baza de QR code.

Pt cine vrea sa aiba IP schimbat si aceasta protectie doar in browser, Proxy-ul http squid se poate folosi pe baza unor extensii. Cele mai cunoscute sunt FoxyProxy (PC cam orice browser si Android doar cu firefox) iar pe PC se mai poate folosi si Switchy Omega, in opinia mea extensie ceva mai buna.
Si pt wireguard si pt squid puteti folosi direct IP, nu e obligatoriu sa folositi domain (unul din cele 2 de sus), wireguard va da direct configul, pt squid puneti voi manual IP,port 19504 plus user/pass.

Avantajul folosirii acestei solutii pe PC sau pe telefon este ca aveti IP-ul de unde ruleaza serverul (in cazul meu Oracle Cloud Frankfurt Germania) si ca resolver de DNS aveti Adguard pe baza filtrelor puse de voi. In afara de youtube, nu va apare nicio reclama pe niciun site in niciun browser, deci nu veti mai fi nevoiti sa instalati adblockere in browsere.
Foarte important este faptul ca nu veti avea DNS leak, sunt o multime de servicii VPN platite prost setate care va dau IP de nush ce tara dar va da de gol DNS-ul. In cazul nostru pe langa faptul ca nu aveti leak, mai are si acele custom filters pe care le-ati setat in Adguard.
Mai mult, va puteti crea in Adguard inregistrari DNS fake care va merg numai voua, nu sunt publicate in Internet, de la Filters/DNS rewrites.
Un mic detaliu pt cine stie la ce ma refer, cu wireguard nu veti avea nici WebRTC leak, putina lume stie detaliul asta. Sunt unele siteuri care verifica deci pe partea asta squid nu poate ascunde.
Asta e asa un bonus, WebRTC se poate rezolva pe PC in firefox de la about:config media.peerconnection.enabled false iar pe orice browser based on chromium cu extensia asta si in felul asta folositi squid cu incredere, nu va da de gol. De asemeni aveti nevoie de Canvas si de inca o extensie care va protejeaza Geolocation: Vytal cu care puteti face spoof la User agent si la Location Data.
Deci pe langa IP aveti nevoie de protectie la DNS, WebRTC, Canvas fingerprint, Geolocation (timezone) si browser agent.

Happy safe browsing the internet!

Last update 11 Nov 2024.