Configurare program

Microsoft Teams nu functioneaza cu VPN

Una dintre cele mai frecvente situatii intalnite in mediile de lucru cu acces VPN este disfunctionalitatea aplicatiei Microsoft Teams. Simptomele pot varia: imposibilitatea de a trimite mesaje, apeluri audio/video care nu se initializeaza, erori de retea persistente sau deconectari repetate – si asta in ciuda faptului ca internetul functioneaza aparent normal. Cauzele sunt de cele mai multe ori legate de modul in care VPN-ul gestioneaza traficul de retea, protocoalele folosite sau configuratia DNS.

1. Dezactiveaza conflictele de rutare a locatiei VPN

Cand te conectezi la un server VPN dintr-o tara diferita de cea in care te afli fizic, sistemul de securitate Microsoft poate interpreta acest lucru ca o activitate neobisnuita si poate bloca partial sau total accesul la serviciile Microsoft 365, inclusiv Teams.

Cum identifici problema:

  • Deconecteaza-te de la VPN si testeaza Teams timp de 2-3 minute.
  • Daca Teams functioneaza perfect fara VPN, inseamna ca problema este cauzata de locatia serverului VPN ales.

Cum rezolvi:

  • Deschide clientul VPN si acceseaza meniul de selectie a serverelor.
  • In loc de optiunile automate (“Fastest Server”, “Auto”), alege manual un server cat mai apropiat geografic de locatia ta actuala.
  • Daca esti intr-un mediu corporativ, intreaba echipa IT daca exista un gateway regional specific pe care trebuie sa-l folosesti.

2. Schimba protocolul VPN pentru a suporta UDP

Microsoft Teams transmite traficul audio si video prin protocolul UDP (User Datagram Protocol), deoarece prioritizeaza viteza si latenta redusa. Unele configuratii VPN forteaza rutarea intregului trafic prin TCP (Transmission Control Protocol), care include mecanisme suplimentare de verificare a erorilor – ceea ce introduce intarzieri semnificative, mai ales in cadrul apelurilor video.

Pasi de urmat:

  1. Deschide aplicatia clientului VPN.
  2. Navigheza la Setari (Settings) > Protocol sau Tip conexiune (Connection Type).
  3. Schimba protocolul catre IKEv2, IPsec sau WireGuard – toate acestea suporta nativ UDP.
  4. Reconecteaza-te la VPN si initiaza un apel de test in Teams.

Nota: WireGuard este in general cel mai eficient protocol in ceea ce priveste latenta si consumul de resurse, recomandat in special pentru apeluri video de calitate.

3. Goleste cache-ul DNS si configureaza un resolver public

VPN-urile atribuie de obicei propriul server DNS intern. Acesta poate contine inregistrari expirate sau poate esua la rezolvarea corecta a domeniilor Microsoft (de ex. teams.microsoft.com, login.microsoftonline.com). Rezultatul este ca aplicatia nu poate stabili conexiunea cu serverele Microsoft, chiar daca internetul functioneaza.

Pasi de urmat:

  1. Deschide Command Prompt ca Administrator (click dreapta > Run as administrator).
  2. Executa urmatoarele comenzi una cate una:

ipconfig /flushdns

netsh winsock reset

netsh int ip reset

  1. Mergi la Panou de control > Centrul retelelor si partajarii > Modificare setari adaptor.
  2. Click dreapta pe conexiunea VPN > Proprietati > Protocol Internet versiunea 4 (TCP/IPv4) > Proprietati.
  3. Selecteaza “Utilizati urmatoarele adrese de server DNS” si introdu:
  • Google DNS: 8.8.8.8 (preferat) si 8.8.4.4 (alternativ)
  • SAU Cloudflare DNS: 1.1.1.1 (preferat) si 1.0.0.1 (alternativ)
  1. Reporneste calculatorul, reconecteaza VPN-ul si testeaza Teams.

4. Ajusteaza stiva de retea si dimensiunea MTU

Fiecare conexiune VPN adauga un antet suplimentar fiecarui pachet de date transmis (encapsulare). Daca dimensiunea pachetelor depaseste limita maxima de transfer (MTU – Maximum Transmission Unit) a tunelului VPN, acestea sunt fragmentate sau eliminate complet. Acest lucru determina Teams sa expire la conexiune (timeout) sau sa afiseze erori de retea intermitente.

