Используя Raspberry Pi в качестве роутера?

50

Кто-нибудь использовал их Raspberry Pi в качестве устройства маршрутизации?

В основном я хочу использовать его для мониторинга своей сети, и было бы замечательно, если бы он имел вход и выход для Ethernet, но это не так, поэтому мне интересно, очень ли эффективно контролировать сеть, имея вход Ethernet и затем использование USB-ключа в качестве маршрутизатора Wi-Fi. Кто-нибудь сделал что-нибудь подобное? Замедляет ли это интернет сильно?

clifgray
источник
3
Зависит от того, как быстро ваше интернет-соединение. Мой размер - 100 Мб, поэтому я уверен, что это замедлит его;)
Джон Ла Рой
3
У меня 30 Мбит / с подключения к интернету, и в настоящее время с 5 Мбит / с трафика мой встроенный Raspberry Pi с snort потребляет ~ 50-95% ЦП и 85% памяти. Моя установка еще не настроена, но я хочу показать вам некоторые реальные цифры.
Труба
Кто-нибудь знает, как распределение плохой пропускной способности работает с настроенным маршрутизатором, использующим RasPberry Pi? Например, у меня скорость подключения к Интернету 3 Мбит / с, у меня 10 пользователей. Вы можете объяснить, как это будет разделено? скорость 3 Мбит / с. Благодарю. Надеюсь ты понимаешь. :)
Кирбс
2
Привет Кирбс. Пожалуйста, воздержитесь от вопросов по другому вопросу. Вместо этого откройте новый вопрос с помощью ссылки « Задать вопрос» вверху страницы. Спасибо.
Может быть, это? learn.adafruit.com/…
zengr

Ответы:

30

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

  1. Включите пересылку IPv4 , чтобы ваш Pi действовал как маршрутизатор, перенаправляя любой трафик, который он получает
  2. Сконфигурируйте свой Pi со статической конфигурацией сети, чтобы на него не влияли изменения DHCP, предложенные ниже. Вот содержимое моего в /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 .

Формирование трафика

Что касается формирования трафика, вот еще одно быстрое и грязное руководство, в котором будет использован мой личный вариант чудес .

Чтобы это было полезно, вам нужно знать, насколько быстро ваше интернет-соединение. Обычно вы можете найти это в веб-интерфейсе вашего (оригинального) маршрутизатора, но если вам не удастся получить оценку с помощью Speedtest .

  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 == 3000kbit
    • 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

RobM
источник
Как вы устанавливаете имя сети Wi-Fi и пароль, к которому могут подключаться другие устройства?
Fommil
Отличный гид. У меня есть вопрос по поводу вашего wondershaperпредложения: лимит для каждого клиента или общий?
Боб
@fommil: мое руководство выше предполагает, что вы по-прежнему используете точку доступа модема / маршрутизатора / WiFi, которую вам дал ваш провайдер, но вы настраиваете ее так, чтобы всем подключавшимся клиентам сообщалось «Отправить трафик Pi». Обычно это делается путем ввода IP-адреса вашего Pi (статического!) В настройках DHCP вашего провайдера. Обычно в поле «Шлюз», «Шлюз по умолчанию» или, возможно, «Маршрут по умолчанию».
RobM
@Bob: числа, которые вы вводите, являются общими для вашей интернет-ссылки. Сценарий wondershaper, чем попытка честно поделиться этим со всеми вашими клиентами в зависимости от спроса . Так что, если только один клиент использует Интернет, он должен получить 100% его. Если запускается другой клиент, он через некоторое время «установки» (~ 10 секунд) использует 50% каждый и так далее.
RobM
Отлично. Просто примечание к @fommil, ни один из моих маршрутизаторов (и я предполагаю, что многие из них одинаковы) не обеспечивает простой способ установки шлюза, назначенного через DHCP. Я закончил тем, что отключил DHCP на маршрутизаторе и настроил сервер DHCP на Pi - это довольно простой процесс (ищите руководство, если хотите).
Боб
10

Имея небольшой опыт работы с сетью, первое, что приходит на ум, - это использовать его в качестве блока Snort, и вам не нужно беспокоиться только об одном интерфейсе. Вы должны настроить свой коммутатор / маршрутизатор так, чтобы он перенаправлял весь трафик на Pi, но также передавал его на конечное устройство. Это называется монитором switchport, но ваше устройство может не поддерживать его. Для этого вам может понадобиться управляемый коммутатор . Затем 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 в целом, должно быть возможным. Детали немного зависят от того, какой дистрибутив вы используете.

Frepa
источник
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

Последняя вещь. Если вы собираетесь использовать адаптер Wi-Fi с питанием от USB, проверьте блок питания вашего Raspberry Pi. Для питания Raspberry Pi может быть достаточно USB-блока питания 700 мА, но для питания Wi-Fi не так уж много. Либо используйте USB-концентратор с питанием, либо подключите Raspberry Pi к источнику питания от 1 до 2 А USB.
Удачи!

Брюс Кивес
источник
1

(Это дополнение следует за моим предыдущим ответом , в котором рассказывалось, как настроить Pi в качестве интернет-шлюза локальной сети).

Не довольствуясь мониторингом общего использования Интернета, я написал инструмент, который отслеживает использование каждого устройства в моей локальной сети. Это позволяет мне видеть мгновенное использование в окне консоли и генерировать графики исторического использования, чтобы я мог видеть то, что произошло за одну ночь.


Rhodes , инструмент для мониторинга использования сетевых устройств LAN в режиме реального времени и истории (на основе 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 Database, записи и графики данных временных рядов
  • rrdcached - Round Robin Database Caching Daemon, сервис, который уменьшает накладные расходы при работе одновременно с несколькими RRD-файлами.
  • pypy-upstream (быстрая реализация языка программирования Python)

    • Вы можете использовать стандартный Python, который вам нравится: python rhodes.py( pypyявляется альтернативной реализацией языка программирования Python, который выполняет компиляцию Just-In-Time (JIT), поэтому долго выполняющиеся сценарии будут использовать меньше циклов ЦП за счет увеличения объема памяти)

Примечание об использовании : инструмент 'tcpdump', используемый этим сценарием, требует привилегий root для доступа к необработанному сетевому трафику. Это достигается путем запуска sudo tcpdumpпри запуске сценария, поэтому вам может быть предложено ввести пароль. Лично я добавил правило NOPASSWD, /etc/sudoersчтобы меня никогда не запрашивали .

RobM
источник