Self-hosting your own VPN on a Proxmox LXC

Highly regarded in the networking crowd as one of the best modern alternatives to OpenVPN, WireGuard combines rock-solid performance with a simple UI and tip-top security provisions. As with any other self-hosted service, there are a couple of ways you can create and run WireGuard in Proxmox, though we’ll keep things simple by choosing the ultra-easy Proxmox VE Helper Script created by developer tteck.

  1. Select your Proxmox node and navigate to its Shell tab.
    Heading to the Shell tab in the Proxmox web UI
  2. Paste the following command into the Shell and tap the Enter key.
    bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/wireguard.sh)"
    The command to install the WireGuard VPN in Proxmox
  3. Choose Yes when Proxmox asks for your approval to create an LXC container for WireGuard.
    Choosing Yes when Proxmox asks the user to create a new LXC WireGuard container
  4. Pick Yes when you’re prompted to use the Default Settings.
    Choosing Yes when Proxmox asks for the user's confirmation to use the default settings when creating an LXC container for WireGuard

    If you encounter network issues when running the script, you can run the apt update and apt dist-upgrade commands in the script. Alternatively, you can try setting the IPv4 and Gateway addresses in the Advanced installation mode instead of going with the Default Settings.

  5. Wait for Proxmox to create and deploy the WireGuard container.

Configuring the WireGuard container

Since the WireGuard script installs the WGDashboard GUI, you can create a private VPN server without messing around with terminal commands.

  1. Open the URL generated by the WireGuard script on your web browser.
    The URL for the WireGuard VPN
  2. Type admin as the Username and Password.
    Logging into the WGDashboard
  3. Create a new Username and Password for the WireGuard container before tapping Next.
    Creating a WireGuard account
  4. (Optional) If you want extra security, you can set up 2FA using your favorite authenticator app.
  5. Press the Configuration button inside the WGDashboard.
    The Configuration button in the WGDashboard
  6. Pick a Name for your WireGuard VPN config and choose the Listen port for the tunnel.
    Entering a name and listen port for the WireGuard VPN tunnel
  7. Enter your preferred IP address & Range and click on Save Configuration.
    Setting the IP address for the WireGuard VPN tunnel

Connecting clients to your WireGuard VPN

With the WireGuard configuration properly set up, it’s time to pair some clients with the VPN server.

  1. Tap the Arrow button next to your freshly created WireGuard configuration.
    Accessing the newly created WireGuard configuration
  2. Click on the + Peer icon.
    Adding new peers in the WireGuard VPN
  3. Simply enter a Name for the new Peer and hit Add while leaving the other settings at their default values.
    Adding a name for the peer in WGDashboard
  4. Download the official WireGuard app on the platform of your choice.
  5. Switch to the client device and tap the + icon inside the WireGuard application.
  6. Head back to the WireGuard web GUI and open the Triple Dot menu next to the Peer.
    Connecting a new peer to the Proxmox WireGuard server
  7. Depending on the client device, you can either use the QR code, .conf file, or join link to connect to the WireGuard VPN.

Maintaining your online privacy with a self-hosted WireGuard container

The WGDashboard with two VPN tunnels set up

If you followed everything correctly, you should be able to connect to the VPN from all your local devices. To take this project to the next level, you can combine the WireGuard VPN with an ad-blocking Pi-Hole container and enjoy an ad-free experience while surfing the web anonymously. However, you’ll need to set up port-forwarding on your router to access the VPN server from external networks. For a truly anonymous experience, you’ll have to configure the WireGuard container to route all the traffic through a third-party VPN provider, preferably one that has servers in different countries if you want the added benefits of location-spoofing.

Besides WireGuard, there are a bunch of other projects you can host on your Proxmox server, including the document organization tool Paperless-ngx, private cloud CasaOS, and Network Video Recorder ZoneMinder. Alternatively, you might want to check out some insane project ideas if you want to build fun things using your Proxmox machine.

[mai mult...]

Instalare AdGuard Home DNS Proxy in Proxmox

