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ă.