Faire un conteneur LXC Utilisez votre propre adresse IP

Désolé si cette question a déjà été posée. Je n'ai pas trouvé ce réglage:

+---------------------------------------------------------------------------------------------+
|HOST |
| |
| +-------------------------------------------------+ |
| | UBUNTU-VM | |
| | | |
| | +-------------------+ | |
| | |UBUNTU-LXC | | +------------------+ |
| | | 10.0.0.3/24 | 10.0.0.1/24 | |OTHER VM | |
| | | eth0-----lxcbr0----------eth0-----------br0----------eth0 | |
| | | | 192.168.100.2/24| 192.168.100.1/24 |192.168.100.3/24 | |
| | +-------------------+ | +------------------+ |
| +-------------------------------------------------+ |
+---------------------------------------------------------------------------------------------+

Quand je ping 192.168.100.3 avec votre UBUNTU-LXC, L'adresse IP source passe automatiquement à 192.168.100.2 par UBUNTU-VM. On dirait NAT, Pendant que je veux vraiment mon UBUNTU-LXC Parlé avec sa propre adresse IP. Il y a un moyen de le faire ?

Changement: Ces informations peuvent être pertinentes:

j'utilise KVM + libvirt Pour configurer vos machines virtuelles

C'est comme ça que je crée mon interface dans UBUNTU-VM

:

<interface type="bridge">
<mac address="52:54:00:cb:aa:74"></mac>
<source bridge="br0"/>
<model type="e1000"></model>
<address bus="0x00" domain="0x0000" function="0x0" slot="0x09" type="pci"></address>
</interface>
Invité:

Dominique

Confirmation de:

Enfin décidé ça. C'est comme ça. Désolé pour ce très long post, mais j'ai passé beaucoup de temps dessus et pense que certaines personnes peuvent être intéressées par une décision détaillée.

Installation

+---------------------------------------------------------------------------------------------+
|HOST |
| |
| +-------------------------------------------------+ |
| | UBUNTU-VM | |
| | | |
| | +-------------------+ | |
| | |UBUNTU-LXC | | +------------------+ |
| | | 10.0.0.3/24 | 10.0.0.1/24 | |OTHER VM | |
| | | eth0-----lxcbr0----------eth0-----------br0----------eth0 | |
| | | | 192.168.100.2/24| 192.168.100.1/24 |192.168.100.3/24 | |
| | +-------------------+ | +------------------+ |
| +-------------------------------------------------+ |
+---------------------------------------------------------------------------------------------+

1. Suppression NAT sur UBUNTU-VM

La raison pour laquelle mes paquets passent de UBUNTU-VM de

192.168.100.2

En raison de la valeur par défaut

iptables

La règle créée lorsque je lance votre conteneur:

root@UBUNTU-VM# iptables -nL -t nat     
Chain PREROUTING (policy ACCEPT)
target prot opt source destination

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.3.0/24 !10.0.3.0/24

Surtout cette règle indique: "Si un colis du sous-réseau

10.0.3.0/24

Et la destination est sur un autre sous-réseau, modifiez l'adresse IP source. ". Par conséquent, si je supprime cette règle, je peux effectuer une demande d'écho de l'extérieur à l'aide de l'adresse IP de mon conteneur. Supprimons cette règle:

root@UBUNTU-VM# iptables -D POSTROUTING 1 -t nat

Maintenant si je ping

192.168.100.1

De mon conteneur LXC (

10.0.3.233

) C'est ce qui se passe:

root@HOST# tcpdump -i br0 -n
12:51:56.174009 IP 10.0.3.233 > 192.168.100.1: ICMP echo request, id 498, seq 1, length 64
12:51:56.174072 ARP, Request who-has 10.0.3.233 tell 192.168.100.1, length 28

Les requêtes ICMP viennent de mon adresse IP LXC :) mais

br0

Il semble ne pas répondre.

2. Ajout d'une route par défaut à HOST

root@HOST# ip route add 10.0.0.0/8 via 192.168.100.2

Maintenant la passerelle par défaut pour

10.0.0.0/8

sous-réseau

eth0

À Ubuntu-vm. Essayons de ping:

