construirea propriul Router cu un Raspberry Pi

atunci când încearcă să dau seama de ce Internetul este lent, poate fi greu pentru a afla exact ce dispozitiv din rețea mănâncă toată lățimea de bandă. Multe soluții la această problemă necesită instalarea software-ului pe fiecare dispozitiv pentru a fi monitorizat. În schimb, am încercat să construiesc un monitor de rețea Raspberry Pi personalizat.

construirea propriului Router

un Raspberry Pi 4 este un router destul de capabil în circumstanțele potrivite.

dar mai întâi, să fim clari în termeni.

un comutator amestecă datele în rețea. Un router ajută la direcționarea traficului.

construirea unui „router”, în acest context, înseamnă că vom implementa DHCP, DNS și un Firewall.

dacă nu știți ce înseamnă asta, nu vă faceți griji. Deocamdată, să presupunem că aveți un Raspberry Pi 4 (a se vedea lista de piese din partea de jos). Bitul „versiunea 4″este important deoarece are o placă de rețea semnificativ mai bună (eth0) decât modelele anterioare (Gigabit). Aceasta indică cea mai mare limitare a utilizării RPi ca router: lățimea de bandă este limitată la 1000 Mbps.

lățimea de bandă și debitul sunt adesea confundate.

„lățimea” benzii este cantitatea maximă de date care poate curge prin sistem (în acest caz, de la domiciliu la internet). Throughput măsoară câtă lățime de bandă este utilizată în orice moment.

De altfel, acest ghid ar trebui să funcționeze pentru orice sistem linux bazat pe Debian pe care doriți să îl transformați într-un router. Puteți utiliza hardware mai bun pentru a crea o soluție și mai eficientă. Am ales un Pi4 deoarece viteza noastră de internet este oricum doar 30Mbps (DSL). Așa cum am descris în postul de monitorizare a rețelei, acest Raspberry Pi 4 este dovedit a fi mult mai mult decât suficient pentru acest caz. Următoarele sunt produsele exacte pe care le-am folosit.

Dacă sunteți nou la Raspberry Pi, canakiturile populare sunt un loc minunat pentru a începe. Prefer să cumpăr separat Raspberry Pi 4, adaptor de alimentare, carduri micro SD și radiatoare. Nu numai că este mai ieftin, dar reduce deșeurile electronice.

următoarele sunt link-uri afiliate la alte părți am folosit în acest proiect. Nu mă conectez niciodată la un produs pe care nu l-am folosit personal.

aveți o conexiune DSL / PPP?

citiți despre ciudățenii specifice utilizării unui Raspberry Pi ca router DSL.

este necesar un al doilea port ethernet (vezi secțiunea următoare). Am folosit conectorul USB 3.0 Gigabit, de mai sus.

conectarea la Internet

mă voi referi la interfețele de rețea cawan șilan.

Dacă doriți ca lucrurile să fie copy-and-paste, puteți redenumi interfețele de rețea pentru a se potrivi. De exemplu, lan este numele celei mai rapide dintre cele două interfețe (interfața de rețea la bord, eth0, în cazul meu). Pentru a crea numele static, tastați mai întâiifconfig obțineți adresa MAC pentru interfață (dupăether). Dacă ați găsit ether aa:bb:cc:dd:ee:ff, apoi creați sau editați /etc/udev/rules.d/10-network.rules pentru a include:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan"

… și apoi repetați procesul pentru wan interfață.

rețeaua internă (LAN) trebuie să se ocupe de mai mult transfer decât WAN.

acesta este motivul pentru care interfața mai rapidă este aleasă pentru LAN.

în acest moment, puteți conecta direct interfațawan la modemul furnizat de ISP-ul dvs. Poate doriți să puneți modemul în modul bridge transparent, dacă este posibil, deoarece Pi preia funcționalitatea de rutare (mai multe despre aceasta).

în timp ce sunteți aici, luați un moment pentru a vă asigura că WAN este configurat corect pentru a obține un contract de închiriere DHCP. Dacă utilizați o altă metodă decât DHCP standard (de exemplu, PPOE), va trebui să modificați acest pas în funcție de nevoile dvs. Dar, în majoritatea cazurilor, este suficient să creați un fișier la /etc/network/interfaces.d/wan cu următorul conținut:

auto wanallow-hotplug waniface wan inet dhcp

server DHCP

cu Pi online, este timpul să lăsați dispozitivele să se conecteze la Pi.

în acest exemplu, ruterul Raspberry Pi va avea o adresă IP192.168.0.1.

aveți grijă dacă schimbați acest IP!

acest exemplu utilizează subrețeaua 192.168.0.0 / 24. Dacă decideți să modificați acest lucru, asigurați-vă că alegeți din gama de subrețele private valide.

aceasta înseamnă mai întâi crearea sau editarea /etc/network/interfaces.d/lan:

allow-hotplug laniface lan inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1

acum interfața LAN va avea un IP static și se va trata ca router. Acum este momentul să îl faceți capabil să atribuie adrese IP altor dispozitive din rețea. Prin urmare, rularea unui server DHCP va face ca atât de multe computere să se poată conecta la Pi.

Mai întâi, dezactivați dhcpcd și instalați isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

apoi editați /etc/default/isc-dhcp-server, înlocuind INTERFACESv4:

INTERFACESv4="lan"

am spus serverului DHCP ce interfață conține LAN. Acum trebuie să cunoască parametrii pentru rețeaua de domiciliu. Pentru a continua cu exemplul, vom lăsa serverul să atribuie adrese IP în intervalul de la 192.168.0.100 la 192.168.0.199 (mai multe despre De ce într-un moment). Edit /etc/dhcp/dhcpd.conf pentru a schimba mai întâi numele de domeniu și serverele de nume de domeniu:

option domain-name "router.local";option domain-name-servers 8.8.8.8, 1.1.1.1;

.local sufixul este convenție pentru o rețea LAN, dar sunteți binevenit să înlocuiți router nume. Serverele de nume de domeniu vor fi schimbate în curând, dar sunt îndreptate spre google pentru moment.

adăugați și următoarele:

authoritative;subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.199; option routers 192.168.0.1; option subnet-mask 255.255.255.0;}

aceasta indică serverului DHCP că poate atribui adrese IP dispozitivelor care se conectează la acesta în intervalul dat. Motivul pentru intervalul relativ mic este că putem atribui adrese IP statice în afara intervalului respectiv. De exemplu, puteți lua aceeași adresă MAC pentru lan de mai sus și adăugați următoarea secțiune:

host router { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 192.168.0.1;}

adăugarea IP-ului static pentru router, de asemenea, înseamnă că serverul DHCP nu se poate confunda niciodată și nu poate atribui accidental o altă adresă IP. În general, codificarea adreselor IP în serverul DHCP centralizează, de asemenea, autoritatea (mai degrabă decât codificarea IP-urilor statice pe dispozitive specifice, ceea ce este mult mai fragil IME).

dacă reporniți Raspberry Pi acum și conectați un computer la portul lan, ar trebui să găsiți o adresă IP în intervalul corespunzător. Folosind Mac OSX, am deschis panoul Preferințe rețea, apoi fila Hardware pentru a găsi adresa MAC a adaptorului USB-C la Ethernet al laptopului meu. Apoi am atribuit o adresă IP statică (la fel ca mai sus) acelei adrese și am repornit serverul DHCP:

sudo systemctl restart isc-dhcp-server
conectați-vă la ruterul raspberry pi
adresa MAC a venit din fila Hardware. Apăsarea butonului” Renew DHCP Lease ” va solicita serverului DHCP o nouă adresă IP, reîmprospătând eficient conexiunea.

chiar dacă adresa fixă este în afara intervalului de mai sus, acest tip de atribuire IP statică va funcționa cu orice dispozitiv. Îmi place să dau IP-uri statice tuturor dispozitivelor mele cunoscute, de încredere, care se află în afara gamei publice. Aceasta face următoarele:

  • ajută la identificarea dispozitivelor cunoscute.
  • permite aplicarea regulilor de securitate pentru ip-urile cunoscute.
  • permite serverelor (adică citirea temperaturii printr-un senzor Arduino ieftin).

dacă dintr-un anumit motiv un computer nu se poate conecta vreodată la rețeaua de domiciliu, rularea propriului server DHCP facilitează depanarea. Rularea journalctl -xe | grep dhcpd arată orice încercări ale dispozitivelor de conectare la rețeaua de domiciliu:

