budowanie własnego routera za pomocą Raspberry Pi

próbując dowiedzieć się, dlaczego internet jest powolny, może być trudno dowiedzieć się dokładnie, które urządzenie w sieci pochłania całą przepustowość. Wiele rozwiązań tego problemu wymaga zainstalowania oprogramowania na każdym monitorowanym urządzeniu. Zamiast tego próbowałem zbudować Niestandardowy monitor sieci Raspberry Pi.

budowanie własnego routera

Raspberry Pi 4 to całkiem zdolny router w odpowiednich okolicznościach.

ale najpierw wyjaśnijmy sobie warunki.

przełącznik tasuje dane w sieci. Router pomaga kierować tym ruchem.

Budowa „routera” w tym kontekście oznacza, że będziemy implementować DHCP, Dns i Firewall.

Jeśli nie wiesz co to oznacza, nie martw się. Na razie Załóżmy, że masz Raspberry Pi 4 (Zobacz listę części na dole). Bit „version 4″jest ważny, ponieważ ma znacznie lepszą kartę sieciową (eth0) niż poprzednie modele (Gigabit). To wskazuje na największe ograniczenie używania RPi jako routera: przepustowość jest ograniczona do 1000 Mbps.

przepustowość i przepustowość są często mylone.

„szerokość pasma” to maksymalna ilość danych, która może przepływać przez system (w tym przypadku z domu do Internetu). Przepustowość mierzy, ile przepustowości jest używane w dowolnym momencie.

nawiasem mówiąc, ten przewodnik powinien działać dla każdego systemu linux opartego na Debianie, który chcesz włączyć do routera. Możesz użyć lepszego sprzętu, aby stworzyć jeszcze bardziej efektywne rozwiązanie. Wybrałem Pi4, ponieważ nasza prędkość Internetu i tak wynosi tylko 30 MB / s (DSL). Jak opisałem w poście monitorowania sieci, TEN Raspberry Pi 4 okazał się być znacznie więcej niż wystarczająco w tym przypadku. Poniżej znajdują się dokładne produkty, których użyłem.

Jeśli jesteś nowy na Raspberry Pi, popularne CanaKits są doskonałym miejscem, aby rozpocząć. Wolę kupić Raspberry Pi 4, Zasilacz, karty micro SD, radiatory i oddzielnie. Nie tylko jest to tańsze, ale zmniejsza e-odpady.

Poniżej znajdują się linki partnerskie do innych części, które wykorzystałem w tym projekcie. Nigdy nie linkuję do produktu, którego osobiście nie używałem.

masz połączenie DSL / PPP?

przeczytaj o specyficznych dziwactwach używania Raspberry Pi jako routera DSL.

wymagany jest drugi port ethernet (patrz następna sekcja). Użyłem złącza Gigabit USB 3.0, powyżej.

łącząc się z Internetem

odwołam się do interfejsów sieciowych jakowan Ilan.

Jeśli chcesz, aby rzeczy były kopiowane i wklejane, możesz zmienić nazwy interfejsów sieciowych, aby pasowały. Na przykład lan to nazwa najszybszego z dwóch interfejsów (w moim przypadku wbudowany Interfejs sieciowy eth0). Aby utworzyć statyczną nazwę, najpierw wpisz ifconfig Pobierz adres MAC interfejsu (po ether). Jeśli znalazłeś ether aa:bb:cc:dd:ee:ff, Utwórz lub edytuj /etc/udev/rules.d/10-network.rules, aby uwzględnić:

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

… a następnie powtórz proces dla wan interfejs.

sieć wewnętrzna (LAN) musi radzić sobie z większą przepustowością niż sieć WAN.

dlatego dla SIECI LAN wybierany jest szybszy interfejs.

w tym momencie można bezpośrednio podłączyć interfejswan do modemu dostarczonego przez dostawcę usług internetowych. Możesz ustawić modem w trybie przezroczystego mostu, jeśli to możliwe, ponieważ Pi przejmuje funkcję routingu (więcej na ten temat).

gdy już tu jesteś, poświęć chwilę, aby upewnić się, że WAN jest poprawnie skonfigurowany, aby uzyskać dzierżawę DHCP. Jeśli używasz metody innej niż standardowy DHCP (np. PPOE), musisz zmodyfikować ten krok zgodnie z własnymi potrzebami. Ale w większości przypadków wystarczy utworzyć plik pod adresem /etc/network/interfaces.d/wan o następującej treści:

auto wanallow-hotplug waniface wan inet dhcp

serwer DHCP

z Pi online, Nadszedł czas, aby urządzenia połączyły się z Pi.

w tym przykładzie router Raspberry Pi będzie miał adres IP192.168.0.1.

uważaj, jeśli zmienisz to IP!

Ten przykład używa podsieci 192.168.0.0/24. Jeśli zdecydujesz się to zmienić, upewnij się, że wybrałeś z zakresu poprawnych podsieci prywatnych.

