Porównaj ceny domen i usług IT, sprzedawców z całego świata

Wymuś użycie przez LXC własnego adresu IP


Przepraszamy, jeśli to pytanie zostało już zadane. Nie znalazłem, mam takie ustawienie:
+---------------------------------------------------------------------------------------------+
|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 | |
| | +-------------------+ | +------------------+ |
| +-------------------------------------------------+ |
+---------------------------------------------------------------------------------------------+

Kiedy wysyłam ping do 192.168.100.3 z mojego UBUNTU-LXC, oryginalny adres IP jest automatycznie zmieniany na 192.168.100.2 przy użyciu UBUNTU-VM. Jest to podobne do NAT, podczas gdy naprawdę chcę, aby mój UBUNTU-LXC komunikował się z własnym adresem IP. Czy jest na to sposób?
Edycja: te informacje mogą być aktualne:
  • Do konfigurowania maszyn wirtualnych używam KVM + libvirt
  • Tak tworzę interfejs w UBUNTU-VM

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

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wreszcie rozwiązałem to. Oto jak. Przepraszam za ten bardzo długi post, ale straciłem na to dużo czasu i myślę, że niektórzy mogą być zainteresowani szczegółowym rozwiązaniem.

Instalacja
>
+---------------------------------------------------------------------------------------------+
|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. Usuwanie NAT na UBUNTU-VM
>
Powód, dla którego moje pakiety pochodzą z UBUNTU-VM z
         192.168.100.2
ze względu na domyślne
         iptables
reguła, która jest tworzona, gdy uruchamiam mój kontener:
root@UBUNTU-VM# iptables -nL -t nat     
Chain PREROUTING (policy ACCEPT)
target prot opt source destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.3.0/24 !10.0.3.0/24

Zasadniczo ta reguła mówi: „Jeśli pakiet pochodzi z podsieci
         10.0.3.0/24
a miejsce docelowe znajduje się w innej podsieci, zmień źródłowy adres IP. ”Jeśli więc usunę tę regułę, mogę uzyskać echo z zewnątrz, używając adresu IP mojego kontenera. Usuńmy tę regułę:
root@UBUNTU-VM# iptables -D POSTROUTING 1 -t nat

Teraz, jeśli pinguję
         192.168.100.1
z mojego kontenera LXC (
         10.0.3.233
) oto co się dzieje:
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

Żądania ICMP pochodzą z mojego adresu IP LXC :) Jednak
         br0
nie mogę odpowiedzieć.

2. Dodanie domyślnej trasy do HOST
>
root@HOST# ip route add 10.0.0.0/8 via 192.168.100.2

Teraz domyślna brama dla
         10.0.0.0/8
podsieć
         eth0
na UbUNTU-VM. Spróbujmy pingować:
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

Nadal nie działa. Niestety nie mam na to wytłumaczenia. A co gorsza, dlaczego
         br0
wysłać żądanie ARP dla adresu IP, którego nie ma nawet w jego podsieci? Przynajmniej spodziewałem się, że żądanie ICMP zostanie zignorowane, ale odpowiadanie na żądanie ARP jest po prostu dziwne.

3. Konfiguracja libvirt
>

3.1. Bieżąca konfiguracja
>
         br0
to jest most, który ręcznie skonfigurowałem na hoście
         netctl
... W moim szablonie UBUNTU-VM mam to:
<interface type='bridge'>                                                    
<mac address='52:54:00:cb:aa:74'/>
<source bridge='br0'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>

Po utworzeniu UBUNTU-VM
         kvm
(lub
         libvirt
?) tworzy parę veths i mocuje je do mostu.
root@HOST# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.fe0000000001 no vnet1
vnet2

Z jakiegoś powodu to nie działa (mile widziane są zmiany/komentarze)
Rozwiązaniem było ustawienie
         routed network
zamiast po prostu
         bridged network
.

3.2. Zdefiniuj sieć
>
Utwórz szablon XML dla swojej sieci:
<network>                                                       
<name>vms</name>
<uuid>f3e18be1-41fe-4f34-87b4-f279f4a02254</uuid>
<forward mode='route'/>
<bridge name='br0' stp='on' delay='0'/>
<mac address='52:54:00:86:f3:04'/>
<ip address='192.168.100.1' netmask='255.255.255.0'>
</ip>
<route address='10.0.0.0' prefix='8' gateway='192.168.100.2'/>
</network>

Zwróć uwagę na domyślną sekcję trasy. Następnie pobierz go i uruchom
virsh # define vms.xml
virsh # net-start vms


3.3. Edytuj maszynę wirtualną
>
Interfejs powinien teraz wyglądać następująco:
<interface type='network'>                                                   
<mac address='52:54:00:cb:aa:74'/>
<source network='vms'/>
<model type='e1000'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>


Test końcowy
>
Po ponownym uruchomieniu maszyny wirtualnej i kontenera mogę wreszcie pingować
         br0
używając adresu IP kontenera 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


Pozostałe pytania
>
  • Dlaczego ten ARP prosi
               2.         
  • Dlaczego moja konfiguracja nie działa, jeśli nie pozwolę libvirt na samodzielną obsługę mostkowania i routingu Moja konfiguracja ręczna (utworzenie mostu z netctl i dodanie trasy domyślnej z
               ip route add         
    ) jest wysoko podobny do tego, co robi libvirt: most z dwoma połączonymi interfejsami Vnet i domyślną trasą ... czy libvirt robi tutaj czarną magię
  • Czy będę w stanie skalować liczbę kontenerów przy tym ustawieniu (to jest mój ostateczny cel).


Źródła, które pomogły
>
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Zmień opis sieci dla sieci libvirt tak, aby nie działała nat.
Uruchom z hosta maszyny wirtualnej
         virsh net-list
.
następnie
         virsh net-edit
sieć, w której znajduje się maszyna wirtualna, aby usunąć połączenie.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się