AdGuard Home DNS Proxy este un server DNS local care funcționează ca un intermediar între dispozitivele tale și serverele DNS upstream (cum ar fi Cloudflare, Google DNS, etc.).

Ce face DNS Proxy-ul:

Funcția principală:

  • Primește cererile DNS de la dispozitivele din rețeaua ta
  • Le redirecționează către serverele DNS upstream configurate
  • Returnează răspunsurile înapoi către dispozitive

Avantajele folosirii unui DNS Proxy local:

Filtrare și securitate:

  • Blochează reclame, trackere și domenii malware
  • Aplică liste de filtrare personalizate
  • Protecție împotriva phishing-ului

Control și monitorizare:

  • Vezi toate cererile DNS din rețea
  • Statistici detaliate despre traficul DNS
  • Posibilitatea de a permite/bloca domenii specifice

Performance:

  • Cache DNS local (răspunsuri mai rapide pentru domenii accesate frecvent)
  • Reduce latența comparativ cu serverele DNS remote
  • Load balancing între multiple servere upstream

Configurare flexibilă:

  • Poți folosi DNS-over-HTTPS, DNS-over-TLS pentru securitate
  • Setări diferite pentru dispozitive diferite
  • Reguli personalizate de rewrite DNS

În esență, AdGuard Home DNS Proxy transformă rețeaua ta într-un mediu mai sigur și mai rapid prin filtrarea traficului DNS direct la nivelul rețelei, înainte ca cererile să ajungă la serverele DNS publice.

Acum ca stim ce este si cum ne-ar imbunatati securitatea retelei de acasa sa trecem la implementare.

Voi aborda cea mai simpla metoda, printr-un helper script care practic face totul de unul singur. Tot ce ramane de facut e configurarea de dupa.

Vei avea nevoie: de un hipervizor tip 1 online (proxmox, vmware esxi etc.) care sa fie online 24/7. Un mini-PC SH de cateva sute de lei ar trebui sa tina acest LXC (container) fara probleme. Pe langa asta, poti adauga mai multe servicii lightweight sa iti extinzi laboratorul.

Cerinte hardware:

  • 512 MB RAM sunt mai mult decat suficient pentru reteaua ta de acasa.
  • 1 CPU-core.
  • 2 GB Storage.

Link-ul oficial GitHub de unde vom copia script-ul: https://community-scripts.github.io/ProxmoxVE/scripts?id=adguard

Nu rulati script-uri de pe surse neconfirmate si fara un research in prealabil!

Vom lua ca exemplu un nod Proxmox, Debian (setup-ul meu actual). Script-ul din link-ul de mai sus este strict pentru Proxmox Virtual Environment, dar daca folositi altceva sunt alternative de script-uri (Windows, Vmware etc.):

  1. Logati-va prin SSH pe nodul pe care vreti sa instalati/gazduiti containerul AdGuard.
  2. Ca o buna practica rulati comanda:

    sudo apt update && sudo apt upgrade -y 

  3. Rulati script-ul de pe GitHub:

    bash -c “$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/adguard.sh)”

  4. Locatia config-ului (in caz de vreti sa configurati din CLI si nu din dashboard-ul AdGuard):                                         /opt/AdGuardHome/AdGuardHome.yaml
  5. Acest script iti efectiv iti va instala automat containerul, cu configuratia basic.
  6. Dupa ce a terminat, ai 2 optiuni: Default settings, configurarea initiala este automatizata; Advanced Settings (pe care o recomand) unde ai posibilitatea de a-i pune IP-ul fix pe care il doresti, numele si alte configuratii de inceput.
  7. La final vei primi un link care va arata asa: http://YOUR-IP:3000.
  8. In browser-ul tau te vei conecta pe acel link si de acolo poti incepe sa configurezi blocklist-urile, Upstream DNS Servers (recomand cloudflare si Google cu DNSSEC activat pentru rapiditate si securitate).
  9. Ca totul sa functioneze va trebui sa te conectezi pe routerul tau si sa ii schimb serverele de DNS. Primary server va fi IP-ul setat de tine pentru containerul AdGuard, secondary server 1.1.1.1 (Cloudflare)/8.8.8.8 (Google) – in caz de se intampla ceva cu nodul/containerul tau sa ai in continuare acces la internet.
  10. Pentru configurarea initiala (DNS Settings), recomand fie sa urmaresti un tutorial step by step, fie sa iei fiecare sectiune in parte si sa o cauti pe internet ca sa configurezi dupa preferintele si nevoile tale si sa intelegi principiile din spate.

