Używasz Raspberry Pi jako routera?


50

Czy ktoś używał swojego Raspberry Pi jako urządzenia do routingu?

Głównie chcę go używać do monitorowania mojej sieci, i byłoby świetnie, gdyby miał wejście i wyjście dla Ethernetu, ale tak nie jest, więc zastanawiam się, czy bardzo skuteczne jest monitorowanie sieci poprzez wejście Ethernet a następnie za pomocą klucza USB jako routera Wi-Fi. Czy ktoś zrobił coś takiego? Czy znacznie spowalnia Internet?


3
Zależy jak szybkie jest twoje połączenie internetowe. Mój ma 100 Mb, więc jestem pewien, że to spowolniłoby;)
John La Rooy 30.04.2013

3
Mam połączenie internetowe 30 Mb / s, a obecnie przy ruchu 5 Mb / s moje wbudowane raspberry pi z snortem zużywają ~ 50-95% procesora i 85% pamięci. Moja konfiguracja nie jest jeszcze dopracowana, ale chcę pokazać ci prawdziwe liczby.
Rura

czy ktoś nie wie, jak przydział przepustowości działa w przypadku niestandardowego routera korzystającego z Raspberry Pi? mam prędkość łącza internetowego 3 Mb / s, mam 10 użytkowników. czy możesz wyjaśnić, jak zostanie podzielony? prędkość 3 Mb / s. Dzięki. Nadzieję, że zrozumiesz. :)
kirbs,

2
Cześć Kirbs. Powstrzymaj się od zadawania pytań dotyczących innego pytania. Zamiast tego otwórz nowe pytanie za pomocą linku Zadaj pytanie u góry strony. Dziękuję Ci.

Odpowiedzi:


30

Używam mojego modelu B jako routera z funkcją kształtowania ruchu, używając tylko jednego portu Ethernet, z którym jest on wyposażony. Oto szybkie i brudne informacje na temat:

  1. Włącz przekazywanie IPv4 , aby Twój Pi działał jak router, przekazując otrzymany ruch
  2. Skonfiguruj swoje Pi ze statyczną konfiguracją sieci, aby nie miały na niego wpływu zmiany DHCP sugerowane poniżej. Oto zawartość mojego /etc/network/interfacesjako odniesienia:

    # pi@flux:/home/pi/projects/adsl/rrdlogger (master *)
    # cat /etc/network/interfaces 
    auto lo
    
    iface lo inet loopback
    #iface eth0 inet dhcp
    iface eth0 inet static
            address 192.168.1.1
            netemask 255.255.255.0
            gateway 192.168.1.254    # IP of my ADSL router box
    
    allow-hotplug wlan0
    iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
    iface default inet dhcp
    
  3. Teraz zmień ustawienia DHCP swojej sieci, tak aby domyślną bramą / routerem była Twoja Pi. Prawdopodobnie oznacza to zmianę ustawień istniejącego routera ADSL. W powyższym przykładzie adres IP mojego Pi to 192.168.1.1.

Kiedy twoje urządzenia ponownie połączą się ponownie z siecią, powiedzą Ci, że Pi jest ich bramą do Internetu, a cały ruch związany z Internetem zostanie do niej przesłany. Twoje Pi z kolei przekaże cały ten ruch do twojego zwykłego routera. Konieczne może być odłączenie, a następnie ponowne podłączenie urządzeń, aby zmiany zostały wprowadzone.

Teraz możesz utworzyć lub zainstalować narzędzie do monitorowania, takie jak vnstat .

Kształtowanie ruchu

Jeśli chodzi o kształtowanie ruchu, oto kolejny szybki i brudny przewodnik, który wykorzysta mój własny wariant cudotwórcy .

