¿Cómo configurar direcciones IP externas para invitados LXC?

18

Estoy explorando las características de LXC en Ubuntu 12.04 y realmente quiero configurar una red como esta:

client1:   192.168.56.101/24
lxc-host:  192.168.56.102/24
guest1     192.168.56.201/24
guest2     192.168.56.202/24
guest3     192.166.56.203/24

Solo quiero una red "plana" donde los invitados tengan acceso completo a la LAN y sean visibles desde los clientes. Estoy acostumbrado a la creación de redes en puente con libvirt / KVM, como se describe aquí: http://libvirt.org/formatdomain.html#elementsNICSBridge

En el anfitrión:

# /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.56.102
    netmask 255.255.255.0
    broadcast 192.168.56.255
    bridge_ports eth1

lxc.conf para el primer invitado:

# /var/lib/lxc/guest1/config:
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
lxc.network.ipv4=192.168.56.201/24

Parece que 192.168.56.201 es invisible para el mundo exterior, que no es lo que quiero. Parece que tengo que hacer una de estas cosas:

1) Configurar manualmente el enrutamiento en el host y el invitado

2) Haga algo hokey ... cree interfaces virtuales en el host con anticipación y configure los invitados para usarlas lxc.network.type=phys. No sé si eso realmente funcionaría.

Estoy enfocado en Ubuntu, pero las respuestas para RHEL / Fedora también serían útiles ...

twblamer
fuente
1
Seguimiento: configuré br0 en modo promiscuo y parece estar haciendo lo que quiero ahora. Supongo que esta es una práctica estándar, pero no estaba cubierta en ninguno de los muchos tutoriales de LXC que leí.
Dejaré
Hice aproximadamente lo mismo (excepto con un poco más de configuración manual): script de netup en cada configuración lxc para agregar veth al puente (en el host), configuración manual de IP en cada contenedor, script / interfaz adicional en cada contenedor para configurar enrutamiento (a través del reenvío de ip4 en el host). Pero, por lo que veo, ambas soluciones significan que el contenedor puede establecer su propia dirección IP para casi cualquier cosa (y también es un poco inconveniente agregar la interfaz principal del host a un puente). Así que también estoy interesado en algún comentario / solución.
HoverHell

Respuestas:

13

Esto es bastante correcto, aunque te falta una línea como esta:

lxc.network.ipv4.gateway = X.X.X.X

Tengo un invitado LXC corriendo en Debian. Primero, configura el puente de host (la manera fácil), en /etc/network/interfaces:

auto wan
iface wan inet static
        address 72.X.X.X
        netmask 255.255.255.0
        gateway 72.X.X.1
        bridge_ports wan_phy    # this line is important.
        bridge_stp off
        bridge_fd 2
        bridge_maxwait 20

En su caso, lo ha llamado br0y yo lo he llamado wan. El puente se puede llamar como quieras. Primero, esto funciona; si falla, investigue con (por ejemplo,)brctl

Luego, su configuración LXC está configurada para unirse a ese puente:

lxc.utsname = FOO
lxc.network.type = veth
lxc.network.link = wan                  # remember, this is what I call my bridge
lxc.network.flags = up
lxc.network.name = v-wan                # optional, I believe
lxc.network.ipv4 = 72.X.X.Y/24          # different IP than the host
lxc.network.ipv4.gateway = 72.X.X.1     # same as on the host

Como señala HoverHell, alguien con root en el contenedor puede cambiar la dirección IP. Sí. Es un puente (también conocido como conmutador Ethernet). Si desea evitar eso, puede usar reglas de firewall en el host; al menos en mi caso, los paquetes deben pasar por las iptables del host.

derobert
fuente
10
Gracias a todos. Es un poco triste, pero acabo de regresar a esto, encontré esto a través de Google y olvidé que era el autor de la pregunta original ...
twblamer
2
@derobert: no estoy seguro de si estaba disponible en ese entonces, pero autotambién es un valor válido lxc.network.ipv4.gatewayy, a mi entender, está predeterminado en la IP del puente al que se conecta la interfaz veth.
0xC0000022L
¿La interfaz del puente requiere su propia IP? Si wan_physe enfrenta a Internet, entonces la IP del puente tendría que ser otra dirección IPv4 pública válida porque debe estar en la misma subred que las otras direcciones IPv4 públicas con las que configuraré mis invitados lxc, ¿verdad? Pero eso parece bastante derrochador. askubuntu.com/a/884293/394569 sugiere que no es estrictamente necesario configurar una dirección de puente.
josch
@josch En ese ejemplo, wan_phy no tiene una IP, sino que está en el puente. Sin embargo, dudo que necesite una IP si no quiere que el "host" tenga una IP externa.
derobert
6

