Puncte:0

Atribuirea automată a unui IPv4 public fiecărui VM KVM care este creat?

drapel ug

Mă întreb cum aș continua despre atribuirea unui ipv4 public fiecărui VM care este creat.

Înființat : Server gazdă cu 3 IP-uri pe CentOS8 folosind libvirt și kvm pentru a virtualiza Bridge br0 folosind eth0 ca interfață.

După o mulțime de încercări și erori, am reușit să o fac manual, folosind o punte și atribuind adresa IP interfeței fișierului de rețea a sistemului de operare invitat.

Deși mi-aș dori ca acest lucru să fie automat, având în vedere că, dacă reinstalez sistemul de operare acum, ar reveni la a nu avea adresa IP și id-ul trebuie să se conecteze la Guest și să editeze manual adresa ipv4 din fișierele de rețea de fiecare dată. Cum pot evita asta?

Scop: fiecare IPv4 este blocat la o mașină virtuală și va rămâne indiferent dacă sistemul de operare este reinstalat.

Obiectiv opțional: dacă orice IPv4 de la sistemul de operare gazdă nu este utilizat, ar trebui să fie atribuit următorului VM creat.

Trebuie să îmi codez propriul software pentru a face acest lucru de fiecare dată sau există o modalitate mai simplă?

Puncte:0
drapel za

Pentru asta este DHCP.

Puteți alege liber adresele lor MAC, nu? Configurați un server DHCP pe sistem în același segment ethernet (posibil, virtual) ca și VM-urile și legați-vă IP-urile la anumite MAC-uri.

De asemenea, va trebui să distribuiți unele rute (utilizați opțiunile DHCP 121 și 249). Mașina cu server DHCP în sine nu trebuie să aibă IP public sau IP în aceeași rețea ca toți clienții; comunicarea cu serverul DHCP are loc atunci când oricum nu există încă adrese configurate pe client.

Dacă utilizați ISC DHCP, trebuie să faceți ceva de genul următor. Presupun că mașina dvs. gazdă este routerul și caseta NAT pentru VM și va găzdui și serverul dvs. DHCP. Dacă doriți să faceți altfel, vor fi necesare mici ajustări:

  • definiți opțiunile 121 și 249 undeva în partea de sus a dhcpd.conf:
opțiunea rfc3442-classless-static-routes cod 121 = matrice de întreg 8;
opțiunea ms-classless-static-routes cod 249 = matrice de întreg 8;

probabil, versiunile noi nu au nevoie de asta, dar ale mele au nevoie.

  • creeaza o rețea partajată blocați, puneți subrețeaua privată dinamică și adresele publice ca „subrețele” cu măști 32:
routere opționale 192.168.210.1;
opțiune domain-name-server 8.8.8.8, 8.8.4.4;

rețea partajată libvirt-vm-net {
    subnet 192.168.210.0 netmask 255.255.255.0 {
        gama 192.168.210.2 192.168.210.254;
    }

    subrețea 192.0.2.1 mască de rețea 255.255.255.255 {
        opțiunea rfc3442-classless-static-routes 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;        
        opțiunea ms-classless-static-routes 32, 192,168,210,1, 0,0,0,0, 0, 192,168,210,1;        
    }

    ...
}

Presupun că rețeaua dvs. „privată” pentru mașinile din spatele NAT va fi 192.168.210.0/24 și gazda va fi .1 în acea rețea (alocată unui pod). Setarea rutelor statice fără clasă (opțiunile 121 și 249) va adăuga următoarele rute:

ip route add 192.168.210.1 dev eth0
IP route add default prin 192.168.210.1

care sunt necesare pentru ca totul să funcționeze, în ciuda faptului că nu există nicio subrețea care să conțină 192.0.2.1/32 și 192.168.210.1; mai bine încercați o astfel de configurare în mediul de laborator dacă nu sunteți sigur cum funcționează această rutare

  • creați definiții de gazdă cu adresele MAC dorite legate de adresele IP statice:
gazdă public-server-1 { hardware ethernet 00:11:22:33:44:55; cu adresă fixă ​​192.0.2.1; }
...
  • adăugați intrări vecine statice ("ARP") pentru acele MAC-uri în /etc/ethers (pe gazdă):
00:11:22:33:44:55 192.0.2.1
...
  • adăugați rute statice către acele adrese prin interfața bridge corespunzătoare; Nu știu cum să fac asta folosind configurația standard de rețea a distribuției sistemului de operare, dar modul generic Linux este astfel:
ip route add 192.0.2.1 dev br0
...

Apoi asigurați-vă că alocați acele MAC-uri mașinilor dvs. virtuale importante în configurațiile libvirt. Alte VM (ale căror MAC-uri nu sunt legate) își vor primi adresele din intervalul configurat ca de obicei.

De fapt, am implementat și testat această setare în configurații și mai „complexe” (DHCP, gazdă și router toate erau sisteme distincte), de asemenea, nu folosesc libvirt și gazda mea este PVE. Chiar și pornirea PXE funcționează perfect atât pentru mașinile „normale” de subrețea (cum ar fi 192.168.210.0 în exemplu), cât și pentru mașinile „IP public” (cum ar fi 192.0.2.1).

Pentru a permite tuturor mașinilor virtuale să acceseze Internetul, trebuie să utilizați NAT pentru IP-uri private și să nu îl utilizați pentru public; nu este o problema, foloseste regula ca iptables -t nat -A POSTROUTING -o <interfață-fizică-cu-ip-public> -s <gamă-ip-privată> -j MASQUERADE. În acest fel, intervalul dvs. privat va fi tradus la adresa publică a gazdei în sine, dar adresele publice nu vor fi traduse, ci vor fi direcționate așa cum sunt. Din nou, nu este nicio problemă să ai adrese publice și private pe același segment de rețea și să mergi prin aceeași NIC virtuală.

drapel ug
ai vreo sursa despre cum sa faci asta? L-am încercat acum aproape o zi întreagă, dar se pare că nu reușesc să funcționeze.
Nikita Kipriyanov avatar
drapel za
Am construit o astfel de configurație și am actualizat postarea, adăugând descrierea cum să implementez acest lucru
drapel ug
multumesc mult frate
drapel ug
Mică întrebare, este posibil să atribuiți o adresă IP direct cu virt-install?
Nikita Kipriyanov avatar
drapel za
Nu știu. Nu am folosit virt-install (și libvirt în general) de foarte mult timp. De exemplu, au trecut zece ani de când bridge-ul Linux a primit suport nativ pentru VLAN, dar băieții libvirt încă trăiesc în epoca de piatră și nu există suport pentru bridge-ul nativ Linux conștient de vlan pentru a atribui VM-uri diferite vlan-uri. Dar configurația prezentată este independentă de tehnologia de virtualizare și va funcționa corect chiar și cu hardware-ul fizic. Tot ce trebuie să faceți este să atribuiți (sau cel puțin să înregistrați) adrese MAC, nu adrese IP; corespondența este configurată în serverul DHCP și /etc/ethers.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.