Aby było to przydatne, musisz wiedzieć, jak szybkie jest twoje połączenie internetowe. Zazwyczaj można to znaleźć w interfejsie internetowym (oryginalnego) routera, ale w przypadku niepowodzenia można uzyskać oszacowanie za pomocą testu szybkości .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0wypisze bieżący stan kształtowania ruchu. Oczywiście oczekiwanym stanem jest brak kształtowania, co oznacza, że ​​obowiązuje jedna reguła, zwana pfifo_fast:

    • ( eth0to nazwa przewodowej karty sieciowej w modelu B. Zobacz ifconfignazwy interfejsów w systemie)
    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
     Sent 1908 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0
    
  4. sudo ./wondershaper eth0 3000 370, gdzie:

    • 3000to prędkość łącza w dół mojego połączenia internetowego w kbitach . 3Mbit == 3000kbit
    • 370 to prędkość łącza w górę mojego połączenia internetowego, znów w kbitach.
  5. sudo ./wondershaper eth0 powinien teraz wyświetlać znacznie więcej wyników:

    # pi@flux:/home/pi/projects/adsl/wondershaper (master *)
    # sudo ./wondershaper eth0
    qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 0
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 40: parent 1:40 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 1858 bytes 9 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 10: parent 1:10 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 20: parent 1:20 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc sfq 30: parent 1:30 limit 127p quantum 1526b depth 127 divisor 1024 perturb 10sec 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    qdisc ingress ffff: parent ffff:fff1 ---------------- 
     Sent 768 bytes 12 pkt (dropped 0, overlimits 0 requeues 0) 
     backlog 0b 0p requeues 0 
    class htb 1:1 root rate 370000bit ceil 370000bit burst 10Kb cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 3459453 ctokens: 540531
    
    class htb 1:10 parent 1:1 leaf 10: prio 1 rate 370000bit ceil 370000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 540531 ctokens: 540531
    
    class htb 1:20 parent 1:1 leaf 20: prio 2 rate 246000bit ceil 246000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 813000 ctokens: 813000
    
    class htb 1:30 parent 1:1 leaf 30: prio 3 rate 74000bit ceil 74000bit burst 1599b cburst 1599b 
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 0 borrowed: 0 giants: 0
     tokens: 2702687 ctokens: 2702687
    
    class htb 1:40 root leaf 40: prio 0 rate 100000Kbit ceil 100000Kbit burst 512Kb cburst 1600b 
     Sent 3486 bytes 15 pkt (dropped 0, overlimits 0 requeues 0) 
     rate 0bit 0pps backlog 0b 0p requeues 0 
     lended: 15 borrowed: 0 giants: 0
     tokens: 654609 ctokens: 1250
    

Twój wychodzący ruch sieciowy jest teraz kształtowany przez twoje Pi, a twój ruch przychodzący jest nieznacznie dławiony, aby zapewnić, że Pi, a nie oryginalne pole routingu, ma kontrolę nad ruchem.

Aby wyłączyć kształtowanie, po prostu uruchom sudo ./wondershaper eth0 clear. Możesz zmienić szybkość łącza w górę i w dół bez uprzedniego wyczyszczenia, ale to nie boli.

Aktualizacja: Musisz także wyłączyć transmisję przekierowań ICMP , ponieważ potrzebujemy całego ruchu, aby przejść przez Pi, aby nastąpiło kształtowanie. Okazuje się, że jądro Linuksa jest wystarczająco inteligentne, aby dowiedzieć się, że klienci w sieci domowej mogą rozmawiać bezpośrednio z modułem ADSL, zamiast odbierać ruch przez Pi, i mówi im to przy każdej okazji. Klienci wysyłają następnie swój ruch bezpośrednio do twojego pola ADSL, a Pi nie ma szansy go ukształtować. Wyłącz tak w locie (zgubiony przy następnym uruchomieniu):

