¿Usando la Raspberry Pi como enrutador?

50

¿Alguien ha usado su Raspberry Pi como dispositivo de enrutamiento?

Principalmente quiero usarlo para monitorear mi red, y sería genial si tuviera una entrada y salida para Ethernet, pero no la tiene, así que me pregunto si es muy efectivo monitorear la red al tener la entrada Ethernet y luego usando un dongle USB como enrutador Wi-Fi. Alguien ha hecho algo como esto? ¿Ralentiza mucho Internet?

Clifgray
fuente
3
Depende de lo rápido que sea tu conexión a Internet. El mío es de 100Mb, así que estoy bastante seguro de que lo ralentizaría;)
John La Rooy
3
Tengo una conexión a Internet de 30Mbps, y en este momento con 5Mbps de tráfico, mi raspberry pi en línea con snort consume ~ 50-95% de CPU y 85% de memoria. Mi configuración aún no está ajustada, pero quiero mostrarles algunas cifras reales.
Pipe
¿Alguien sabe cómo funciona la asignación de ancho de banda incorrecto con un enrutador personalizado que utiliza raspberry pi? como, tengo una velocidad de conexión a internet de 3Mbps, tengo 10 usuarios. ¿Puedes explicar cómo se dividirá? La velocidad de 3Mbps. Gracias. Espero que entiendas. :)
kirbs
2
Hola kirbs Abstenerse de hacer una pregunta sobre otra pregunta. En su lugar, abra una nueva pregunta con el enlace Hacer pregunta en la parte superior de la página. Gracias.
¿Tal vez esto? learn.adafruit.com/…
zengr

Respuestas:

30

He estado usando mi modelo B como un enrutador con configuración de tráfico, usando solo el puerto Ethernet con el que viene. Aquí hay un resumen rápido y sencillo sobre cómo:

  1. Habilite el reenvío IPv4 , para que su Pi actúe como un enrutador al reenviar cualquier tráfico que reciba
  2. Configure su Pi con una configuración de red estática para que no se vea influenciado por los cambios de DHCP que se sugieren a continuación. Aquí están los contenidos de mi /etc/network/interfacescomo referencia:

    # 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. Ahora cambie la configuración de DHCP de su red de modo que la puerta de enlace / enrutador predeterminada sea su Pi. Esto probablemente significa cambiar la configuración en su caja de enrutador ADSL existente. En mi ejemplo anterior, la dirección IP de mi Pi es 192.168.1.1.

La próxima vez que sus dispositivos se vuelvan a conectar a la red, se les informará que su Pi es su puerta de enlace a Internet, y se le enviará todo el tráfico vinculado a Internet. Su Pi a su vez transmitirá todo ese tráfico a su enrutador habitual. Es posible que deba desconectar y volver a conectar sus dispositivos para que estos cambios surtan efecto.

Ahora puede crear o instalar una herramienta para que supervise por usted, como vnstat .

Modelado de tráfico

En cuanto a la configuración del tráfico, aquí hay otra guía rápida y sucia que utilizará mi propia variante personal de Wondershaper .

Para que esto sea útil, necesita saber qué tan rápida es su conexión a Internet. Por lo general, puede encontrar esto en la interfaz web de su enrutador (original), pero si no puede obtener una estimación utilizando una prueba de velocidad .

  1. sudo apt-get install iptables
  2. wget https://raw.github.com/meermanr/adsl/master/wondershaper/wondershaper
  3. sudo ./wondershaper eth0imprimirá el estado actual de la conformación del tráfico. Obviamente, el estado esperado es que no hay forma, lo que significa que hay una sola regla en efecto, llamada pfifo_fast:

    • ( eth0es el nombre del adaptador de red con cable en un modelo B. Consulte ifconfiglos nombres de las interfaces en su sistema)
    # 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, dónde:

    • 3000es la velocidad de enlace descendente de mi conexión a Internet en kbit . Entonces 3Mbit == 3000kbit
    • 370 es la velocidad del enlace ascendente de mi conexión a Internet, en kbit nuevamente.
  5. sudo ./wondershaper eth0 ahora debería mostrar mucho más salida:

    # 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
    

Su tráfico de red saliente ahora está siendo configurado por su Pi, y su tráfico entrante se está acelerando ligeramente para garantizar que el Pi, y no su caja de enrutamiento original, tenga el control del tráfico.

Para deshabilitar la configuración, simplemente ejecute sudo ./wondershaper eth0 clear. Puede cambiar las velocidades de enlace ascendente y descendente sin borrar primero, pero no hace daño.

