Konfigurowanie zmostkowanych kontenerów LXC ze statycznymi adresami IP


15

Próbuję skonfigurować wiele kontenerów LXC na hoście, każdy z własnymi publicznymi statycznymi adresami IP.

Na moim hoście działa najnowsza wersja Ubuntu. Ma pojedynczy interfejs sieciowy o nazwie eth0. Statyczne adresy IP są pingowane z Internetu i noszą nazwy eth0: 210, eth0: 211 ... Liczby po dwukropku są najmniej znaczącym bajtem adresów. Oprócz tych interfejsów mam konfigurację br0 na publicznym adresie IP hosta. Istnieją również interfejsy lo, veth2LPP9A i lxcbr0. Lxcbr0 ma adres prywatnego adresu IP.

Interfejs host / etc / network / wygląda następująco:

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

Do tej pory korzystałem z różnych źródeł online, w tym z kontenerów Bridging LXC do hostowania eth0, aby mogli mieć publiczny adres IP, który pomoże mi to skonfigurować.

Plik konfiguracyjny kontenera zawiera:

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

Usunąłem z tego pliku statyczną konfigurację lxc.network.ipv4, ponieważ spowodowała problemy. Kiedy uruchomiłem lxc-ls - fantazyjne w tej konfiguracji, zobaczyłem dwa razy ten sam publiczny adres IP na wyjściu. Ponadto bałagan z konfiguracją podsieci / etc / network / interfaces kontenera.

Mówiąc o pliku interfejsów kontenera, wygląda to trochę tak:

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 [...]

Musiałem skomentować bramę i dodać polecenie trasy dodaj do tego pliku. W przeciwnym razie uruchomienie kontenera zajmie kilka minut.

Wszystkie pliki / proc / sys / net / bridge / bridge-nf- * na hoście są ustawione na 0. Wartość / proc / sys / net / ipv4 / ip_forward wynosi 1.

Problem w tym, że chociaż „route -n” kontenera wygląda tak, jak powinno, nie mogę pingować z kontenera. SSHing do adresu IP kontenera łączy mnie z hostem.

EDYCJA: Usunięcie statycznego adresu IP kontenera z hosta pomogło, ale teraz pojawia się nowy błąd. Próba pingowania kontenera z hosta powoduje przekierowanie HostFrom, New nexthop. Pakiety wielokrotnie przechodzą od bramki do hosta. Uruchomienie traceroute z hosta pokazuje, że pierwszy przystanek znajduje się w bramie. Wszystkie pozostałe trasy to * * *. Mam ten sam problem niezależnie od tego, czy kontener jest online, czy nie.

Odpowiedzi:


17

W rzeczywistości można ustawić adres i bramę od wewnątrz do hosta i skonfigurować pojemnik, aby nie dotknąć interfejs w ogóle za pomocą słowa kluczowego manual.

Umieść to wśród gości /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Pozostaw także plik konfiguracyjny kontenera, aby skonfigurować interfejs:

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

Gość będzie zachowywał się tak, jakby BIOS już skonfigurował interfejs i po prostu go używał.

Szczególnie odkrywaj lxc.network.ipv4.gateway.


Dzięki! To uratowało mi życie ... mój kontener zawsze próbował uzyskać nowy adres dhcp ... ustawienie go na stałą wartość w kontenerze (statycznym) powodowało, że kontener nawet się nie uruchamia!
Dominik Dorn,

Pamiętaj, że nie działa to dobrze, jeśli host jest zawieszony i wznowiony. Lxc kontynuuje przydzielanie adresu IP, ale host uważa, że ​​nie ma już adresu IP. Odkryłem, że lepiej jest skonfigurować dnsmasq dla lxc-net i podać tam stały adres.
HRJ,

@HRJ - W komentarzu lub linku do referencji należy umieścić „jak”, a nie tylko „zrób to”. To jest strona techniczna i powinieneś powiedzieć coś naprawdę użytecznego.
Ian Macintosh,

2
Wygląda na to, że właściwym miejscem do tego jest zarówno plik / etc / default / lxc, w którym możesz ustawić swój zakres (patrz LXC_DHCP_RANGE), jak i /etc/dnsmasq.d-available/lxc zgodnie z dokumentami dnsmasq lub manpage
Ian Macintosh


4

Ponieważ jesteś pomostowych, trzeba ustawić adresy IP w pojemniku tylko , a nie na komputerze. Host powinien mieć tylko własny adres (adresy) IP.


2

Właśnie zrobiłem to z Ubuntu 14.04. To jest proste. Musisz tylko edytować /etc/network/interfacesplik w kontenerze i ustawić to:

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

Zastąp każdą zmienną żądaną wartością.

Ty NIE trzeba robić nic innego!

PS: Zwróć uwagę na spację przed niektórymi liniami. Jest to obowiązkowe


Spowodowało to, że mój kontener już się nie uruchamia (serwer Ubuntu 14.04) .. Odpowiedź sebastianwagner działa dla mnie.
Dominik Dorn,

2

Najlepszym sposobem, jaki znajduję i najszybszym, jest użycie profili lxc

lxc profile list - polecenie listy wszystkich profili, które masz Następnie

lxc profile copy default minecraft(to jest nazwa twojego nowego profilu)

Następnie lxc profile edit minecraft

To się pojawi

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:

następnie zapisz to

następnie przypisz profil do swojego kontenera LXC w ten sposób

lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME

następnie ponownie uruchom kontener, a nowy adres IP zostanie ustawiony na ten kontener


1

Mógłbym poprawnie skonfigurować moje pojemniki LXC po podążeniu za odpowiedzią @Enrique Moreno Tent, więc wyjaśnię, co robić bardziej szczegółowo, na wypadek, gdybyś nie wiedział, jak skonfigurować inne przedmioty.

1. Uzyskaj dostęp do kontenera LXC za pomocą lxc-attachpolecenia

Komenda:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. Zobacz swoje obecne konfiguracje za pomocą ifconfig

Komenda

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. Uzyskiwanie adresu, maski sieci i bramy

Widząc wynik ifconfigpowyższego polecenia, widzimy:

Adres to żądany adres, możesz go zmienić na 10.0.3.166.

Maska sieci jest tam: 255.255.255.0

Brama : W przypadku bramy, której używasz adresu rozgłoszeniowego, tutaj jest 10.0.3.255

Jak widać powyżej, obecnie masz wszystkie informacje potrzebne do wypełnienia gościa (kontenera) /etc/network/interfaces.

4. Uzyskiwanie dns-nameserverswartości.

Wydaj polecenie:

cat /etc/resolv.conf

Ale może najlepiej jest używać Google DNS, który docenia 8.8.8.8i8.8.4.4

5. Edycja /etc/network/interfacesWEWNĄTRZ POJEMNIKA

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


ifconfigzostał zastąpiony nowszymiip a wersjami debian / ubuntu linuxconfig.org/…
rvazquezglez
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.