root@HOST# tcpdump -i br0 -n
14:14:33.885982 IP 10.0.3.233 > 192.168.100.1: ICMP echo request, id 660, seq 14, length 64
14:14:34.884054 ARP, Request who-has 10.0.3.233 tell 192.168.100.1, length 28

Cela ne fonctionne toujours pas. Malheureusement, je n'ai aucune explication à cela. Et pire pourquoi

br0

Faites une demande d'ARP pour une adresse IP, qui n'est même pas dans son sous-réseau? Au moins je m'attendais à une demande ICMP sera ignoré, mais pour répondre comme demande ARP Juste étrange.

3. Réglage libvirt

3.1. Configuration actuelle


br0

Ceci est un pont que j'ai mis en place sur une hôte en utilisant manuellement

netctl

. Dans mon modèle UBUNTU-VM Je l'ai:

<interface type="bridge">
<mac address="52:54:00:cb:aa:74"></mac>
<source bridge="br0"/>
<model type="e1000"></model>
<address bus="0x00" domain="0x0000" function="0x0" slot="0x09" type="pci"></address>
</interface>

Lorsque UBUNTU-VM Créé

kvm

(ou

libvirt

?) Crée un couple veth Et les attache au pont.

root@HOST# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.fe0000000001 no vnet1
vnet2

Pour une raison quelconque, cela ne fonctionne pas (Changement / Les commentaires sont les bienvenus)

La solution a été configurée

routed network

Au lieu de simple

bridged network

.

3.2. Définir un réseau

Créez un modèle XML pour votre réseau:

<network>
<name>vms</name>
<uuid>f3e18be1-41fe-4f34-87b4-f279f4a02254</uuid>
<forward mode="route"></forward>
<bridge delay="0" name="br0" stp="on"></bridge>
<mac address="52:54:00:86:f3:04"></mac>
<ip address="192.168.100.1" netmask="255.255.255.0">
</ip>
<route address="10.0.0.0" gateway="192.168.100.2" prefix="8"></route>
</network>

Faites attention à la section route par défaut. Puis téléchargez-le et courez

virsh # define vms.xml
virsh # net-start vms

3.3. Modifier la machine virtuelle

Maintenant, l'interface devrait ressembler à ceci:

<interface type="network">
<mac address="52:54:00:cb:aa:74"></mac>
<source network="vms"/>
<model type="e1000"></model>
<address bus="0x00" domain="0x0000" function="0x0" slot="0x09" type="pci"></address>
</interface>

Examen final

Après avoir redémarré la machine virtuelle et le conteneur, je peux enfin ping

br0

Utilisant ip Récipient LXC:

root@HOST# tcpdump -i br0 -n
14:24:00.349856 IP 10.0.3.233 > 192.168.100.1: ICMP echo request, id 468, seq 16, length 64
14:24:00.349900 IP 192.168.100.1 > 10.0.3.233: ICMP echo reply, id 468, seq 16, length 64

Réserve

Pourquoi ça ARP Demandes B.

2.

?

Pourquoi mon installation ne fonctionne pas si je ne laisserai pas libvirt Traitement du pont et du routage lui-même? Ma configuration manuelle (Créer un pont avec netctl et ajouter l'itinéraire par défaut en utilisant

ip route add

) est un

très

Il ressemble à ce qui fait libvirt: Pont avec deux interfaces VNET connectées à celle-ci et la route par défaut ... Est-ce que ment libvirt Y a-t-il une sorte de magie noire?

Est-ce que je pourrai accumuler le nombre de conteneurs à l'aide de ce paramètre (Ceci est mon objectif ultime).

Des sources qui ont aidé

http://libvirt.org/formatnetwork.html
Je définirai et ajouterai d'autres liens quand j'ai assez de réputation (Obligatoire 10 ...)

Babette

Confirmation de:

Modifier la description du réseau pour le réseau libvirt, Afin qu'elle n'a pas effectué nat.

De l'hôte de la machine virtuelle

virsh net-list

.

alors

virsh net-edit

Le réseau dans lequel la machine virtuelle vit pour enlever la notation.

Pour répondre aux questions, connectez-vous ou registre