No me he metido completamente en LXC,

pero he configurado varios contenedores con sus propias IP estáticas en LAN que proporcionan servicios de Internet para algunos de mis sitios web ...

Tal vez esto pueda ayudar, en lo que quieres para los tuyos.

Corro múltiples contenedores, así,

EN LA MÁQUINA ANFITRIA edité el archivo del host, agregando cada contenedor y máquina host: vi / etc / hosts

lxc host machine:   192.168.1.100
container1:   192.168.1.101
container2:     192.168.1.102
container3:   192.168.56.102
container4:   192.166.56.103

después de guardar ...

Nuevamente, en la máquina host configuré la red y el puente para:

# /etc/network/interfaces
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0
        **address** 192.168.1.100
        netmask 255.255.255.0
        **network 192.168.1.1**
        **broadcast** 192.168.1.100
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

encima de la red está mi enrutador ip, para lan. La dirección y transmisión (interna) es una máquina host, una IP interna, que luego uso un VHOST para acceso a internet, servidores web, ftp, etc.

PARA CONTENEDORES LXC 1-4 CONFIGURO CONFIGURAR COMO:

LXC CONFIG
lxc.network.type=veth
lxc.network.link=br0
lxc.network.flags=up
lxc.network.hwaddr=00:16:3e:13:48:4e
**lxc.network.ipv4=192.168.1.101**

ahora IP del contenedor 1 = 192.168.1.101

Repito para que los contenedores adicionales tengan su propia ip estática en el lan.

en el contenedor 1-4,

iniciar sesión desde el host:

lxc-console -n CONTAINERNAME,

& configuro cada red de contenedores como estática, eth0 para:

auto eth0
iface eth0 inet static
        address 192.168.1.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.1.101
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

CADA UNO DE LOS CONTENEDORES TIENE PROPIEDAD IP (local) DISPONIBLE EN LA LAN. U PUEDE SSH CADA IP LOCAL INDIVIDUAL, PARA PROBAR UTILIZANDO PUTTY!

Después de eso, estoy bastante seguro de que debe descubrir cómo ejecutarlos a través de Internet después, por ejemplo, vhost al contenedor ip / balanceadores de carga / proxy / etc.

Tal vez esta configuración pueda ayudar de todos modos.

M1-Serverz
fuente
Si configura la IP y la puerta de enlace, etc. en la configuración del contenedor LXC, no hay necesidad de repetir eso dentro del contenedor. En su lugar, establezca la ifaceestrofa en manual(no statico dhcp). up, down, dns-nameserversEtc todavía se puede utilizar en Debian, etc.
0xC0000022L
1

Todavía no he jugado con LXC, pero este artículo debería ayudarlo: configuración de red utilizando puentes ethernet (verifique el Método 2).

Para darle una pista sobre la configuración (supongo que ya ha configurado correctamente br0):

  1. Necesita crear un par de dispositivos veth usando ip link add type veth
  2. El comando anterior ha creado 2 interfaces virtuales: veth0 y veth1
  3. Ahora agregue la interfaz virtual veth0 al puente: brctl addif br0 veth0
  4. en su shell lxc, escriba: ns_exec -nm -- /bin/bash
  5. Ahora tenemos que configurar el otro virtual if en el espacio de nombres de red del shell lxc: ip link set veth1 netns PID_OF_LXC_SHELL
  6. Ahora configurando veth1 en el shell lxc a la dirección IP que desee (por ejemplo, 192.168.56.201) debería estar todo configurado.
Huygens
fuente
¿No has probado esto en absoluto? Probablemente obtendrá la recompensa, pero su respuesta no me ayuda en absoluto y tengo exactamente la misma configuración que OP.
Jonas G. Drange
¿Cómo puedo ayudarte más? ¿Hubo un paso en mi respuesta que no funcionó, o los realizó y no resolvió el problema? No, como dije en mi respuesta, LXC está en mi lista de cosas por hacer, pero aún no he comenzado las pruebas reales.
Huygens