Використовуєте Raspberry Pi як маршрутизатор?


50

Хтось використовував їх Raspberry Pi в якості маршрутизатора?

В основному я хочу використовувати його для моніторингу моєї мережі, і було б чудово, якби у неї був вхід і вихід для Ethernet, але це не так, тому мені цікаво, чи дуже ефективно контролювати мережу, використовуючи вхід Ethernet а потім за допомогою USB-ключа в якості маршрутизатора Wi-Fi. Хтось робив щось подібне? Це значно сповільнює Інтернет?


3
Залежить від того, наскільки швидким є ваш Інтернет. У мене 100 Мб, тому я впевнений, що це сповільнить;)
Джон Ла Руй

3
У мене підключення до Інтернету 30 Мбіт / с, і в цей час з 5 Мбіт / с трафіком мій вбудований малиновий пі з хропінням споживає ~ 50-95% процесора і 85% пам'яті. Моя установка ще не налаштована, але я хочу показати вам реальні цифри.
Труба

хтось не робить, як працює розподіл поганої ширини з налаштованим маршрутизатором за допомогою малинових пі? як, у мене швидкість 3Mbps інтернет, у мене є 10 користувачів. чи можете ви пояснити, як це буде розділено? швидкість 3 Мбіт / с. Дякую. Сподіваюся, ти зрозумієш. :)
кірби

2
Привіт кірби. Будь ласка, утримуйтесь не ставити запитання з іншого питання. Замість цього відкрийте нове запитання за посиланням Задати питання вгорі сторінки. Дякую.

Може, це? learn.adafruit.com/…
zengr

Відповіді:


30

Я використовую свою модель B в якості маршрутизатора з формуванням трафіку, використовуючи лише той порт Ethernet, з яким він поставляється. Ось швидкий і брудний про те, як:

  1. Увімкніть переадресацію IPv4 , тому ваш Pi діє як маршрутизатор, пересилаючи будь-який трафік, який він отримує
  2. Налаштуйте свій Pi зі статичною мережевою конфігурацією, щоб на нього не впливали зміни, запропоновані нижче. Ось зміст мого /etc/network/interfacesв якості довідки:

    # 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. Тепер змініть налаштування DHCP вашої мережі таким чином, щоб шлюз / маршрутизатор за замовчуванням був вашим Pi. Це, ймовірно, означає зміну налаштувань існуючого вікна маршрутизатора ADSL. У моєму прикладі вище IP-адреса мого Pi 192.168.1.1.

Коли ваші пристрої знову підключаться до мережі, їм повідомлять, що ваш Pi - це їх шлюз до Інтернету, і всі вони, пов’язані з Інтернетом, будуть відправлені на нього. Ваш Pi, в свою чергу, передаватиме весь трафік вашому звичайному маршрутизатору. Можливо, вам доведеться відключити та знову підключити свої пристрої, щоб ці зміни вступили в силу.

Тепер ви можете створити або встановити інструмент для моніторингу, наприклад vnstat .

Формування трафіку

Що стосується формування трафіку, ось ще одне швидке та брудне керівництво, яке використовуватиме мій особистий варіант чудес .

