FreeBSD – server PPPoE – MPD5 + freeRADIUS

PPPoE este un protocol de rețea folosit pentru încapsularea cadrele PPP în interiorul cadrelor Ethernet. Chiar dacă în general este folosit împreună cu echipamente tip DSL, în ultimul timp se regăsește tot mai mult în cadrul rețelelor ISP-iștilor din România, chiar și a celor care nu nimic de a face cu DSL-urile.

De ce se merge pe soluția asta? Păi, protocolul PPPoE oferă: autentificare, criptare și compresie. Gata cu problemele cauzate de servere DHCP „rogue” din rețea, routere conectate invers, furturi de MAC. Clientul final primește un nume de utilizator și o parolă și se autentifică în rețea, ca și cum ar folosi o conexiune de tip dial-up.

Știți ce avantaje mai obțin furnizorii prin folosirea acestui protocol? Se colectează mult mai ușor informații despre momentul conectării/deconectării, cantitatea de trafic realizată. Apoi, este mult mai ușor de modificat alocarea resurselor în cadrul rețelei (adrese IP, servere concentratoare etc).

Să trecem la partea practică și anume: cum realizăm un server (concentrator) PPPoE folosind o mașină pe care rulează freeBSD. Din fericire avem pachetul MPD.

Ce este MPD?

MPD este o implementare bazată pe netgraph a protocolului PPP pentru freeBSD.  Partea de configurare și negociere are lor in „userland”, dar partea de rutare a pachetelor de date este executată doar în kernel.  Dezvoltatorii susțin că este foarte rapid (viteze de ordinul Gbps), scalabil (mii de conexiuni simultane fără scăderi de performanță și distribuția încărcării pe mai multe procesoare). În același timp nu consumă multe resurse.

MPD oferă suport unificat pentru majoritatea tipurilor de legaturi PPP:

modem – pentru conexiuni  folosind diferite interfețe seriale asincrone – modem-uri, terminale ISDN, null-modem;
pptp – pentru conexiuni prin Internet folosind Point-to-Point Tunnelling Protocol (PPTP), protocol suportat de majoritatea sistemelor de operare si producători de echipamente;
l2tp – pentru conexiuni prin Internet folosind  Layer Two Tunnelling Protocol (L2TP). Acesta este un succesor al PPTP.
pppoe – pentru conexiuni peste Ethernet folosind PPP-over-Ethernet (PPPoE);
tcp – pentru tunelarea sesiunilor PPP folosind conexiuni TCP. Cadrele sunt codate în același fel ca și în cazul conexiunilor seriale.
udp – pentru tunelarea sesiunilor PPP folosind conexiuni UDP. Fiecare cadru este încapsulat într-un pachet UDP.
ng – pentru conectarea diferitelor dispozitive suportate de netgraph.

MPD poate fi configurat să funcționeze în rolul de client, server sau doar să transmită mai departe către alte gazde conexiunile, fără să le modifice. Se pot astfel crea rețele distribuite, de complexitate ridicată.

Printre protocoalele și extensiile suportate de MPD se numără: Multi-link PPP
PAP, CHAP, MS-CHAP, EAP , compresia traficului (MPPC, Deflate, Predictor-1, …), criptarea traficului (MPPE, DESE, DESE-bis), negocierea parametrilor prin IPCP and IPV6CP.

Presupunem scenariul următor:

FREEBSD-PPPOE-MPD-RADIUS

Avem un server conectat la internet cu interfața de rețea rl0 și conectat în rețeaua locală cu interfața bge0. Exista o conexiune Ethernet 1Gbps până într-un switch în care sunt conectate trei calculatoare de pe care se vor iniția sesiuni PPPoE, folosind numele de utilizatori și parolele prezentate în imagine.

Pentru a instala pachetul MPD în freeBSD procedăm în modul următor:

cd /usr/ports/net/mpd5
make
make install
make clean

Fișierul de configurare se regăsește în /usr/local/etc/mpd5/mpd.conf. În acesta vom scrie următoarele directive:

freebsd-mpd.conf

După cum se observă, este activată consola care poate fi accesată prin telenet localhost 5005  și serverul web integrat care ascultă pe portul 5006. Datele de autentificare la acestea, sunt: utilizator admin și parola pAroLA320.  Am activat deasemenea serverul radius incorporat folosit doar pentru trimiterea comenzilor de deconectare a clienților. Acesta ascultă pe portul 3799 și poate fi accesat doar de la adresa IP 127.0.0.1 cu parola radp554.

Dacă folosiți fișierul de configurare așa cum l-am prezentat mai sus, atunci autentificarea și contorizarea clienților se va efectua folosind serverul RADIUS disponibil la adresa IP 127.0.0.1 pe portul 1812, respectiv 1813, adresele IPv4 ale clienților vor fi oferite pe baza informațiilor primite de la serverul RADIUS, iar ca și servere DNS clienții vor primi următoarele date: 8.8.8.8 și 8.8.4.4. Interfața pe care se ascultă este bge0 (interfața locală).

Ca și server RADIUS eu folosesc freeradius, configurat așa încât să folosească baze de date MySQL. Configurarea acestuia – în alt articol.

Ca și indicii de performanța, folosind configurarea de mai sus, dar extinsă pentru circa 40 de VLAN-uri, pe un server DELL PowerEdge 2650 cu următoarea configurație:

CPU: Intel(R) Xeon(TM) CPU 3.06GHz
reeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 2 package(s) x 1 core(s) x 2 HTT threads
real memory  = 3221225472 (3072 MB)

la un număr de 444 de conexiuni simultane, cu utilizatori reali, nu de test, utilizarea procesorului era:

CPU:  0.8% user,  0.0% nice,  9.3% system,  8.8% interrupt, 81.0% idle
Mem: 38M Active, 344M Inact, 225M Wired, 112M Buf, 2389M Free
Swap: 4096M Total, 4096M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
   11 root          4 155 ki31     0K    32K CPU3    3 159.2H 328.96% idle
   12 root         20 -72    –     0K   160K WAIT    0 642:47 43.65% intr
    0 root         11 -92    0     0K    88K –       2 645:52 39.70% kernel
 5822 root          1  22    0 19640K 10924K select  3  51:26  1.95% snmpd
 5688 root          2  52    0 60684K 24216K select  0  39:55  0.39% mpd5

Ca și trafic realizat de clienți, este vorba de 150Mbps download și circa 200Mbps upload.

 

 

 

Articole asemanatoare:

Bogdan Turcanu

Bogdan Turcanu

One thought on “FreeBSD – server PPPoE – MPD5 + freeRADIUS

  1. Salut Bogdan,
    Foarte interesant articolul, multumesc pentru informatii !
    Pana acum am folosit pppd ca si daemon de conexiuni peer to peer impreuna cu freeradius pe Slackware. M-a prins, ca sa zic asa, FreeBSD si cand am incercat sa configurez asa cum erau pe Slackware am descoperit ca nu are pppd si de accea mpd5 este inca nou pentru mine. Imi poti da te rog in afara de site-ul oficial de documentie al lor cateva link-uri utile unde pot afla informatii despre mpd ?
    Multumesc !

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.