Ok, entonces quiero saber cómo hacer redes en contenedores LXC. No solo el tipo de información vaga que obtienes de los otros sitios web, sino una verdadera guía para principiantes para hacer que funcionen. Dado que la mayoría de los ejemplos están básicamente configurados para que las personas prueben, quiero ejecutar un servicio en uno ... como un servidor web por ejemplo.
Estoy ejecutando Ubuntu 12.04 LTS y tengo LXC instalado y puedo hacer, iniciar y detener un contenedor. Mi servidor obviamente tiene una IP pública y me gustaría saber cómo configurar un contenedor para que también pueda tener una IP pública. Como ya parece haber un puente en mi lugar desde mi contenedor actual, parecería que necesito darle a los contenedores un rango de DHCP que sea público para que funcionen o asignar manualmente una dirección IP estática a mi contenedor.
Si quiero asignar estáticamente una IP al contenedor, ¿cómo hago eso? ¿Debo hacer algún cambio en mi configuración de puente en el host? ¿Es realmente mejor hacerlo con la opción MACVLAN?
Cualquier ayuda sería apreciada.
Respuestas:
Mi enfoque supone que su servidor tiene una única NIC, y usted necesita compartir esa NIC entre el host y los invitados LXC. Esto implica usar un puente. El puente posee y gestiona
eth0
. El host ahora configura su propia red enbr0
lugar deeth0
. Los invitados LXC están configurados para conectarse al puente.En el host,
sudo apt-get install bridge-utils
.En el host, reemplácelo
eth0
con un puente:Esto es peligroso. Si se equivoca, podría quedar bloqueado de su servidor. Asegúrese de tener un inicio de sesión local habilitado y que el acceso a la consola local funcione, de modo que pueda revertir este cambio si tiene algún problema.
En
/etc/network/interfaces
:auto eth0
conauto br0
.Reemplazar:
con:
Si tuviera una configuración de red estática, entonces reemplazaría:
con:
No eres más que cambiar
eth0
parabr0
y añadiendo labridge_ports eth0
línea.Reinicia el host. Si estuvieras haciendo esto localmente, luego ejecutar
sudo ifdown eth0
antes de comenzar, ysudo ifup br0
luego también lo haría. Tenga en cuenta que el puente puede tardar un poco en subir, así que espere cinco minutos después del reinicio antes de asumir que todo está perdido.Para mover un contenedor LXC con nombre dado a una IP pública:
/var/lib/lxc/container_name/config
lxc.network.link
br0
/var/lib/lxc/container_name/rootfs/etc/network/interfaces
eth0
Para cambiar el valor predeterminado para los nuevos contenedores LXC, edite
/etc/lxc/default.conf
en el host y cambielxc.network.link
abr0
.Si usted no necesita el puente NAT-LXC proporcionado en absoluto (es decir. Todas sus contenedores utilizarán el nuevo puente en su lugar), a continuación, en la edición de host
/etc/default/lxc
y el cambioUSE_LXC_BRIDGE
a"false"
, y después en la carrera de acogidasudo service lxc restart
.fuente
Robie, muchas gracias por publicar esta respuesta, ¡me he estado tratando de hacer que esto funcione y este ha sido el único método que ha funcionado!
Pensé que debería mencionar algunas cosas que descubrí para ayudar a aclarar las instrucciones para otros administradores.
Mi host tenía varios alias de ip estática asignados a eth0 en el invitado, por ejemplo:
Ahora no queremos configurar br0 de la misma manera, solo queremos una IP sin alias como Robie se indicó anteriormente.
Entonces, digamos que desea que 5.5.5.5 se asigne al contenedor debian8.
Editar
/var/lib/lxc/debian8/etc/network/interfaces
y agregar:Luego emita este comando:
route add default gw <gateway-ip, in my case 5.5.5.1>
Después de eso, reinicie el contenedor y todo finalmente debería funcionar. :)
fuente
Tuve el mismo problema y tengo esta solución (rápida y sucia).
En el servidor:
route add -host 194.99.99.99 gw 10.255.255.100 dev lxdbr0
Además, si es necesario, agregue la ruta a los enrutadores ascendentes.
¡Probablemente, no sea la mejor solución, pero no requiere un gran esfuerzo! Aclamaciones.
fuente