Construir su propio enrutador con un Raspberry Pi

Cuando intenta averiguar por qué Internet es lento, puede ser difícil saber exactamente qué dispositivo de la red está consumiendo todo el ancho de banda. Muchas soluciones a este problema requieren que se instale software en cada dispositivo para ser monitoreado. En su lugar, traté de construir un monitor de red Raspberry Pi personalizado.

Construir su propio router

Un Raspberry Pi 4 es un router muy capaz en las circunstancias adecuadas.

Pero primero, seamos claros en los términos.

Un conmutador baraja los datos en la red. Un enrutador ayuda a dirigir ese tráfico.

Construir un «enrutador», en este contexto, significa que implementaremos DHCP, DNS y un Firewall.

Si no sabe lo que eso significa, no se preocupe. Por ahora, supongamos que tiene una Raspberry Pi 4 (consulte la lista de piezas en la parte inferior). El bit «versión 4″es importante porque tiene una tarjeta de red significativamente mejor (eth0) que los modelos anteriores (Gigabit). Esto apunta a la mayor limitación de usar el RPi como enrutador: el ancho de banda está limitado a 1000 Mbps.

El ancho de banda y el rendimiento a menudo se confunden.

El «ancho de banda» es la cantidad máxima de datos que pueden fluir a través del sistema (en este caso, desde el hogar a Internet). El rendimiento mide cuánto ancho de banda se utiliza en cualquier momento.

Por cierto, esta guía debería funcionar para cualquier sistema linux basado en Debian que desee convertir en un enrutador. Podría usar un mejor hardware para crear una solución aún más efectiva. Elegí una Pi4 porque nuestra velocidad de Internet es de solo 30 Mbps de todos modos (DSL). Como describí en el post de monitoreo de red, esta Raspberry Pi 4 ha demostrado ser mucho más que suficiente para este caso. Los siguientes son los productos exactos que utilicé.

Si eres nuevo en Raspberry Pi, los populares CanaKits son un gran lugar para comenzar. Prefiero comprar el Raspberry Pi 4, el adaptador de corriente, las tarjetas micro SD y los disipadores de calor por separado. Esto no solo es más barato, sino que también reduce los desechos electrónicos.

Los siguientes son enlaces de afiliados a otras partes que utilicé en este proyecto. Nunca enlazo a un producto que no haya usado personalmente.

¿Tiene una conexión DSL / PPP?

Lea sobre las peculiaridades específicas de usar un Raspberry Pi como enrutador DSL.

Se requiere un segundo puerto ethernet (consulte la siguiente sección). Usé el conector USB 3.0 Gigabit, arriba.

Conectarse a Internet

Me referiré a las interfaces de red como wan y lan.

Si desea que las cosas se copien y peguen, puede cambiar el nombre de las interfaces de red para que coincidan. Por ejemplo, lan es el nombre de la interfaz más rápida de las dos (la interfaz de red integrada, eth0, en mi caso). Para crear el nombre estático, primero escriba ifconfig obtenga la dirección MAC de la interfaz (después de ether). Si usted encuentra ether aa:bb:cc:dd:ee:ff, a continuación, crear o editar /etc/udev/rules.d/10-network.rules incluye:

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

… y, a continuación, repita el proceso para el wan interfaz.

La red interna (LAN) necesita lidiar con más rendimiento que la WAN.

Esta es la razón por la que se elige la interfaz más rápida para la LAN.

En este punto, puede conectar directamente la interfaz wan al módem proporcionado por su ISP. Es posible que desee poner el módem en modo puente transparente, si es posible, ya que el Pi se está haciendo cargo de la funcionalidad de enrutamiento (más sobre esto).

Mientras esté aquí, tómese un momento para asegurarse de que la WAN esté configurada correctamente para obtener un arrendamiento DHCP. Si utiliza algún método que no sea DHCP estándar (por ejemplo, PPOE), deberá modificar este paso de acuerdo con sus necesidades. Pero en la mayoría de los casos, es suficiente crear un archivo en /etc/network/interfaces.d/wan con el siguiente contenido:

auto wanallow-hotplug waniface wan inet dhcp

Servidor DHCP

Con la Pi en línea, es hora de permitir que los dispositivos se conecten a la Pi.

En este ejemplo, el router Raspberry Pi tendrá una dirección IP de 192.168.0.1.

¡Tenga cuidado si cambia esta IP!

Este ejemplo utiliza la subred 192.168.0.0 / 24. Si decide cambiar esto, asegúrese de elegir entre el rango de subredes privadas válidas.

Esto significa crear o editar primero /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

