Important
Ethical Disclosure: This project is for educational and ethical cybersecurity purposes only. The author is not responsible for any misuse or damage caused by this software. Use it only in controlled environments or laboratories.
Este proyecto convierte una máquina con Ubuntu Server 20.04 en un router Linux completamente funcional mediante un script de automatización en Bash y un conjunto de archivos de configuración de servicios de red. A partir del análisis del código y la estructura del repositorio, el sistema implementa enrutamiento de paquetes entre dos interfaces de red (enp0s3 — WAN e enp0s8 — LAN), habilitando NAT (Network Address Translation) con iptables para que los clientes de la red interna accedan a Internet a través de una sola IP pública.
El proyecto está orientado a entornos educativos, laboratorios de redes y administración de sistemas donde se requiere una solución de enrutamiento personalizable sobre hardware genérico, sin depender de dispositivos de red propietarios.
- Enrutamiento IP con NAT — Activa el IP forwarding en el kernel y configura reglas MASQUERADE en
iptablespara enrutar tráfico desde la red interna hacia Internet. - Servidor DHCP (isc-dhcp-server) — Asigna automáticamente direcciones IP, máscara de subred, gateway y DNS a los clientes conectados a la interfaz LAN (
enp0s8), configurado desdedhcpd.conf. - Servidor DNS local (BIND9) — Resuelve nombres de dominio internos mediante zonas directa (
db.router.local) e inversa (db.10.10.10), con opciones globales definidas ennamed.conf.optionsy zonas locales ennamed.conf.local. - Configuración de red con Netplan — Define IPs estáticas para ambas interfaces mediante el formato YAML de Netplan (
/etc/netplan/). - Automatización completa — El script
config.shorquesta la instalación de paquetes, copia de archivos de configuración, activación de servicios y aplicación de reglas de firewall sin intervención manual. - Topología de red definida — La red interna opera en el segmento
10.10.10.0/24, con el router actuando como gateway en10.10.10.1.
| Componente | Tecnología |
|---|---|
| Sistema Operativo | Ubuntu Server 20.04 LTS |
| Lenguaje de scripting | Bash / Shell |
| Firewall y NAT | iptables / iptables-persistent |
| Servidor DHCP | isc-dhcp-server |
| Servidor DNS | BIND9 (named) |
| Configuración de red | Netplan (YAML) |
| Control de versiones | Git |
- Ubuntu Server 20.04 instalado
- Dos interfaces de red activas (ej.
enp0s3para WAN yenp0s8para LAN) - Conexión a Internet en la interfaz WAN
- Privilegios de superusuario (
sudo)
# 1. Clonar el repositorio
git clone https://github.com/devsebastian44/Router-Linux.git
cd Router-Linux
# 2. Dar permisos de ejecución al script
sudo chmod +x src/setup.sh
# 3. Ejecutar el asistente de configuración
sudo ./src/setup.sh
⚠️ El script instalará paquetes, copiará archivos de configuración a rutas del sistema y activará servicios. Ejecutar únicamente en entornos dedicados o máquinas virtuales.
Si se requiere ajustar las IPs antes de ejecutar el script:
sudo nano /etc/netplan/00-installer-config.yamlEjemplo de configuración:
network:
ethernets:
enp0s3:
addresses: [192.168.1.2/24]
gateway4: 192.168.1.1
enp0s8:
addresses: [10.10.10.1/24]
nameservers:
addresses: [10.10.10.1]
version: 2Aplicar cambios:
sudo netplan applyUna vez ejecutado config.sh, el sistema queda operativo como router. Para verificar el estado de los servicios:
# Verificar estado del servidor DHCP
sudo systemctl status isc-dhcp-server
# Verificar estado del servidor DNS (BIND9)
sudo systemctl status named
# Ver reglas de iptables activas
sudo iptables -t nat -L -v --line-numbers
# Comprobar forwarding de IP activo
cat /proc/sys/net/ipv4/ip_forward
# Debe retornar: 1
# Ver leases DHCP asignados
cat /var/lib/dhcp/dhcpd.leasesPara que los clientes de la LAN obtengan conectividad, deben apuntar su gateway a 10.10.10.1 (automáticamente si reciben IP por DHCP).
Router-Linux/
│
├── src/
│ └── setup.sh # Script principal de automatización:
│ # instala paquetes, copia configs,
│ # activa NAT y servicios de red
│
├── configs/
│ ├── dhcp/ # Archivos de configuración DHCP:
│ │ ├── dhcpd.conf # Define pool de IPs, gateway y DNS
│ │ └── isc-dhcp-server # Especifica la interfaz de escucha
│ │
│ └── dns/ # Archivos de configuración BIND9:
│ ├── db.10.10.10 # Zona inversa: resuelve IPs → nombres
│ ├── db.router.local # Zona directa: resuelve nombres → IPs
│ ├── named.conf.local # Declaración de zonas DNS locales
│ ├── named.conf.options # Opciones globales: forwarders, recursión
│ └── resolv.conf # Configuración de resolución DNS local
│
├── diagrams/
│ └── topology.png # Diagrama de topología de red
│
├── tests/
│ └── syntax_check.sh # Script de validación de sintaxis
│
├── LICENSE # Licencia MIT
└── README.md # Documentación del repositorio
Este proyecto implementa componentes sensibles de infraestructura de red. Se recomienda tener en cuenta las siguientes consideraciones:
- Reglas de iptables: El script activa NAT con
MASQUERADE. Para entornos productivos, se recomienda añadir reglas de filtrado en la cadenaFORWARDpara controlar qué tráfico puede pasar entre segmentos. - Servidor DHCP expuesto:
isc-dhcp-serverescucha únicamente en la interfaz LAN (enp0s8). No debe exponerse en la interfaz WAN para evitar asignaciones no autorizadas. - BIND9 y recursión DNS: Verificar que
named.conf.optionsrestrinjaallow-queryyallow-recursionúnicamente a la red interna (10.10.10.0/24), evitando convertir el servidor en un open resolver. - iptables-persistent: Las reglas de firewall deben persistirse correctamente para sobrevivir reinicios del sistema.
- Uso responsable: Este proyecto está diseñado para entornos educativos, laboratorios y redes controladas. El despliegue en redes de producción requiere un análisis de seguridad adicional y el endurecimiento de cada servicio.
⚠️ No ejecutar este script en servidores en producción sin revisar y adaptar previamente cada archivo de configuración a la topología específica de la red.
Posibles mejoras identificadas a partir del análisis del código y la estructura actual:
- Soporte IPv6 — Ampliar las zonas DNS y reglas de
iptablespara manejar tráfico IPv6 (ip6tables). - Script de desinstalación — Añadir un
uninstall.shque revierta los cambios del sistema de forma segura. - Validación de interfaces — Agregar detección automática de interfaces de red en
config.shen lugar de nombres hardcodeados. - Firewall avanzado — Implementar reglas de filtrado de paquetes en la cadena
FORWARDcon políticas de denegación por defecto. - Monitoreo de tráfico — Integrar herramientas como
vnstatoiftoppara visibilidad del uso de red. - Soporte para múltiples subredes — Extender la configuración DHCP y DNS para gestionar más de un segmento de red interno.
- Variables de configuración centralizadas — Crear un archivo
.envo de configuración que centralice IPs, nombres de interfaz y rangos DHCP.
¡Las contribuciones son bienvenidas! Si tienes ideas para mejorar el enrutamiento, la seguridad o la automatización, sigue estos pasos:
- Haz un Fork del proyecto.
- Crea una rama para tu funcionalidad (
git checkout -b feature/AmazingFeature). - Realiza tus cambios y haz un commit profesional (
git commit -m 'feat: add some AmazingFeature'). - Sube los cambios a tu rama (
git push origin feature/AmazingFeature). - Abre un Pull Request.
Consulta CONTRIBUTING.md para más detalles.
Este proyecto está bajo la licencia MIT.
MIT License — Copyright (c) devsebastian44
Se permite el uso, copia, modificación y distribución con fines educativos y de investigación.
Sebastian GitHub: @devsebastian44
Proyecto desarrollado con fines educativos para la configuración de infraestructura de red en Ubuntu Server 20.04.