Actualización: También debe deshabilitar la transmisión de redireccionamientos ICMP , ya que necesitamos todo el tráfico para pasar a través de Pi para que se pueda dar forma. Resulta que el kernel de Linux es lo suficientemente inteligente como para darse cuenta de que los clientes en su red doméstica podrían comunicarse directamente con el cuadro ADSL, en lugar de rebotar el tráfico a través del Pi, y les dice esto en cada oportunidad. Luego, los clientes envían su tráfico directamente a su casilla ADSL, y el Pi no tiene la oportunidad de darle forma. Deshabilítelo sobre la marcha de esta manera (se pierde la próxima vez que reinicie):

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

Actualice lo siguiente para configurar esto durante el arranque: /etc/sysctl.conf

net/ipv4/conf/eth0/send_redirects = 0

(Gracias a https://unix.stackexchange.com/a/58081/22537 por este consejo)

También puede estar interesado en mis notas personales sobre la configuración de una puerta de enlace de Linux: http://www.robmeerman.co.uk/unix/gateway

RobM
fuente
¿Cómo se configura el nombre y la contraseña de la red wifi a la que se pueden conectar otros dispositivos?
fommil
Una gran guia. Sin wondershaperembargo, tengo una pregunta sobre su sugerencia: ¿es el límite por cliente o en general?
Bob
@fommil: Mi guía anterior asume que todavía usa el módem / enrutador / punto de acceso WiFi que le proporcionó su ISP, pero que lo configura de tal manera que a todos los clientes que se conectan se les dice "Enviar tráfico al Pi". Esto generalmente se hace ingresando la dirección IP de su Pi (¡estática!) En la configuración de DHCP de su casilla de ISP. Por lo general, en un campo llamado "Puerta de enlace", "Puerta de enlace predeterminada" o quizás "Ruta predeterminada".
RobM
@Bob: Los números que ingresas son el total de tu enlace de Internet. El script de Wondershaper que intenta compartirlo de manera justa con todos sus clientes según la demanda . Entonces, si solo un cliente está usando Internet, debería obtener el 100%. Si se inicia otro cliente, lo harán, después de un poco de "tiempo de establecimiento" (~ 10 segundos) terminarán usando el 50% cada uno, y así sucesivamente.
RobM
Perfecto. Solo una nota para @fommil, ninguno de mis enrutadores (y supongo que muchos más son iguales) proporciona una manera fácil de configurar la puerta de enlace asignada a través de DHCP. Terminé apagando el DHCP en el enrutador y configurando un servidor DHCP en el Pi; es un proceso bastante simple (busque una guía si lo desea).
Bob
10

Con un poco de experiencia en redes, lo primero que viene a la mente es usarlo como un cuadro de Snort, y luego no tiene que preocuparse por tener solo una interfaz. Configuraría su conmutador / enrutador para reenviar todo el tráfico al Pi, pero también lo pasaría al dispositivo final. Esto se conoce como monitor switchport, pero es posible que su dispositivo no lo admita. Es posible que necesite un interruptor administrado para hacer esto. Snort luego analizaría el tráfico e informaría al respecto. Más información sobre Snort http://www.snort.org/

Lo bueno de este tipo de configuración es que su Pi está sentada a un lado observando todo lo que se ejecuta a través del interruptor, en lugar de estar en línea con los datos. Si tiene una falla de software de esta manera, el tráfico aún puede fluir, pero no puede ser monitoreado. Con lo que está describiendo con dos interfaces, su programa se bloquea, su red se bloquea.

Esto no utiliza el pi como enrutador, pero le permite monitorear e informar sobre el tráfico que se mueve a través de su red.

Mantequillas
fuente
7

He usado Raspberry Pi para enrutar, y funcionó bien. Como usted dice, necesita al menos una interfaz de red más, ya que la Raspberry Pi solo tiene un puerto Ethernet. Puede agregar otra interfaz conectada al puerto USB. He usado un módem GSM y un dispositivo Wi-Fi.

Cosas a tener en cuenta:

  • Use un concentrador USB con alimentación. Los dispositivos Wi-Fi y GSM exigen más potencia de la que pueden suministrar los puertos USB de la Raspberry Pi.
  • Si compra dispositivos Wi-Fi, obtenga uno con un buen soporte de Linux. Desea uno que funcione en modo de punto de acceso, y no todos los sticks lo hacen. Verifique en linuxwireless.org .

Aquí está mi publicación de blog sobre el enrutamiento y otra sobre la configuración de un punto de acceso Wi-Fi . Esta guía me ayudó con la configuración del enrutamiento. El material de enrutamiento no es muy específico para Raspberry Pi; Cualquier cosa que funcione en Linux en general debería ser posible. Los detalles dependen un poco de la distribución que use.

Frepa
fuente
4

He estado usando la Raspberry Pi como un enrutador durante aproximadamente un mes, sin ningún problema. Tengo un puerto de acceso Wi-Fi comercial real, no un enrutador Wi-Fi doméstico, así que lo usé. También tengo un convertidor de USB a Ethernet que fue "prestado" de la Wii. Eso va a la LAN doméstica, y la Ethernet incorporada de la Raspberry Pi va a la WAN / Internet.

Ve a buscar una copia de IPFire para Raspberry Pi. Desea la versión ARM, sin una consola serie y la última versión estable. Haga clic en la pestaña ARM. Descargue la "Imagen para la arquitectura armv5tel".

Arranca fuera de ella. Conecte un televisor y teclado HDMI. Responde las primeras preguntas. El resto de la configuración se puede hacer desde un navegador en la red doméstica, por lo que no necesitará el televisor o el teclado después de eso.

¡No fue demasiado difícil y funcionó como un campeón! Aquí están las instrucciones formales: http://wiki.ipfire.org/en/hardware/arm/rpi

Una última cosa. Si va a utilizar un dongle Wi-Fi alimentado por USB, verifique la fuente de alimentación de su Raspberry Pi. Una fuente de alimentación USB de 700 mA puede ser suficiente para alimentar el Raspberry Pi, pero no deja mucho para alimentar el Wi-Fi. Utilice un concentrador USB con alimentación o alimente la Raspberry Pi con una fuente de alimentación USB de 1 a 2 A.
¡Buena suerte!

Bruce Kives
fuente
1

(Este anexo sigue mi respuesta anterior , que fue una guía sobre cómo configurar su Pi como la puerta de enlace de Internet de su LAN)

No contento con monitorear mi uso general de Internet, he escrito una herramienta que monitorea el uso de Internet de cada dispositivo en mi LAN. Esto me permite ver el uso instantáneo en una ventana de consola y generar gráficos de uso histórico para poder ver lo que sucedió de la noche a la mañana.


Rhodes , una herramienta para monitorear el uso de la red en tiempo real e histórico de dispositivos LAN (basado en la dirección MAC): https://github.com/meermanr/adsl/tree/master/rhodes

Muestra de salida de consola:

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

La primera columna muestra la cantidad de dispositivos que transmiten, lo que generalmente significa subir a Internet. La excepción a esto es el enrutador ADSL (home.gateway en la muestra anterior) que transmite los datos recibidos del ISP al dispositivo que lo solicitó (es decir, descargas). Por supuesto, también transmite cargas a Internet, pero lo hace usando su módem ADSL, que no está en la LAN y, por lo tanto, no es visible para esta herramienta.

La otra excepción sería la Raspberry Pi ("Flux" en lo anterior), que por supuesto transmite todos los datos que maneja, en ambas direcciones.

Pero, aparte de esas excepciones, los números TX (transmisión) se refieren a la carga y los números RX (recepción) para descargar. La tercera columna es la dirección MAC del dispositivo (sin los separadores habituales ":" o "-"). La cuarta columna muestra el nombre legible por humanos del dispositivo, si se conoce.

Los gráficos se generan mediante la ejecución ./index.py, que se pretende llamar desde un servidor web como lighttpd(con index.pyagregado a la index-file.namesconfiguración de configuración en /etc/lighttpd/lighttpd.conf). Simplemente puede ejecutarlo manualmente y generará algunas imágenes e imprimirá HTML en STDOUT. Por lo tanto, desearía redirigirlo a un archivo que puede abrir en un navegador:

./index.py > index.html

Luego abra index.html en su navegador preferido.

Requisitos de instalación (todos se pueden instalar con apt-get install):

  • tcpdump - Herramientas de línea de comandos para capturar y describir el tráfico de red.
  • rrdtool - Herramienta de base de datos Round Robin, registros y datos de series de tiempo de gráficos
  • rrdcached - Round Robin Database Caching Daemon, servicio que reduce los gastos generales al trabajar simultáneamente con múltiples archivos RRD.
  • pypy-upstream (una implementación rápida del lenguaje de programación Python)

    • Puede usar el Python original que desee: python rhodes.py( pypyes una implementación alternativa del lenguaje de programación Python que realiza la compilación Just-In-Time (JIT), por lo que los scripts de larga duración usarán menos ciclos de CPU a costa de más memoria)

Nota de uso : la herramienta 'tcpdump' utilizada por este script requiere privilegios de root para acceder al tráfico de red sin procesar. Esto se logra iniciando sudo tcpdumpcuando se inicia el script, por lo que se le puede solicitar que ingrese su contraseña. Personalmente, agregué una regla NOPASSWD para /etc/sudoersque nunca se me solicite.

RobM
fuente