oznacza to najpierw utworzenie lub edycję /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

teraz interfejs LAN będzie miał statyczny adres IP i będzie traktował się jak router. Teraz nadszedł czas, aby umożliwić mu przypisywanie adresów IP do innych urządzeń w sieci. Uruchomienie serwera DHCP sprawi, że tak wiele komputerów może połączyć się z Pi.

najpierw wyłącz dhcpcd i zainstaluj isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

następnie Edytuj /etc/default/isc-dhcp-server, zastępując INTERFACESv4:

INTERFACESv4="lan"

powiedzieliśmy serwerowi DHCP jaki interfejs zawiera sieć LAN. Teraz musi znać parametry sieci domowej. Aby kontynuować ten przykład, pozwolimy serwerowi przypisać adresy IP w zakresie od 192.168.0.100 do 192.168.0.199 (więcej o tym dlaczego za chwilę). Edytuj/etc/dhcp/dhcpd.conf aby najpierw zmienić nazwę domeny i serwery nazw domen:

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

przyrostek.local jest konwencją dla SIECI LAN, ale możesz zastąpić nazwęrouter. Serwery nazw domen zostaną wkrótce zmienione, ale na razie są skierowane na google.

add Dodaj również:

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;}

informuje serwer DHCP, że może przypisać adresy IP do urządzeń, które łączą się z nim w podanym zakresie. Powodem stosunkowo małego zakresu jest to, że możemy przypisać statyczne adresy IP poza tym zakresem. Na przykład, możesz wziąć ten sam adres MAC dlalan powyżej i dodać następującą sekcję:

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

dodanie statycznego adresu IP routera również oznacza, że serwer DHCP nigdy nie może się pomylić i przypadkowo przypisać inny adres IP. Ogólnie rzecz biorąc, kodowanie adresów IP w serwerze DHCP również centralizuje autorytet (zamiast kodowania statycznych adresów IP na określonych urządzeniach, co jest znacznie bardziej kruche IME).

Jeśli zrestartujesz teraz Raspberry Pi i podłączysz komputer do portu lan, powinieneś znaleźć adres IP w odpowiednim zakresie. Korzystając z systemu Mac OSX, otworzyłem panel preferencji sieciowych, a następnie kartę Sprzęt, aby znaleźć adres MAC adaptera USB-C na Ethernet mojego laptopa. Następnie przypisałem statyczny adres IP (tak jak wyżej) do tego adresu i ponownie uruchomiłem serwer DHCP:

sudo systemctl restart isc-dhcp-server
połącz się z routerem raspberry pi
adres MAC pochodzi z zakładki Sprzęt. Naciśnięcie przycisku „Odnów dzierżawę DHCP” poprosi serwer DHCP o nowy adres IP, skutecznie odświeżając połączenie.

nawet jeśli stały adres jest poza zakresem powyżej, ten rodzaj statycznego przypisania IP będzie działał z dowolnym urządzeniem. Lubię dawać statyczne adresy IP wszystkim moim znanym, zaufanym urządzeniom, które są poza zasięgiem publicznym. To robi następujące:

  • pomaga zidentyfikować znane urządzenia.
  • pozwala na stosowanie reguł bezpieczeństwa dla znanych adresów IP.
  • włącza serwery (np. odczyt temperatury za pomocą taniego czujnika Arduino).

Jeśli z jakiegoś powodu komputer nie może się połączyć z siecią domową, uruchomienie własnego serwera DHCP ułatwia debugowanie. Uruchomienie journalctl -xe | grep dhcpd pokazuje wszelkie próby połączenia urządzeń z siecią domową:

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 rzucenie okiem na /var/lib/dhcp/dhcpd.leases pokazuje, które urządzenia zostały ostatnio połączone.

Podłączanie urządzeń WiFi

do tego potrzebny będzie router WiFi lub punkt dostępowy.

typowym podejściem jest korzystanie z pokładowego WiFi. To w większości pasuje do powyższych kroków, z wyjątkiem użycia urządzeniawlan0 na Raspberry Pi dla interfejsulan I ustawieniahostapd. Nie jest to jednak zalecane w kontekście tego postu. Pozwalając Raspberry Pi służyć jako przejście między dwoma interfejsami ethernet jest prostsze i szybsze podejście.

zamiast tego wystarczy podłączyć router WiFi do portulan na Raspberry Pi, a następnie przełączyć router w tryb Access Point (znany również jako bridge). Teraz router nie będzie dbał o to, czy klienci łączą się przez ethernet lub WiFi.

jestem wielkim fanem routerów Orbi — nie tylko są one bardzo szybkie, ale można podłączyć „internet” stacji bazowej do portu Raspberry Pi i mieć kilkanaście połączeń przewodowych do twojej dyspozycji wokół domu:

ruch przekierowujący

w tym momencie…

  • Raspberry Pi może rozmawiać z Internetem (WAN).
  • urządzenia w sieci LAN mogą ze sobą rozmawiać.