echo 0 | sudo tee /proc/sys/net/ipv4/conf/*/send_redirects

Zaktualizuj następujące ustawienia, aby ustawić to podczas uruchamiania: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Dzięki https://unix.stackexchange.com/a/58081/22537 za tę wskazówkę)

Możesz być także zainteresowany moimi osobistymi notatkami na temat konfigurowania bramy Linux: http://www.robmeerman.co.uk/unix/gateway


Jak ustawić nazwę sieci Wi-Fi i hasło, z którymi inne urządzenia mogą się łączyć?
fommil

Świetny przewodnik. Mam jednak pytanie dotyczące Twojej wondershapersugestii: czy jest to limit na klienta, czy ogólnie?
Bob

@fommil: Mój przewodnik powyżej zakłada, że ​​nadal korzystasz z modemu / routera / punktu dostępu Wi-Fi, które dał ci dostawca Internetu, ale konfigurujesz go tak, aby wszyscy klienci, którzy się łączą, otrzymali polecenie „Wyślij ruch do Pi”. Zwykle odbywa się to poprzez wprowadzenie adresu IP (statycznego!) Swojego Pi w ustawieniach DHCP twojego dostawcy usług internetowych. Zazwyczaj w polu o nazwie „Brama”, „Brama domyślna” lub „Trasa domyślna”.
RobM

@Bob: Podane liczby są sumą twojego łącza internetowego. Cudowny skrypt niż próba sprawiedliwego udostępnienia go wszystkim klientom na podstawie zapotrzebowania . Więc jeśli tylko jeden klient korzysta z Internetu, powinien uzyskać 100%. Jeśli uruchomi się inny klient, po pewnym czasie „rozliczenia” (~ 10 sekund) każdy zużyje 50% i tak dalej.
RobM

Doskonały. Tylko uwaga do @fommil, żaden z moich routerów (i zakładam, że wiele innych jest takich samych) nie zapewnia łatwego sposobu ustawienia bramy przypisanej przez DHCP. Skończyło się na wyłączeniu DHCP na routerze i skonfigurowaniu serwera DHCP na Pi - jest to dość prosty proces (poszukaj przewodnika, jeśli chcesz).
Bob

10

Mając małe tło sieciowe, pierwszą rzeczą, która przychodzi na myśl, jest użycie go jako pudełka Snort, a następnie nie musisz się martwić, że masz tylko jeden interfejs. Skonfigurujesz swój przełącznik / router tak, aby przekazywał cały ruch do Pi, ale także przekazywał go do urządzenia końcowego. Nazywa się to monitorem przełączania, ale urządzenie może go nie obsługiwać. W tym celu może być potrzebny przełącznik zarządzany . Snort analizuje ruch i zgłasza go. Więcej informacji na temat Snort http://www.snort.org/

Zaletą tego rodzaju konfiguracji jest to, że Pi siedzi z boku i obserwuje wszystko, co jest uruchamiane przez przełącznik, zamiast siedzieć w linii z danymi. Jeśli masz usterkę oprogramowania w ten sposób, ruch może nadal płynąć, po prostu nie być monitorowany. W przypadku tego, co opisujesz za pomocą dwóch interfejsów, program ulega awarii, awaria sieci.

Nie używa pi jako routera, ale pozwala monitorować i raportować ruch w sieci.


7

Używałem Raspberry Pi do routingu i działało dobrze. Jak mówisz, potrzebujesz jeszcze jednego interfejsu sieciowego, ponieważ Raspberry Pi ma tylko jeden port Ethernet. Możesz dodać kolejny interfejs podłączony do portu USB. Użyłem modemu GSM i kija Wi-Fi.

Ważne uwagi:

  • Użyj zasilanego koncentratora USB. Urządzenia Wi-Fi i GSM wymagają więcej energii niż jest w stanie zapewnić porty USB Raspberry Pi.
  • Jeśli kupujesz urządzenia Wi-Fi, zdobądź je z dobrą obsługą Linux. Chcesz taki, który działa w trybie punktu dostępu, a nie wszystkie drążki działają. Sprawdź na linuxwireless.org .

Oto mój post na blogu na temat routingu, a drugi na temat konfigurowania punktu dostępu Wi-Fi . Ten przewodnik pomógł mi w konfiguracji routingu. Trasy routingu nie są zbyt specyficzne dla Raspberry Pi; wszystko, co ogólnie działa na Linuksie, powinno być możliwe. Szczegóły zależą nieco od używanej dystrybucji.


4

Używam Raspberry Pi jako routera od około miesiąca bez żadnych problemów. Mam rzeczywisty komercyjny port dostępu Wi-Fi, a nie domowy router Wi-Fi, więc z niego skorzystałem. Mam też konwerter USB-Ethernet, który został „pożyczony” z Wii. To idzie do domowej sieci LAN, a wbudowany Ethernet Raspberry Pi przechodzi do sieci WAN / Internetu.

Idź po kopię IPFire dla Raspberry Pi. Chcesz wersję ARM bez konsoli szeregowej i najnowszej stabilnej wersji. Kliknij kartę ARM. Pobierz „Obraz architektury armv5tel”.

Uruchom go. Podłącz telewizor HDMI i klawiaturę. Odpowiedz na kilka pierwszych pytań. Resztę konfiguracji można wykonać z przeglądarki w sieci domowej, więc nie będzie już potrzebny telewizor ani klawiatura.

Nie było to zbyt trudne i działało jak mistrz! Oto formalne instrukcje: http://wiki.ipfire.org/en/hardware/arm/rpi

Ostatnia rzecz. Jeśli zamierzasz używać klucza Wi-Fi zasilanego przez USB, sprawdź zasilacz Raspberry Pi. Zasilacz USB 700 mA może być wystarczający do zasilania Raspberry Pi, ale nie pozostawia wiele do zasilania Wi-Fi. Użyj zasilanego koncentratora USB lub zasil Raspberry Pi za pomocą zasilacza USB 1 do 2 A.
Powodzenia!


1

(Ten dodatek jest zgodny z moją poprzednią odpowiedzią , która była przewodnikiem, jak skonfigurować Pi jako bramę internetową twojej sieci LAN)

Nie jestem zadowolony z monitorowania ogólnego zużycia Internetu, napisałem narzędzie, które monitoruje wykorzystanie Internetu przez każde urządzenie w mojej sieci LAN. To pozwala mi zobaczyć natychmiastowe użycie w oknie konsoli i wygenerować wykresy historycznego użycia, dzięki czemu mogę zobaczyć, co wydarzyło się z dnia na dzień.


Rhodes , narzędzie do monitorowania wykorzystania sieci LAN w czasie rzeczywistym i w przeszłości (w oparciu o adres MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Próbka wyjścia konsoli:

193 kiB/s TX     17 kiB/s RX   0004edbf98c0   home.gateway (Billion Electric Co.)
  0 kiB/s TX      0 kiB/s RX   2002af18dc15   Samsung Galaxy Tab 10.1, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c01197b   Nintendo 3DS:XL, Robert
  0 kiB/s TX      0 kiB/s RX   34af2c3af204   Nintendo 3DS:XL, Vicky
  0 kiB/s TX      0 kiB/s RX   34af2c9cfffd   Nintendo WiiU
  0 kiB/s TX      0 kiB/s RX   6045bd9c9dbc   Xbox360 Slim
  0 kiB/s TX      0 kiB/s RX   745e1c56c297   Pioneer SX-LX57
 13 kiB/s TX    109 kiB/s RX   7831c1be0c34   Az Pro (Macbook Pro)
  0 kiB/s TX      0 kiB/s RX   80ea96e6214e   Roberts-AirPort-Time-Capsule
  0 kiB/s TX      0 kiB/s RX   88308a770370   Samsung Galaxy S3, Vicky
189 kiB/s TX    211 kiB/s RX   b827eb8fc0f3   Flux (Raspberry Pi)
  2 kiB/s TX     39 kiB/s RX   b8e8563acb34   Macbook Pro, Vicky
  0 kiB/s TX      0 kiB/s RX   d022be2c26ef   Samsung Galaxy Note 3, Rob
  0 kiB/s TX      0 kiB/s RX   f82fa89368ea

Pierwsza kolumna pokazuje, ile urządzeń transmituje, co zwykle oznacza przesyłanie do Internetu. Wyjątkiem jest sam router ADSL (home.gateway w powyższym przykładzie), który przesyła dane otrzymane od dostawcy usług internetowych przez urządzenie, które go zażądało (tj. Pobiera). Oczywiście przesyła również przesłane pliki do Internetu, ale robi to za pomocą modemu ADSL, który nie znajduje się w sieci LAN, a więc nie jest widoczny dla tego narzędzia.

Innym wyjątkiem byłby sam Raspberry Pi („Flux” powyżej), który oczywiście przesyła wszystkie dane, którymi zarządza, w obu kierunkach.

Ale oprócz tych wyjątków, numery TX (nadawanie) odnoszą się do wysyłania, a numery RX (odbieranie) do pobierania. Trzecia kolumna to adres MAC urządzenia (bez zwykłych separatorów „:” lub „-”). Czwarta kolumna pokazuje czytelną dla człowieka nazwę urządzenia, jeśli jest znane.

Wykresy są generowane przez uruchomienie ./index.py, które ma być wywoływane z serwera WWW, takiego jak lighttpd(z index.pydodanym do index-file.namesustawienia konfiguracji w /etc/lighttpd/lighttpd.conf). Możesz po prostu uruchomić go ręcznie, a wygeneruje kilka obrazów i wydrukuje HTML do STDOUT. Więc chcesz przekierować to do pliku, który możesz otworzyć w przeglądarce:

./index.py > index.html

Następnie otwórz plik index.html w preferowanej przeglądarce.

Wymagania instalacyjne (wszystkie można zainstalować za pomocą apt-get install):

  • tcpdump - Narzędzia wiersza poleceń do przechwytywania i opisywania ruchu sieciowego
  • rrdtool - Narzędzie Round Robin Database, rekordy i wykresy danych szeregów czasowych
  • rrdcached - Round Robin Database Caching Daemon, usługa, która zmniejsza koszty ogólne podczas pracy z wieloma plikami RRD.
  • pypy-upstream (szybka implementacja języka programowania Python)

    • Możesz używać standardowego języka Python, jaki lubisz: python rhodes.py( pypyjest alternatywną implementacją języka programowania Python, który wykonuje kompilację Just-In-Time (JIT), więc długo działające skrypty będą zużywać mniej cykli procesora kosztem większej ilości pamięci)

Uwaga dotycząca użytkowania : Narzędzie „tcpdump” używane przez ten skrypt wymaga uprawnień roota, aby uzyskać dostęp do surowego ruchu sieciowego. Uzyskuje się to poprzez uruchomienie sudo tcpdumpskryptu, dlatego może zostać wyświetlony monit o podanie hasła. Osobiście dodałem regułę NOPASSWD, /etc/sudoerswięc nigdy nie otrzymuję monitu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.