May 03 15:50:44 router dhcpd: DHCPREQUEST for 192.168.0.106 from xx:xx:xx:xx:xx via eth0May 03 15:50:44 router dhcpd: DHCPACK on 192.168.0.106 to xx:xx:xx:xx:xx via eth0

și aruncând o privire la /var/lib/dhcp/dhcpd.leases dezvăluie ce dispozitive s-au conectat în ultima vreme.

Conectarea dispozitivelor WiFi

pentru aceasta, veți avea nevoie de un router WiFi sau un punct de acces.

abordarea tipică este utilizarea WiFi-ului la bord. Aceasta se potrivește mai ales cu pașii de mai sus, cu excepția utilizării dispozitivului wlan0 pe Raspberry Pi pentru interfața lan și configurarea hostapd. Cu toate acestea, acest lucru nu este recomandat în contextul acestui post. Lăsarea Raspberry Pi să servească drept trecere între două interfețe ethernet este o abordare mai simplă și mai rapidă.

în schimb, pur și simplu conectați un router WiFi lalan portul de pe Raspberry Pi și apoi puneți routerul în modul Access Point (aka bridge). Acum, routerului nu-i va păsa dacă clienții se conectează prin ethernet sau WiFi.

sunt un mare fan al routerelor Orbi — nu numai că sunt extrem de rapide, dar puteți conecta portul „internet” al stației de bază la Raspberry Pi și aveți la dispoziție o duzină de conexiuni prin cablu în jurul casei:

redirecționarea traficului

În acest moment…

  • Raspberry Pi poate vorbi cu Internetul (WAN).
  • dispozitivele de pe LAN pot vorbi între ele.

… dar nu există nici o comunicare între cele două.

Enterfirewalld:

sudo apt install firewalld

Firewalld este cea mai ușoară soluție pe care am găsit-o până acum.

tabelele IP și firewall-urile pot fi o durere.

cel puțin, veți avea nevoie de o casă și o zonă publică, apoi să mascați traficul dintre cele două. Acest lucru spune doar firewall-ului că interfața lan este pentru acasă, iar interfețele wan/ppp0 sunt pentru public.

sudo firewall-cmd --zone=home --add-interface=lansudo firewall-cmd --zone=public --add-interface=ppp0sudo firewall-cmd --zone=public --add-interface=wansudo firewall-cmd --zone=public --add-masqueradesudo firewall-cmd --zone=home --add-service=dnssudo firewall-cmd --zone=home --add-service=dhcp

în acest moment, computerele conectate la LAN ar trebui să poată accesa internetul. Puteți rula sudo firewall-cmd --runtime-to-permanent acum pentru a salva totul, dar pot exista câțiva pași mai utili (mai jos). Dacă în orice moment traficul pe internet (sau altul) nu funcționează din rețea, rulați journalctl -xe și căutați linii de genul acesta:

FINAL_REJECT: IN=ppp0 OUT= MAC= SRC=77.247.109.40 DST=...

în acest caz, regula funcționează conform așteptărilor. Cineva de la o adresă IP necunoscută a încercat să contacteze rețeaua mea de domiciliu prin interfațappp0 (adică., de pe internet). În alte cazuri, poate fi necesar să deschideți firewall-ul pentru a permite un anumit trafic.

Firewalld este cel mai ușor atunci când se utilizează reguli bazate pe zone. Veți avea nevoie de cel puțin două zone, pe care le-am numit acasă și public în loc de lan și wan (pentru a se potrivi convențiilor firewalld). De asemenea, am o a treia zonă de încredere (opțională) în configurația mea pentru subrețeaua kubernetes/docker. Deci, când tastez firewall-cmd --get-active-zones, văd:

home interfaces: lan lopublic interfaces: wan ppp0trusted interfaces: docker0 cni0 sources: 10.244.0.0/24 10.202.0.0/24 10.96.0.0/24

definițiile pentru zone sunt conținute în fișiere xml situate la /etc/firewalld/zones/:

<?xml version="1.0" encoding="utf-8"?><zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="wan"/> <interface name="ppp0"/> <service name="ssh"/> <service name="http"/> <service name="https"/> <masquerade/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Home</short> <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="lan"/> <interface name="lo"/> <service name="ssh"/> <service name="mdns"/> <service name="samba-client"/> <service name="dhcpv6-client"/> <service name="dhcp"/> <service name="dns"/> <service name="http"/> <service name="https"/> <port port="5000" protocol="tcp"/> <port port="3000" protocol="tcp"/> <port port="9999" protocol="tcp"/> <port port="10250" protocol="tcp"/> <port port="10250" protocol="udp"/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Trusted</short> <description>All network connections are accepted.</description> <interface name="docker0"/> <interface name="cni0"/> <source address="10.244.0.0/24"/> <source address="10.202.0.0/24"/> <source address="10.96.0.0/24"/> <service name="dns"/> <service name="dhcp"/> <service name="dhcpv6-client"/> <service name="https"/> <service name="http"/></zone>

traficul este clasificat în zone bazate pe interfață sau sursă, cum ar fi:

  • sudo firewall-cmd --zone=public --add-interface=ppp0
  • sudo firewall-cmd --zone=trusted --add-source=10.202.0.0/24

și o zonă poate primi trafic către un serviciu sau un port:

  • sudo firewall-cmd --zone=public --add-service=http
  • sudo firewall-cmd --zone=home --add-port=10250/tcp

rețineți că aceste modificările sunt temporare. Acest lucru permite testarea sigură. Pentru a le face permanente, rulați sudo firewall-cmd --runtime-to-permanent. Dacă nu există dacă aveți nevoie de mai mult ajutor cu firewalld, consultați acest articol.

server DNS& rescrie

un server DNS poate face acest mic router chiar mai bun.

sarcina serverului DNS este de a răspunde cu o adresă IP pentru un anumit nume de domeniu. De exemplu, știe la ce adresă IP ar trebui să se conecteze computerul dvs. pentru a ajunge google.com. multor oameni le place să-și conducă propriile din motive de securitate și confidențialitate.

există ad-blocante acolo, de exemplu, care funcționează ca servere DNS. Prin instalarea Pi Hole sau AdGuard Home, puteți împiedica computerele din rețea să poată localiza domenii de publicitate/spam/malware. Ambele aceste două instrumente acceptă, de asemenea, rescrieri DNS, astfel încât să puteți schimba „locația” oricărui site.

după ce ați instalat unul dintre cele două, trebuie doar să editați /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

acum, toate dispozitivele care se conectează la rețea vor fi informate să utilizeze acest server DNS.

de ce sunt rescrierile atât de utile? Consultați următoarea postare despre construirea unui server de acasă. Rescrierile permit ca aceeași adresă URL să fie utilizată intern și extern, permițând HTTPS oriunde. De exemplu, folosind Adguard Home pentru a rescrie *.snowy-cabin.com la 192.168.0.100, orice trafic care provine din rețeaua de domiciliu la house.snowy-cabin.com nu va părăsi niciodată rețeaua de domiciliu. Aceasta înseamnă că același https:// URL poate fi utilizat pentru a ajunge la proxy-ul invers, unde se întâmplă încetarea SSL, asigurând o comunicare sigură atât pentru traficul public, cât și pentru cel privat.

ID-ul postării nu a fost găsit: #8977

Cheat-sheet

pentru a recapitula, iată câteva concepte cheie pentru serverele de acasă:

  • IPS Static: editați/etc/dhcp/dhcpd.conf pentru a adăuga o nouă gazdă, apoi repornițiisc-dhcp-server și reînnoiți contractul de închiriere pe client.
  • port forwarding: runsudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • nume de domenii personalizate: Utilizați serverul DNS pentru ca numele dvs. de domeniu unic să funcționeze intern și extern.
  • monitorizarea traficului în rețea: instrucțiuni.

de la securitate la viteză, există multe motive pentru a înțelege conexiunea la rețeaua de domiciliu. Aflați elementele de bază ale rețelei, precum și construiți-vă propriul router pentru a accelera internetul acasă.

Tagged asDIY Projects, Raspberry Pi Projects
scris de

(zane)/tehnic Wizardry

acest site a început ca un loc pentru a documenta proiecte DIY. A devenit o colecție de proiecte IOT, tutoriale tehnice și ghiduri de instruire. Cititi mai multe despre acest site…

Lasă un răspuns

Adresa ta de email nu va fi publicată.