Pasi de urmat:

  1. Deschide Command Prompt ca Administrator.
  2. Reseteaza stiva de retea:

netsh winsock reset

netsh int ip reset

  1. Identifica numele adaptorului VPN cu comanda:

netsh interface ipv4 show subinterfaces

  1. Seteaza o valoare MTU mai mica (inlocuieste “Numele_VPN” cu numele real al adaptorului):

netsh interface ipv4 set subinterface “Numele_VPN” mtu=1400 store=persistent

Daca valoarea 1400 nu rezolva problema, incearca 1350. Reporneste calculatorul dupa fiecare modificare si testeaza Teams.

5. Activeaza Split Tunneling

In configuratia implicita, un VPN roteaza TOT traficul de internet prin reteaua corporativa. Aceasta arhitectura creeaza un blocaj semnificativ pentru aplicatiile in timp real, precum Teams, deoarece pachetele audio si video trebuie sa parcurga drumul dus-intors prin serverele companiei inainte de a ajunge la destinatie – crescand latenta si probabilitatea de pierdere a pachetelor.

Split tunneling este o functie care permite VPN-ului sa “excepteze” anumite tipuri de trafic din tunel. Concret, traficul Microsoft 365 (inclusiv Teams) va circula direct catre internet, in timp ce datele interne ale companiei raman protejate prin VPN.

Avantaje:

  • Latenta redusa – pachetele nu mai fac “turul” prin serverele corporative.
  • Calitate audio/video imbunatatita in apeluri.
  • Livrare instantanee a mesajelor.
  • Traficul intern al companiei ramane securizat si izolat.

Important: Aceasta setare trebuie activata de catre echipa IT sau administratorul de retea. Nu poate fi configurata individual de catre utilizatorul final. Contacteaza departamentul IT si solicita activarea split tunneling pentru traficul Microsoft 365.

  • Solutiile 1, 2, 3 si 4 pot fi aplicate direct de catre utilizator.
  • Solutia 5 (Split Tunneling) necesita interventia echipei IT.

*Daca niciuna dintre solutii nu rezolva problema, escaladeaza catre echipa IT cu detalii despre simptomele intampinate, tipul clientului VPN folosit si mesajele de eroare afisate.

[mai mult...]

Cum se instalează Sysdig pentru a monitoriza încărcarea sistemului pe Ubuntu 24.04

Pentru sistemele de operare bazate pe Debian, cum ar fi Ubuntu și Debian, instalați Sysdig cu următoarea comandă:

apt install gnupg software-properties-common curl -y 
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash

Pentru sistemele de operare bazate pe RPM, cum ar fi AlmaLinux, Rocky Linux, CentOS, RHEL și Fedora, instalați Sysdig cu următoarea comandă:

rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public 
curl -s -o /etc/yum.repos.d/draios.repo https://s3.amazonaws.com/download.draios.com/stable/rpm/draios.repo 
dnf install sysdig -y

După instalarea Sysdig, verificați versiunea instalată de Sysdig folosind următoarea comandă:

sysdig --version

Veți obține următorul rezultat:

versiunea sysdig 1.61.10

Lucrul cu Sysdig

Puteți rula comanda csysdig pentru a afișa procesele care rulează, utilizarea CPU și utilizarea memoriei:

csysdig

Ar trebui să vedeți următorul ecran:

Acum apăsați F2 pentru a deschide celălalt meniu, așa cum se arată mai jos:

De aici, puteți apăsa tasta săgeată pentru a alege orice elemente doriți să monitorizați în panoul din stânga și apăsa Enter. De exemplu, selectați conexiunile și apăsați Enter. Ar trebui să vedeți toate conexiunile primite pe ecranul următor:

Pentru a vizualiza informații despre Procese și CPU, selectați Procese CPU și apăsați Enter. Ar trebui să vedeți următoarea pagină:

Dacă doriți să monitorizați toate conexiunile de rețea direct din interfața liniei de comandă, executați următoarea comandă:

sysdig -c netstat

Ar trebui să vedeți următorul ecran:

Puteți vedea jurnalul cererilor HTTP folosind următoarea comandă:

sysdig -c httplog