Ahora la interfaz LAN tendrá una IP estática y se tratará como el router. Ahora es el momento de hacerlo capaz de asignar direcciones IP a otros dispositivos de la red. Por lo tanto, ejecutar un servidor DHCP hará que muchos equipos puedan conectarse a la Pi.

Primero, deshabilite dhcpcd e instale isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

Luego edite /etc/default/isc-dhcp-server, reemplazando INTERFACESv4:

INTERFACESv4="lan"

Le hemos dicho al servidor DHCP qué interfaz contiene la LAN. Ahora necesita conocer los parámetros de la red doméstica. Para continuar con el ejemplo, dejaremos que el servidor asigne direcciones IP en el rango de 192.168.0.100a 192.168.0.199 (más sobre por qué en un momento). Edite /etc/dhcp/dhcpd.conf para cambiar primero el nombre de dominio y los servidores de nombres de dominio:

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

El sufijo .local es convencional para una LAN, pero puede reemplazar el nombre router. Los servidores de nombres de dominio se cambiarán pronto, pero se apuntan a Google por ahora.

También agregue agregue lo siguiente:

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

Esto le indica al servidor DHCP que puede asignar direcciones IP a los dispositivos que se conectan a él dentro del rango dado. La razón del rango relativamente pequeño es que podemos asignar direcciones IP estáticas fuera de ese rango. Por ejemplo, puede tomar la misma dirección MAC para el lan anterior y agregar la siguiente sección:

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

Agregar la IP estática para el enrutador, también, significa que el servidor DHCP nunca se puede confundir y asignar accidentalmente una dirección IP diferente. En general, codificar las direcciones IP en el servidor DHCP también centraliza la autoridad (en lugar de codificar IP estáticas en dispositivos específicos, lo que es un IME mucho más frágil).

Si reinicia Raspberry Pi ahora y conecta una computadora al puerto lan, debería encontrar una dirección IP en el rango apropiado. Usando Mac OSX, abrí el panel de Preferencias de red y luego la pestaña Hardware para encontrar la dirección MAC del adaptador USB-C a Ethernet de mi computadora portátil. Luego asigné una IP estática (como la anterior) a esa dirección y reinicié el servidor DHCP:

sudo systemctl restart isc-dhcp-server
conectar al router raspberry pi
La dirección MAC vino de la pestaña Hardware. Al presionar el botón» Renovar arrendamiento DHCP», se solicitará al servidor DHCP una nueva dirección IP, lo que refrescará efectivamente la conexión.

Aunque la dirección fija está fuera del rango anterior, este tipo de asignación de IP estática funcionará con cualquier dispositivo. Me gusta dar IP estáticas a todos mis dispositivos conocidos y confiables que están fuera del alcance público. Esto hace lo siguiente:

  • Ayuda a identificar dispositivos conocidos.
  • Permite aplicar reglas de seguridad para direcciones IP conocidas.
  • Habilita servidores (es decir, lectura de temperatura a través de un sensor Arduino barato).

Si por alguna razón un equipo no puede conectarse a la red doméstica, ejecutar su propio servidor DHCP facilita la depuración. Ejecutar journalctl -xe | grep dhcpd muestra cualquier intento de los dispositivos de conectarse a la red doméstica:

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

Y echar un vistazo a /var/lib/dhcp/dhcpd.leases revela qué dispositivos se han conectado últimamente.

Conectar dispositivos WiFi

Para ello, necesitará un router o punto de acceso WiFi.

El enfoque típico es usar el WiFi. Esto coincide principalmente con los pasos anteriores, excepto usar el dispositivo wlan0 en Raspberry Pi para la interfaz lan y configurar hostapd. Sin embargo, eso no se recomienda en el contexto de este post. Dejar que Raspberry Pi sirva como un paso entre dos interfaces ethernet es un enfoque más simple y rápido.

En su lugar, simplemente conecte un enrutador WiFi al puerto lan en Raspberry Pi y luego ponga el enrutador en modo Punto de acceso (también conocido como puente). Ahora, al enrutador no le importará si los clientes se conectan a través de ethernet o WiFi.

Soy un gran fan de los routers Orbi, no solo son extremadamente rápidos, sino que también puede conectar el puerto «internet» de la estación base al Raspberry Pi y tener una docena de conexiones cableadas a su disposición en toda la casa:

Reenviar tráfico

En este punto

  • El Raspberry Pi puede comunicarse con Internet (WAN).
  • Los dispositivos de la LAN pueden comunicarse entre sí.

but pero no hay comunicación entre los dos.

Entrar firewalld:

sudo apt install firewalld