… ale nie ma komunikacji między nimi.

wpiszfirewalld:

sudo apt install firewalld

Firewalld jest najłatwiejszym rozwiązaniem, jakie do tej pory znalazłem.

tabele IP i firewalle mogą być uciążliwe.

co najmniej będziesz potrzebował strefy domowej i publicznej, a następnie maskarady ruchu między nimi. To po prostu mówi firewallowi, że interfejs lan jest dla domu, a Interfejsy Wan/ppp0 są dla społeczeństwa.

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

w tym momencie komputery podłączone do SIECI LAN powinny mieć dostęp do Internetu. Możesz po prostu uruchomićsudo firewall-cmd --runtime-to-permanent, aby zapisać to wszystko, ale może być jeszcze kilka przydatnych kroków (poniżej). Jeśli w dowolnym momencie ruch internetowy (lub inny) nie działa z sieci, Uruchom journalctl -xe I poszukaj linii takich jak:

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

w tym przypadku reguła działa zgodnie z oczekiwaniami. Ktoś z nieznanego adresu IP próbował skontaktować się z moją siecią domową za pośrednictwem interfejsuppp0 (tj., z Internetu). W innych przypadkach może być konieczne otwarcie zapory, aby zezwolić na określony ruch.

Firewalld jest najłatwiejszy przy użyciu reguł strefowych. Będziesz potrzebował co najmniej dwóch stref, które nazwałem home i public zamiast lan i wan (aby dopasować konwencje firewalld). Mam również trzecią (opcjonalną) strefę zaufaną w mojej konfiguracji dla podsieci kubernetes/docker. Kiedy więc wpisuję firewall-cmd --get-active-zones, widzę:

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

definicje stref są zawarte w plikach xml znajdujących się pod adresem /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>

ruch jest podzielony na strefy na podstawie interfejsu lub źródła, takie jak:

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

i strefa może odbierać ruch do usługi lub portu:

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

Uwaga że te zmiany są tymczasowe. Pozwala to na bezpieczne testowanie. Aby stały, Uruchom sudo firewall-cmd --runtime-to-permanent. Jeśli nie potrzebujesz więcej pomocy z firewalld, sprawdź ten artykuł.

serwer DNS& przepisuje

serwer DNS może sprawić, że ten mały router będzie jeszcze lepszy.

zadaniem serwera DNS jest podanie adresu IP dla danej nazwy domeny. Na przykład wie, z jakim adresem IP powinien się połączyć komputer, aby do niego dotrzeć google.com. Wiele osób lubi prowadzić własne ze względów bezpieczeństwa i prywatności.

istnieją na przykład blokery reklam, które działają jako serwery DNS. Instalując Pi Hole lub Adguard Home, możesz uniemożliwić komputerom w sieci zlokalizowanie domen reklamowych/spamu / złośliwego oprogramowania. Oba te narzędzia obsługują również przepisywanie DNS, dzięki czemu można zmienić „lokalizację” dowolnej witryny.

Po zainstalowaniu jednego z dwóch, po prostu edytuj /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

teraz wszystkie urządzenia, które łączą się z siecią, będą musiały używać tego serwera DNS.

Dlaczego rewrites są tak przydatne? Sprawdź poniższy post na temat budowania serwera domowego. Rewrites pozwala używać tego samego adresu URL wewnętrznie i zewnętrznie, umożliwiając https w dowolnym miejscu. Na przykład, używając Adguard Home do przepisania *.snowy-cabin.com do 192.168.0.100, ruch pochodzący z sieci domowej do house.snowy-cabin.com nigdy nie opuści sieci domowej. Oznacza to, że ten sam https:// URL może być użyty do osiągnięcia odwrotnego proxy, gdzie następuje zakończenie SSL, zapewniając bezpieczną komunikację zarówno dla ruchu publicznego, jak i prywatnego.

nie znaleziono id wpisu: #8977

Cheat-sheet

aby podsumować, oto kilka kluczowych pojęć dla serwerów domowych:

  • statyczne adresy IP: edytuj/etc/dhcp/dhcpd.confaby dodać nowy host, uruchom ponownieisc-dhcp-server I Odnów dzierżawę klienta.
  • przekierowanie portów: Uruchomsudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • niestandardowe nazwy domen: Użyj serwera DNS, aby Twoja unikalna nazwa domeny działała wewnętrznie i zewnętrznie.
  • monitorowanie ruchu w sieci: instrukcje.

od bezpieczeństwa do szybkości, istnieje wiele powodów, aby zrozumieć połączenie sieci domowej. Naucz się podstaw sieciowych, a także Zbuduj własny router, aby przyspieszyć internet w domu.

Tagged Asdiy Projects, Raspberry Pi Projects
napisany przez

(zane) /

Ta strona powstała jako miejsce do dokumentowania projektów DIY. Jest to zbiór projektów IOT, samouczków technicznych i przewodników z instrukcjami. Przeczytaj więcej o tej stronie…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.