Ar trebui să vedeți toate cererile HTTP primite în următoarea ieșire:

2024-08-23 11:21:17.228051410 < metodă=GET url=69.87.220.62/ cod_răspuns=200 latență=1ms dimensiune=3138B
2024-08-23 11:21:23.139933688 < metodă=GET url=69.87.220.62/ cod_răspuns=200 latență=1ms dimensiune=3138B

Pentru a monitoriza procesul în funcție de utilizarea CPU-ului, executați următoarea comandă:

sysdig -c topprocs_cpu

Ar trebui să vedeți următorul ecran:

Rulați următoarea comandă pentru a vedea toate opțiunile disponibile cu comanda sysdig:

sysdig -cl

Ar trebui să vedeți următorul ecran:

Puteți folosi sysdig cu spy_users pentru a afișa activitatea interactivă a utilizatorilor.

sysdig -c utilizatori_spion

Ar trebui să vedeți următoarea ieșire:

13133 11:38:03 root) free -m
13133 11:38:22 root) df -h

 [mai mult...]		

Stop using pie charts in Excel: build this dynamic bar chart instead

You’ve finalized your Excel spreadsheet and want to visualize your numbers. A pie chart is a tempting option: it takes 20 seconds to create and makes you look sophisticated. However, it often causes more confusion than it solves. To truly impress your coworkers and make your data pop, ditch the circle and build a bar chart that updates itself.

Once you move past three or four slices, pie charts become unreadable, often requiring messy legends and manual labels that clutter the screen. More importantly, even if you sort the underlying data feeding a pie chart, the circular format makes the hierarchy difficult to follow—leaving your visuals in a jumbled mess. By taking the hallmarks of a pie chart and applying them to a dynamic bar chart, you solve all these problems—no legends, no clunky labels, and no confusing order.

A side-by-side comparison of a pie chart marked with a red 'No' symbol and a clean, sorted bar chart marked with a green checkmark.

[mai mult...]

Cum activezi Memory Ballooning pentru mașini virtuale în Proxmox VE

Într-un mediu virtualizat Proxmox VE, este posibil ca mai multe mașini virtuale să rezerve memorie RAM pe care nu o folosesc în mod constant.

Acest lucru poate duce la:

  • utilizare ineficientă a memoriei serverului

  • imposibilitatea pornirii unor VM-uri noi

  • performanță scăzută când resursele sunt limitate

Proxmox oferă o funcționalitate numită Memory Ballooning, care permite redistribuirea dinamică a memoriei între mașinile virtuale în funcție de necesități.

[mai mult...]

Cum remediezi eroarea Dropbox 413

Ce înseamnă eroarea 413

  • Cod de status HTTP 413: Request Entity Too Large. Serverul Dropbox refuză să accepte cererea deoarece corpul cererii (payload-ul) depășește limita maximă permisă de server sau de endpoint-ul respectiv.
  • Contexturi comune în Dropbox:
    • Uploaduri mari (fișiere mari) către API sau web.
    • Uploaduri multiple într-un singur request (batch operations) ce depășesc dimensiunea permisă.
    • Transmiterea de date metadata sau fișiere în format necompresat sau cu dimensiuni excesive.
    • Configurații sau limite aplicate de gateway/proxy între client și Dropbox

Cauze posibile

  • Limita de dimensiune a payload-ului: API endpoints au limite determinate (de ex. un fișier individual sau o operațiune de upload are o limită).
  • Configurații de proxy/reverse proxy: Nginx/Apache sau gateway-uri cu limitări stricte pentru size (client_max_body_size, limit_request_body).
  • Comprimare inadecvată: cereri mari necompresate sau cu header de codare nepotrivit.
  • Batch/API calls cu payload excesiv: trimiterea a zeci sau sute de obiecte într-un singur request.
  • Token/limite de cont: în unele cazuri, dacă contul are restricții, serverul poate aplica pruning/limitare.
  • Probleme de configurare a aplicației client: construirea payload-ului cu volume de date nepotrivit gestionate.

Impacturi

  • Eroare oop. Cererea nu este procesată, utilizatorul vede un eșec la operațiunea dorită.
  • Poate genera repetări multiple de cereri dacă retry-ul nu este gestionat corect.
  • Poate afecta user experience, sincronizarea aplicațiilor, sau fluxuri automate de upload.