Dupa ce ai configurat totul ar trebui sa incep sa vezi in Dashboard query-ul DNS generate in reteaua ta.

La sectiunea “Filters” vei avea by default lista AdGuard care blocheaza reclamele, analizele de date Google/Netflix s.a.m.d. Recomand sa o lasi bifata. Pe langa acea lista poti adauga tu ceea ce vrei sa blochezi in reteaua ta la “Custom filtering rules”.

[mai mult...]

Cum rezolvi eroarea “Too many open files” in Linux

Eroarea “Too many open files” în Linux apare atunci când un proces depășește limita maximă a numărului de fișiere deschise în același timp, așa cum este definită de sistem. Aceasta este o problemă comună în aplicațiile care manipulează un număr mare de fișiere simultan, cum ar fi serverele web, bazele de date sau alte aplicații intensive în I/O.
Iată câțiva pași pentru a rezolva această problemă:

1. Verificarea limitei curente a fișierelor deschise

Pentru a verifica limita curentă a fișierelor deschise pentru utilizatorul curent, poți folosi comanda:

ulimit -n

Această comandă va returna numărul maxim de fișiere pe care utilizatorul le poate deschide simultan.

2. Creșterea limitei pentru utilizatorul curent

Dacă dorești să crești limita pentru ședința curentă, poți utiliza:

ulimit -n [noua_limită]

De exemplu, pentru a crește limita la 4096 fișiere:

ulimit -n 4096

3. Modificarea configurației pentru limite persistente

Dacă dorești ca modificările să fie persistente și să se aplice la fiecare sesiune de utilizator, trebuie să modifici fișierele de configurare:

a. Editarea fișierului /etc/security/limits.conf

Adaugă următoarele linii în fișierul `/etc/security/limits.conf`:

*               soft    nofile          4096
*               hard    nofile          4096

Aceste linii vor aplica limitele pentru toți utilizatorii (`*`). Poți specifica un utilizator anume în loc de `*`.

b. Editarea fișierului /etc/pam.d/common-session (Ubuntu/Debian)

Adaugă următoarea linie:

session required pam_limits.so

Aceasta asigură că limitele din `limits.conf` sunt aplicate în timpul sesiunii utilizatorului.

4. Modificarea fișierului /etc/sysctl.conf

Pentru a modifica limita la nivel de sistem, deschide fișierul `/etc/sysctl.conf` și adaugă sau modifică următoarea linie:

fs.file-max = 100000

Aceasta setează numărul maxim total de fișiere pe care kernelul le poate gestiona. După modificare, aplică setările cu:

sudo sysctl -p

5. Verificarea aplicației

Asigură-te că aplicația ta sau scriptul pe care îl folosești nu deschide fișiere fără a le închide corespunzător. Verifică și optimizează codul pentru a te asigura că resursele sunt gestionate eficient.

6. Verificarea deschiderii fișierelor

Pentru a verifica ce fișiere sunt deschise de un proces specific sau de sistem, folosește comanda:

lsof | wc -l

Aceasta va returna numărul total de fișiere deschise, iar pentru un anumit proces poți folosi:

lsof -p [PID]

7. Monitorizarea constantă

Utilizează instrumente precum `htop`, `glances` sau altele pentru a monitoriza utilizarea fișierelor deschise și a resurselor sistemului în timp real.

[mai mult...]