Firewalld es la solución más sencilla que he encontrado hasta ahora.

Las tablas IP y los firewalls pueden ser un dolor.

Como mínimo, necesitará una zona privada y pública, y luego enmascarar el tráfico entre las dos. Esto solo le dice al firewall que la interfaz lan es para el hogar, y las interfaces wan/ppp0 son para el público.

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

En este punto, los ordenadores conectados a LAN deberían poder acceder a Internet. Puede ejecutar sudo firewall-cmd --runtime-to-permanent ahora para guardarlo todo, pero puede que haya algunos pasos útiles más (a continuación). Si en algún momento el tráfico de Internet (u otro) no funciona desde dentro de la red, ejecute journalctl -xe y busque líneas como esta:

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

En este caso, la regla funciona como se esperaba. Alguien de una dirección IP desconocida intentó ponerse en contacto con mi red doméstica a través de la interfaz ppp0 (p. ej., de Internet). En otros casos, es posible que deba abrir el firewall para permitir cierto tráfico.

Firewalld es más fácil cuando se usan reglas basadas en zonas. Necesitarás al menos dos zonas, a las que he llamado hogar y público en lugar de lan y wan (para que coincidan con las convenciones de firewalld). También tengo una tercera zona de confianza (opcional) en mi configuración para la subred kubernetes/docker. Por lo tanto, cuando escribo firewall-cmd --get-active-zones, veo:

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

Las definiciones de zonas están contenidas en archivos xml ubicados en /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>

el Tráfico se clasifica en zonas basa en la interfaz o de la fuente, tales como:

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

Y una zona puede recibir tráfico a un servicio o de un puerto:

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

tenga en cuenta que estos cambios son temporales. Esto permite realizar pruebas seguras. Para hacerlos permanentes, ejecute sudo firewall-cmd --runtime-to-permanent. Si no hay un Si necesitas más ayuda con firewalld, echa un vistazo a este artículo.

Servidor DNS & Reescribe

Un servidor DNS puede hacer que este pequeño enrutador sea aún mejor.

El trabajo del servidor DNS es responder con una dirección IP para un nombre de dominio determinado. Por ejemplo, sabe a qué dirección IP debe conectarse su computadora para llegar google.com. A muchas personas les gusta ejecutar el suyo propio por razones de seguridad y privacidad.

Hay bloqueadores de anuncios, por ejemplo, que funcionan como servidores DNS. Al instalar Pi Hole o AdGuard Home, puede evitar que los equipos de la red puedan localizar dominios de publicidad, spam o malware. Ambas herramientas también admiten reescrituras de DNS, para que pueda cambiar la «ubicación» de cualquier sitio.

una Vez que haya instalado uno de los dos, acaba de editar /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

Ahora, todos los dispositivos que se conectan a la red que le digan que utilice este servidor DNS.

¿Por qué las reescrituras son tan útiles? Echa un vistazo a la siguiente publicación sobre la construcción de un servidor doméstico. Las reescrituras permiten usar la misma URL interna y externamente, lo que habilita HTTPS en cualquier lugar. Por ejemplo, al usar AdGuard Home para reescribir *.snowy-cabin.coma 192.168.0.100, cualquier tráfico que se origine dentro de la red doméstica a house.snowy-cabin.com nunca saldrá de la red doméstica. Esto significa que la misma URL https:// se puede usar para llegar al proxy inverso, donde ocurre la terminación SSL, lo que garantiza una comunicación segura para el tráfico público y privado.

id de publicación no encontrado: #8977

Hoja de trucos

Para recapitular, estos son algunos conceptos clave para servidores domésticos:

  • IPS estáticas: edite /etc/dhcp/dhcpd.confpara agregar un nuevo host, luego reinicie isc-dhcp-server y renueve el arrendamiento del cliente.
  • Reenvío de puertos: ejecute sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • Nombres de dominio personalizados: use el servidor DNS para que su nombre de dominio único funcione interna y externamente.
  • Supervisión del tráfico de red: instrucciones.

Desde la seguridad a la velocidad, hay muchas razones para entender la conexión de red doméstica. Aprenda los conceptos básicos de redes, así como construya su propio enrutador para acelerar Internet en casa.

Tagged asDIY Proyectos, Raspberry Pi Proyectos
Escrito por

(zane) / Técnicamente Magia

Este sitio comenzó como un lugar para documentar los proyectos de BRICOLAJE. Se ha convertido en una colección de proyectos de IOT, tutoriales técnicos y guías prácticas. Lea más sobre este sitio…

Deja una respuesta

Tu dirección de correo electrónico no será publicada.