Diagnosticul înainte de soluționare

  • Reprodusibilitatea erorii:
    • Încercă să reproduci cu un fișier de dimensiune cunoscută (de la 1 MB la 2 GB, în funcție de limitele așteptate).
  • Verifică endpoint-ul și limita documentată:
    • Consultă documentația API Dropbox pentru limitele de dimensiune per fișier/operare și pentru payload-uri batch.
  • Verifică factorii intermediari:
    • Proxy/gateway, firewall, sau load balancer care ar putea impune limitări pe corpul cererii.
  • Inspectează cererea efectivă:
    • Verifică dimensiunea corpului (Content-Length) sau dimensiunea totală a payload-ului în cererea POST/PUT.
  • Verifică logurile:
    • Dacă ai acces la logs de aplicație sau la logs de gateway, caută codul 413 sau mesaje „Request Entity Too Large”.
  • Verifică trafic de rețea:
    • Folosește instrumente precum curl -v, Postman, sau instrumente de rețea pentru a inspecta cererea trimisă și răspunsul.

Soluții pas cu pas A. Dacă lucrezi cu API Dropbox 

  • Împărțirea payload-ului:
    • Dacă seria de fișiere sau date provocă un payload mare în sesiunea de upload, implementează chunked upload (upload_session/start, upload_session/append, upload_session/finish) pentru fișiere mari.
    • Pentru foldere sau lista de obiecte, împarte cererile în batchuri mai mici.
  • Împărțire logică a fișierelor:
    • Împarte fișierele mari în segmente mai mici (de ex. 8-100 MB, în funcție de limită) și apoi reînregistrează pe server.
  • Verifică limita per cerere:
    • Dacă endpoint-ul acceptă un anumit payload, asigură-te că nu depășește acel prag.
  • Optimizare payload:
    • Folosește compresie acolo unde este permis (de ex. content-encoding: gzip) pentru a reduce dimensiunea corpului.
  • Configurare client HTTP:
    • Asigură-te că nu trimiți headeri excesivi care cresc payload-ul total.
  • Retry cu backoff diskret:
    • Dacă server răspunde cu 413, nu repeta imediat cererea. Reduce mărimea payload-ului și reîncearcă cu backoff liniar sau Exponential Backoff, respectând o limită maximă a încercărilor.
  • Verifică încărcarea/limitările serverului:
    • Dacă problema este persistentă, contactează echipa de suport Dropbox cu exemple de request, payload size, endpoint și timestamp.

B. Dacă eroarea apare în aplicația web/desktop (client-side)

  • codificare și dimensiune fișiere:
    • Asigură-te că nu încarci fișiere mari într-un singur request, pentru UI responsive și pentru a evita timeouts.
  • chunking/streaming:
    • Implementarea upload-ului chunked (streaming) pentru fișiere mari, cu recuperare din punctul de întrerupere.
  • limitări de browser/gateway:
    • Browserele sau gateway-urile pot impune limitări; ajustează cerințele în funcție de mediu.

C. Configurări la nivel de infrastructură (proxy/reverse proxy)

  • Nginx:
    • Configurare corectă a client_max_body_size; de exemplu: client_max_body_size 100M;
  • Apache:
    • LimitRequestBody setat la un prag potrivit: LimitRequestBody 100000000
  • Firewall/proxy:
    • Verifică reguli de rate limiting sau size limit pentru cereri POST/PUT.
  • Testare:
    • După modificări, testează cu un fișier de dimensiune apropiată de limită și cu payloaduri multiple.

D. Practici de design pentru a minimiza 413

  • Deblocare prin chunking:
    • Implementare chunked upload pentru fișiere mari, cu ID sesiune persistent și verificare de integritate la final.
  • Limitări apropiate de utilizator:
    • Oferă utilizatorilor indicații clare despre limitele de dimensiune per fișier sau per request.
  • Feedback utilizator:
    • Arată mesaje prietenoase atunci când extrapolarea dimensiunilor este detectată, cu opțiuni de a reduce mărimea fișierului.
  1. Exemple practice: coduri și concepte (retry & chunked upload) A. Exemplu: chunked upload cu Dropbox API (pseudo-coded)
  • Pașii generali:
    • Start upload_session: inițializarea sesiunii și obținerea session_id.
    • Append data: trimiterea blocurilor de date (chunk-uri) cu offset-ul curent.
    • Finish upload_session/finish: finalizarea înregistrării fișierului cu metadata.
  • Beneficii:
    • Evită 413 prin trimiterea fișierului în părți, control asupra dimensiunii per cerere.