Щоб це було корисно, ви повинні знати, наскільки швидкий ваш Інтернет-зв’язок. Зазвичай ви можете знайти це з веб-інтерфейсу вашого (оригінального) маршрутизатора, але, якщо цього не зробити, ви можете отримати оцінку за допомогою швидкого тесту .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0буде надрукувати поточний стан формування трафіку. Очевидно, очікуваний статус полягає в тому, що немає формації, а це означає, що існує єдине правило, яке називається pfifo_fast:

    • ( eth0це ім'я адаптера провідної мережі на моделі B. Див ifconfig. назви інтерфейсів у вашій системі)
    # 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, де:

    • 3000- швидкість низхідної лінії зв'язку в Інтернеті в кбіт . Отже, 3Mbit == 3000кбіт
    • 370 - швидкість висхідної лінії мого підключення до Інтернету, знову ж таки, в кбіт.
  5. sudo ./wondershaper eth0 тепер має показати набагато більше результатів:

    # 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
    

Тепер ваш вихідний мережевий трафік формується вашим Pi, а ваш вхідний трафік трохи зменшується, щоб Pi, а не ваш оригінальний вікно маршрутизації контролював трафік.

Щоб відключити форму, просто запустіть sudo ./wondershaper eth0 clear. Ви можете змінити швидкість висхідної та низхідної лінії, не спочатку очищаючи, але це не зашкодить.

Оновлення: Вам також потрібно відключити передачу переадресацій ICMP , оскільки нам потрібен весь трафік, щоб пройти через Pi, щоб це відбулося. Виявляється, ядро ​​Linux досить розумне, щоб зрозуміти, що клієнти у вашій домашній мережі могли спілкуватися безпосередньо з вікном ADSL, а не відскакувати трафік через Pi, і це їм повідомляє при кожній нагоді. Потім клієнти направляють свій трафік прямо у вашу ADSL-скриньку, і Pi не отримує шансів це сформувати. Вимкніть його на льоту таким чином (втрачається при наступному перезавантаженні):

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

Оновіть наступне, щоб встановити це під час завантаження: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Завдяки https://unix.stackexchange.com/a/58081/22537 за цю пораду)

Можливо, вас також зацікавлять мої особисті замітки щодо налаштування шлюзу Linux: http://www.robmeerman.co.uk/unix/gateway


як встановити ім’я та пароль мережі Wi-Fi, до яких можуть підключатися інші пристрої?
fommil

Чудовий путівник. wondershaperОднак у мене є питання щодо вашої пропозиції: обмеження на кожного клієнта чи загальне?
Боб

@fommil: Мій посібник вище передбачає, що ви все ще використовуєте модем / маршрутизатор / точку доступу Wi-Fi, яку вам надав ваш Інтернет-провайдер, але ви налаштуєте його таким чином, що всі клієнти, які підключаються, кажуть "Надіслати трафік на Pi". Зазвичай це робиться шляхом введення IP-адреси (статичної!) Вашої Pi в налаштування DHCP вашого вікна провайдера. Зазвичай у полі під назвою "Шлюз", "Шлюз за замовчуванням" або, можливо, "Маршрут за замовчуванням".
RobM

@Bob: цифри, які ви вводите, є загальними для вашого інтернет-посилання. Сценарій чудес, ніж спроби справедливо поділитися цим усім вашим клієнтам на основі попиту . Тож якщо лише один клієнт користується Інтернетом, він повинен отримати 100% його. Якщо інший клієнт запуститься, він, через деякий час "відстоювання" (~ 10 секунд), закінчить, використовуючи 50% кожного тощо.
RobM

Ідеально. Лише зауваження до @fommil, жоден з моїх маршрутизаторів (і я припускаю, що багато інших однакові) не дає простий спосіб встановити шлюз, призначений через DHCP. Я закінчив вимкнути DHCP на маршрутизаторі та налаштувати DHCP-сервер на Pi - це досить простий процес (шукайте посібник, якщо хочете).
Боб

10

Маючи трохи мережевого фону, перше, що спадає на думку, - це використовувати його як поле Snort, і тоді вам не доведеться турбуватися про наявність лише одного інтерфейсу. Ви б встановили свій комутатор / маршрутизатор, щоб пересилати весь трафік на Pi, але і передавати його на кінцевий пристрій. Це відомо як монітор комутації, але ваш пристрій може не підтримувати його. Для цього вам може знадобитися керований перемикач . Потім Snort проаналізував би трафік і повідомив про нього. Більше інформації про Snort http://www.snort.org/

Приємна річ у подібних налаштуваннях - ваш Pi сидить убік, дивлячись на все, що працює через комутатор, а не сидіти в руці з даними. Якщо у вас є програмний збій таким чином, трафік все ще може протікати, тільки не слідкуйте за ним. З тим, що ви описуєте з двома інтерфейсами, ваша програма виходить з ладу, ваша мережа виходить з ладу.

Це не використовує pi як маршрутизатор, але дозволяє вам відстежувати та повідомляти про трафік, який рухається по вашій мережі.


7

Я використовував Raspberry Pi для маршрутизації, і він добре працював. Як ви кажете, вам потрібен принаймні ще один мережевий інтерфейс, оскільки Raspberry Pi має лише один Ethernet-порт. Ви можете додати інший інтерфейс, підключений до порту USB. Я використовував GSM-модем та паличку Wi-Fi.

Що слід зазначити:

  • Використовуйте напружений USB-концентратор. Пристрої Wi-Fi та GSM вимагають більшої енергії, ніж те, що можуть забезпечити USB-порти Raspberry Pi.
  • Якщо ви здійснюєте покупки пристроїв Wi-Fi, придбайте його з хорошою підтримкою Linux. Ви хочете, щоб він працював у режимі точки доступу, а не всі палички. Перевірте на linuxwireless.org .

Ось моя публікація в блозі про маршрутизацію та ще одна про налаштування точки доступу до Wi-Fi . Це керівництво допомогло мені з налаштуванням маршрутизації. Матеріали маршрутизації не дуже специфічні для Raspberry Pi; все, що працює на Linux взагалі повинно бути можливим. Деталі залежать трохи від того, який розподіл ви використовуєте.


4

Я використовую Raspberry Pi як роутер вже близько місяця, без жодних проблем. У мене є фактичний комерційний порт доступу Wi-Fi, а не домашній маршрутизатор Wi-Fi, тому я використовував це. У мене також є перетворювач USB в Ethernet, який був "запозичений" у Wii. Це переходить до домашньої локальної мережі, а вбудований Ethernet Raspberry Pi переходить до мережі WAN / Internet.

Ідіть, отримайте копію IPFire для Raspberry Pi. Вам потрібна версія ARM, без серійної консолі та останньої стабільної версії. Перейдіть на вкладку ARM. Завантажте "Зображення архітектури armv5tel".

Завантажте її. Підключіть телевізор та клавіатуру HDMI. Дайте відповідь на перші кілька запитань. Решту конфігурації можна виконати за допомогою браузера в домашній мережі, тому телевізор або клавіатура вам не знадобляться.

Це було не надто важко, і працював як чемпіон! Ось офіційні вказівки: http://wiki.ipfire.org/en/hardware/arm/rpi

Одне останнє. Якщо ви збираєтесь використовувати USB-накопичувач Wi-Fi, перевірте джерело живлення Raspberry Pi. USB-джерела потужністю 700 мА може бути достатньо для живлення Raspberry Pi, але це не залишає багато для живлення Wi-Fi. Або використовуйте підключений USB-концентратор або живіть Raspberry Pi за допомогою джерела живлення від 1 до 2 А.
Щасти!


1

(Цей додаток випливає з моєї попередньої відповіді , яка була керівництвом про те, як налаштувати ваш Pi як Інтернет-шлюз вашої локальної мережі)

Не задовольняючи моніторинг загального використання Інтернету, я написав інструмент, який відстежує використання Інтернету кожного пристрою в моїй локальній мережі. Це дозволяє мені бачити миттєве використання у вікні консолі та генерувати графіки історичного використання, щоб я міг бачити, що сталося за ніч.


Родос - інструмент для моніторингу використання мережевих пристроїв локальної мережі в реальному часі та історичного часу (на основі MAC-адреси): https://github.com/meermanr/adsl/tree/master/rhodes

Зразок виходу консолі:

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

Перший стовпець показує, скільки пристроїв передають, що зазвичай означає завантаження в Інтернет. Виняток з цього - сам маршрутизатор ADSL (home.gateway у зразку вище), який передає дані, отримані від провайдера, пристрою, який його запитував (тобто завантаження). Звичайно, він також передає завантаження в Інтернет, але робить це за допомогою свого ADSL-модему, якого немає в локальній мережі і тому не видно цьому інструменту.

Іншим винятком буде сам Raspberry Pi ("Flux" вище), який, звичайно, передає всі дані, якими він керує, в обох напрямках.

Але крім цих винятків, номери TX (передачі) відносяться до завантаження, а RX (отримання) номери для завантаження. Третій стовпець - MAC-адреса пристрою (без звичайних роздільників ":" або "-"). У четвертому стовпчику відображається читабельна для пристрою назва, якщо вона відома.

Діаграми генеруються за допомогою запуску ./index.py, який призначений для виклику з веб-сервера на зразок lighttpdindex.pyдоданим до index-file.namesналаштування налаштування в /etc/lighttpd/lighttpd.conf). Ви можете просто запустити його вручну, і він створить деякі зображення та надрукує HTML в STDOUT. Отже, ви хочете перенаправити це на файл, який ви можете відкрити в браузері:

./index.py > index.html

Потім відкрийте index.html у бажаному браузері.

Вимоги до встановлення (все можна встановити за допомогою apt-get install):

  • tcpdump - Інструменти командного рядка для захоплення та опису мережевого трафіку
  • rrdtool - Інструмент бази даних Round Robin, записує та графіку даних часових рядів
  • rrdcached - Керінг-кемон Daemon Database, що дозволяє скоротити накладні витрати при одночасній роботі з декількома файлами RRD.
  • pypy-upstream (швидка реалізація мови програмування Python)

    • Ви можете використовувати запас Python як вам подобається: python rhodes.py( pypyце альтернативна реалізація мови програмування Python, яка робить компіляцію Just-In-Time (JIT), тому тривалі сценарії будуть використовувати менше циклів процесора за рахунок більшої кількості пам'яті)

Примітка про використання : Інструмент 'tcpdump', використовуваний цим сценарієм, вимагає кореневих привілеїв для доступу до необмеженого мережевого трафіку. Це досягається запуском sudo tcpdumpпри запуску сценарію, тому вам можуть запропонувати ввести пароль. Особисто я додав правило NOPASSWD, щоб /etc/sudoersмене ніколи не запропонували.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.