Eroarea „driverul Microsoft ODBC 17 pentru SQL Server: furnizor TCP: cod de eroare 0x2746”

Eroarea „driverul Microsoft ODBC 17 pentru SQL Server: furnizor TCP: cod de eroare 0x2746” apare de obicei când există probleme de conectivitate între clientul SQL Server și serverul SQL. Acest cod de eroare specific sugerează în general că există o problemă cu conexiunea de rețea sau o configurare greșită a serverului SQL.
Iată câțiva pași detaliați pentru a rezolva această problemă:

1. Verifică detaliile de conectare

  • Serverul SQL: Asigură-te că adresa serverului pe care încerci să te conectezi este corectă                                  (ex. localhost, 192.168.1.100, sau numele_serverului).
  • Portul: Verifică dacă serverul SQL folosește portul implicit 1433. Dacă ai configurat un alt port, asigură-te că îl specifici în conexiune (ex. 192.168.1.100,port)
  • Autentificare: Asigură-te că tipul de autentificare (Windows Authentication sau SQL Server Authentication) este corect configurat și că folosești credențiale valide.

2. Verifică setările de rețea

  • Ping: Fă un ping către server pentru a verifica dacă acesta este accesibil. Deschide linia de comandă și folosește comanda ping [adresa_serverului].
  • Verifică firewall-ul: Asigură-te că firewall-ul de pe serverul SQL sau de pe client nu blochează portul 1433 sau alt port utilizat de SQL Server. Poți temporar dezactiva firewall-ul pentru a verifica dacă acesta este cauza problemei (asigură-te că reiei configurațiile de securitate ulterior).
  • DNS: Verifică dacă există probleme cu rezolvarea DNS, mai ales dacă folosești un nume de gazdă. Încearcă să utilizezi adresa IP direct.

3. Verifică configurația SQL Server

  • Serviciul SQL Server: Asigură-te că serviciul SQL Server este pornit. Poți verifica acest lucru în SQL Server Configuration Manager.
  • Protocolele de rețea: Accesează SQL Server Configuration Manager, navighează la SQL Server Network Configuration, și asigură-te că TCP/IP este activat. Dacă face modificări, este necesar să repornești serviciul SQL Server.
  • Setările TCP/IP: Verifică dacă TCP/IP este configurat corect, inclusiv porturile și adresele IP.

4. Verifică driverul ODBC

  • Actualizare: Asigură-te că ai instalată cea mai recentă versiune a driverului Microsoft ODBC pentru SQL Server. Poți descărca driverul de la Microsoft Download Center.
  • Configurare ODBC: Poți utiliza instrumentul ODBC Data Source Administrator (se găsește în Panoul de Control) pentru a verifica dacă sursele de date ODBC sunt configurate corect.

5. Alte aspecte

  • Configurarea serverului din cloud: Dacă serverul SQL este în cloud (ex. Azure), verifică setările de firewall și asigură-te că IP-ul clientului este permis.
  • Erori suplimentare: Verifică jurnalele de eroare ale SQL Server pentru a obține mai multe informații despre ce ar putea cauza problema.

Exemplu de conexiune cu sqlcmd

Dacă totul este configurat corect, ar trebui să te poți conecta folosind comanda:

sqlcmd -S [numele_serverului sau IP] -U [username] -P [password]

Dacă problema persistă, detaliile suplimentare din jurnalele de eroare ale SQL Server sau din mesajele de eroare pot oferi indicii mai clare despre natura problemei.

[mai mult...]

Secure your Homelab without Port Forwarding

If you’ve ever tried to access your homelab, NAS, or Proxmox server remotely, you’ve probably gone down the classic road: open a port on your router, pray to the NAT gods, and hope your ISP hasn’t slapped a CG-NAT on you.

Then there’s the security headache: exposed ports = exposed services = exposed vulnerabilities. And don’t get me started on managing dynamic IPs, firewalls, and all that jazz. But what if you could securely access your stuff from anywhere — no port forwarding, no VPN setup, no headaches?

[mai mult...]