B. Exemplar în Python (utilizând Dropbox SDK or HTTP requests)

  • Notă: adaptează la versiunea SDK pe care o folosești.
  • În continuare, un schelet general pentru chunked upload (nu este un patch final; adaptează la API actual).
python

# Python pseudo-schematic pentru upload chunked (Dropbox API)
import requests
import os

FILE_PATH = "path/to/large_file.dat"
CHUNK_SIZE = 8 * 1024 * 1024  # 8 MB

def upload_large_file(access_token, path_in_dropbox):
    with open(FILE_PATH, "rb") as f:
        data = f.read(CHUNK_SIZE)
        session_start_resp = requests.post(
            "https://content.dropboxapi.com/2/files/upload_session/start",
            headers={
                "Authorization": f"Bearer {access_token}",
                "Dropbox-API-Arg": '{"close": false}',
                "Content-Type": "application/octet-stream"
            },
            data=data
        )
        session_id = session_start_resp.json()["session_id"]

        offset = len(data)
        while True:
            data_chunk = f.read(CHUNK_SIZE)
            if not data_chunk:
                break
            if f.tell() < os.path.getsize(FILE_PATH):
                # Append
                resp = requests.post(
                    "https://content.dropboxapi.com/2/files/upload_session/append_v2",
                    headers={
                        "Authorization": f"Bearer {access_token}",
                        "Dropbox-API-Arg": '{"cursor": {"session_id": "%s", "offset": %d}, "Close": false}' % (session_id, offset),
                        "Content-Type": "application/octet-stream"
                    },
                    data=data_chunk
                )
                offset += len(data_chunk)
            else:
                # Finish
                final_resp = requests.post(
                    "https://content.dropboxapi.com/2/files/upload_session/finish",
                    headers={
                        "Authorization": f"Bearer {access_token}",
                        "Dropbox-API-Arg": '{"cursor": {"session_id": "%s", "offset": %d}, "commit": { "path": "%s", "mode": "add", "autorename": true, "mute": false }}' % (session_id, offset, path_in_dropbox),
                        "Content-Type": "application/octet-stream"
                    },
                    data=data_chunk  # last chunk
                )
                return final_resp.json()

Observație: exemplele de mai sus sunt orientative. Verifică documentația actuală Dropbox API pentru endpoint-urile exacte, header-ele necesare și schema JSON.

C. Exemplu: backoff exponțial pentru retry (pseudo)

  • Scop: în caz de 413 sau alte erori 5xx temporare, să nu reîncerci imediat, să folosești backoff.
  • Pseudo-JavaScript:
javascript

async function retryWithBackoff(operation, maxRetries = 5) {
  let attempt = 0;
  let delay = 1000; // 1s
  while (attempt < maxRetries) {
    try {
      return await operation();
    } catch (err) {
      if (!isTransientError(err) || attempt === maxRetries - 1) throw err;
      await wait(delay);
      delay = Math.min(delay * 2, 30000); // backoff exponexial cap
      attempt++;
    }
  }
}

D. Verificări automate de dimensiune

  • O idee bună: înainte de a trimite, validează mărimea payload-ului și dacă depășește o limită, să o împachetezi în chunkuri sau să returnezi o avertizare clară către utilizator.

Plan de testare

  • Testare functionala:
    • Încarcă fișiere cu dimensiuni sub, la limită, și peste limita așteptată.
    • Testează cu batchuri de obiecte (dacă API permite) pentru a verifica comportamentul 413.
  • Testare de performanță:
    • Simulează trafic în viteză pentru a vedea cum se comportă gateway-urile și ce răspunsuri.
  • Testare de regresie:
    • Verifică dacă modificările la chunking sau la limitarea dimensiunii nu creează alte erori.
  • Testare în medii izolate:
    • Folosește staging/ sandbox pentru a evita impactul în producție.
[mai mult...]