Impostazione di contenitori LXC con bridge con IP statici


15

Sto cercando di installare più contenitori LXC su un host, ognuno con IP statici pubblici propri.

Il mio host esegue l'ultima versione di Ubuntu. Ha una singola interfaccia di rete chiamata eth0. Gli IP statici sono pingabili da Internet e sono chiamati eth0: 210, eth0: 211 ... I numeri dopo i due punti sono il byte meno significativo degli indirizzi. Oltre a queste interfacce, ho installato br0 sull'IP pubblico dell'host. Ci sono anche le interfacce lo, veth2LPP9A e lxcbr0. Lxcbr0 ha l'indirizzo di un IP privato.

L'host / etc / network / interfaces assomiglia a:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

Finora ho usato varie fonti online, tra cui Bridging LXC container per ospitare eth0 in modo che possano avere un IP pubblico per aiutarmi a configurarlo.

Il file di configurazione del contenitore ha:

lxc.network.type = veth
lxc.network.link = br0

Ho rimosso la configurazione statica lxc.network.ipv4 da questo file poiché ha causato problemi. Quando eseguivo lxc-ls --fancy con questa configurazione, vedevo lo stesso IP pubblico due volte nell'output. Inoltre, rovinerebbe la configurazione della sottorete delle interfacce / etc / network / del container.

Parlando del file delle interfacce del contenitore, sembra un po 'come:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

Ho dovuto commentare il gateway e aggiungere il percorso aggiungere comandi a questo file. Altrimenti, l'avvio del contenitore richiederebbe alcuni minuti.

I file / proc / sys / net / bridge / bridge-nf- * sull'host sono tutti impostati su 0. Il valore / proc / sys / net / ipv4 / ip_forward è 1.

Il problema è che, anche se "route -n" del contenitore sembra che dovrebbe, non riesco a eseguire il ping dal contenitore. SSHing a quello che dovrebbe essere l'IP del contenitore, mi collega all'host.

EDIT: la rimozione dell'IP statico del contenitore dall'host mi ha aiutato, ma ora sto ricevendo un nuovo errore. Il tentativo di eseguire il ping del contenitore dall'host genera Redirect HostFrom, New nexthop. I pacchetti passano ripetutamente dal gateway all'host. L'esecuzione di un traceroute dall'host mostra che la prima fermata è al gateway. Quindi tutti gli altri percorsi sono * * *. Ottengo lo stesso problema indipendentemente dal fatto che il contenitore sia online o meno.

Risposte:


17

In realtà si può impostare l'indirizzo e il gateway da dentro l' ospite e configurare il contenitore non toccare l'interfaccia a tutti utilizzando la parola chiave manual.

Metti questo all'interno degli ospiti /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Inoltre, lascialo al file di configurazione del container per configurare l'interfaccia:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

L'ospite si comporterà come se il BIOS avesse già impostato l'interfaccia e la usasse.

Soprattutto esplorare lxc.network.ipv4.gateway.


Grazie! Questo mi ha salvato la vita ... il mio contenitore avrebbe sempre cercato di ottenere un nuovo indirizzo dhcp ... impostandolo su un valore fisso all'interno del contenitore (statico) ha comportato il mancato avvio del contenitore!
Dominik Dorn,

Si noti che questo non funziona bene se l'host viene sospeso e ripreso. L'lxc continua con l'indirizzo IP assegnato ma l'host pensa di non avere più un indirizzo IP. Ho scoperto che è meglio configurare dnsmasq per lxc-net e distribuire lì un indirizzo fisso.
HRJ,

@HRJ - Dovresti includere il "come" nel tuo commento o link al riferimento invece di dire semplicemente "fallo". Questo è un sito tecnico e dovresti dire qualcosa di realmente utilizzabile.
Ian Macintosh,

2
Sembra che il posto giusto per farlo sia in / etc / default / lxc dove puoi impostare il tuo intervallo (vedi LXC_DHCP_RANGE) e in /etc/dnsmasq.d-available/lxc come da dnsmasq docs o manpage
Ian Macintosh


4

Dal momento che si effettua il bridging, è necessario impostare gli indirizzi IP solo nel contenitore e non sull'host. L'host deve avere solo i propri indirizzi IP.


2

L'ho fatto l'altro giorno con Ubuntu 14.04. È semplice. Devi solo modificare il /etc/network/interfacesfile all'interno del tuo contenitore e impostare questo:

auto eth0
iface eth0 inet static
 address $IP
 netmask $NETMASK
 gateway $GW
 dns-nameservers $DNS

Sostituisci ogni variabile con il valore desiderato.

È NON devi fare altro!

PS: nota lo spazio prima di alcune righe. È obbligatorio.


questo ha comportato che il mio container non si avvia più (server Ubuntu 14.04) .. la risposta di sebastianwagner funziona per me.
Dominik Dorn,

2

Il modo migliore che trovo e il più veloce è usare i profili lxc

lxc profile list - Comanda alla lista tutti i profili che hai Quindi

lxc profile copy default minecraft(questo è il nome del tuo nuovo profilo)

Poi lxc profile edit minecraft

Questo verrà fuori

devices:
  eth0:
    ipv4.address: 192.168.1.114/24  - add this line and enter any ip address you like
    name: eth0
    nictype: macvlan - this is my setting
    parent: enp0s25
    type: nic
  root:
    path: /
    pool: lxc_zfs
    type: disk
name: mine
used_by:

quindi salvalo

quindi assegnare il profilo al contenitore LXC in questo modo

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

quindi basta riavviare il contenitore e il nuovo indirizzo IP è impostato su quel contenitore


1

Potrei installare correttamente i miei contenitori lxc dopo aver seguito la risposta di @Enrique Moreno Tent, quindi spiegherò cosa fare in modo più dettagliato nel caso in cui non si sappia come impostare gli altri articoli.

1. Accedi al tuo contenitore LXC tramite lxc-attachcomando

Comando:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Vedi le tue attuali configurazioni con ifconfig

Comando

root@mycontainer:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` `

3. Ottenere indirizzo, maschera di rete e gateway

Vedendo il risultato del ifconfigcomando sopra, vediamo quindi:

L'indirizzo è l'indirizzo che desideri, puoi cambiarlo in 10.0.3.166.

La maschera di rete è lì: 255.255.255.0

Gateway : per il gateway utilizzare l' indirizzo di trasmissione con qui è 10.0.3.255

Come puoi vedere sopra, al momento hai tutte le informazioni necessarie per riempire il tuo ospite (container) /etc/network/interfaces.

4. Ottenere dns-nameserversvalore.

Emettere il comando:

cat /etc/resolv.conf

Ma forse è meglio usare Google DNS, che asre 8.8.8.8e8.8.4.4

5. Modifica /etc/network/interfacesALL'INTERNO DEL CONTENITORE

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8


ifconfigè stato sostituito con ip ale versioni più recenti di debian / ubuntu linuxconfig.org/…
rvazquezglez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.