Tengo una caja CentOS 7 con 2 NIC: un puerto Ethernet y otro inalámbrico. Me gustaría crear un contenedor lxc que actúe como enrutador y que cumpla con los siguientes requisitos:
- Al ejecutar hostapd, los clientes que están conectados al punto de acceso deben tener todos los datos enrutados a través de este contenedor.
- Cualquier otro contenedor lxc instalado también debe enrutar todos los datos a través de este contenedor de enrutamiento.
- Si el puerto Ethernet está conectado a Internet, entonces el host y todos los contenedores deben tener acceso a Internet, así como cualquier cliente conectado al punto de acceso.
Para configurar esto, he hecho lo siguiente:
- Creó el contenedor lxc de enrutamiento
- El host tiene interfaces eth0 y wlan0. También creé br-eth0 y br-wlan0, que son puentes, y les agregué esas dos interfaces, respectivamente.
- br-eth0 está configurado como cliente dhcp para conectarse a mi enrutador externo a través de la NIC eth0
- br-wlan0 tiene una IP estática de 10.0.0.1 y dnsmasq está escuchando en esa interfaz y emitiendo direcciones IP en la subred 10.0.0.0/24.
- He configurado el contenedor de enrutamiento lxc para crear 2 interfaces que están conectadas a esos puentes (leth0, leth1). leth0 es un cliente dhcp y leth1 tiene una dirección IP estática de 10.0.0.201.
- Creé otro puente, br-router, que también se conectó a una tercera interfaz en el contenedor de enrutamiento. Este puente tiene una dirección IP estática de 192.168.3.254 en el host y la interfaz en el contenedor de enrutamiento (leth2) tiene una dirección IP estática de 192.168.3.1.
- El contenedor de enrutamiento también ejecuta dnsmasq, escucha en la interfaz leth2 y proporciona direcciones IP en la subred 192.168.3/24 (.3 - .200), por lo que cualquier otro contenedor lxc que incorpore este puente recibirá cualquier dirección IP. en esa subred
- He activado el enmascaramiento en leth0 en el contenedor de enrutamiento.
- He configurado la puerta de enlace predeterminada en el host para que sea 192.168.3.1, de modo que todo el tráfico que se origina dentro del host se enrute a través del contenedor de enrutamiento.
Para fines de prueba, también creé un segundo contenedor lxc, que incluye una interfaz única que lleva br-router al contenedor, y este contenedor aloja una página web en el puerto 8080. A esa interfaz única (teth0) se le asigna una dirección IP a través de dhcp. (en este caso, 192.168.3.9)
Con esta configuración, puedo acceder a Internet con éxito desde el host, el contenedor de enrutamiento y el contenedor de prueba. Además, tanto desde el contenedor de enrutamiento como desde el contenedor de prueba, puedo enrollarhttp://192.168.3.9:8080y recuperar con éxito la página web.
Entonces se cumplen los requisitos 2 y 3. Sin embargo, cuando conecto un cliente a este sistema, aunque se me proporciona una dirección IP en la subred 10.0.0.0/24 (a través de dnsmasq ejecutándose en br-wlan0), no tengo conexión a Internet (me doy cuenta de que no la tendría sin algunos cambios de ruta o algo así, por eso estoy aquí). También intenté reenviar algunos puertos usando firewalld en el contenedor de enrutamiento en leth1 desde el puerto 80 al 192.168.3.9:8080, con la esperanza de poder servir la página web desde el contenedor de prueba a un cliente conectado usandohttp://10.0.0.201- Sin embargo, no hubo tanta suerte. (Dicho esto, este intento de reenvío de puerto SÍ me permite acceder al sitio web a través de la dirección 201 del host)
Estoy seguro de que hay una combinación de cambios de enrutamiento, reglas de tabla de IP y reglas de reenvío de puertos que harían que todo esto funcione bien, pero después de unos días de experimentación no puedo ni por mi vida resolverlo. Todavía soy bastante novato en lo que respecta a todo esto de la creación de redes, así que espero que alguien pueda ayudarme. Con suerte, he pintado una imagen bastante decente de la configuración actual.
¡Gracias!