[Megoldva] Proxmox VE 7, NAT + DHCP hogyan?

Sziasztok!

A Hetznernél van egy dedikált szerver 1 db IPv4 címmel (és /64 IPv6 tartománnyal).
Tettem rá Debian 11-et, majd Proxmox VE 7-et.
Mit kellene tennem, hogy a 3 VM-ben futó (2 db Debian 11, 1 db Windows Server 2019) gép kapjon IPv4 címet a belső, 192.168.0.0/24 tartományból?

Bónuszként jó lenne, ha DHCP-n kapnák az IP-címet, amit MAC alapján én tudnék kiosztani, de e nélkül tudnék élni...

Próbáltam a Hetzner- és egyéb honlapok által fellelhető leírásokat. Bridge, Routed módot, de a SystemRescueCD, vagy Debian 11 NetInstall-ról bootolva sem kap a VM IP-címet.

Íme az /etc/network/interfaces eredeti tartatalma:

# cat /etc/network/interfaces
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp5s0
iface enp5s0 inet static
        address x.y.z.125/26
        gateway x.y.z.65
        up route add -net x.y.z.64 netmask 255.255.255.192 gw x.y.z.65 dev enp5s0
# route x.y.z.64/26 via x.y.z.65

iface enp5s0 inet6 static
        address p:q:r:s::2/64
        gateway fe80::1

Az /etc/network/interfaces.d/ üres

A /etc/sysctl.conf tartalmazza a

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

bejegyzéseket.
A VM Network beállításainál próbáltam be- és kikapcsolt tűzfallal is.

tl:dr
Szeretnék Proxmox VE 7 alatt egy VirtualBox-like NAT network-öt, ahol a virtuális gépek látják egymást és az internetet, iptables-el pedig tudok portokat átirányítani a megfelelő gépek megfelelő portjaira.

Ha tudtok ebben segíteni, nagyon megköszönném! :(

Megoldás: https://hup.hu/comment/2715798#comment-2715798
A DHCP szerver végül az isc-dhcp-server lett

Hozzászólások

két dolog kell ehhez a legegyszerűbben: 

- vmbr1 networköt csináld meg, arra kösd rá a vm-eket/konténereket

- tegyél a hostra egy dhcp servert (dhcpd vagy dnsmasq) és kösd rá a vmbr1 -re

nat-olnod ettől függetlenül még kelleni fog, mert a hetznertől egy ip-t kapsz, de a hostról már pingeni fognak a konténerek.

ennél eggyel komolyabb ha teszel rá egy olyan vm-et ami dhcp server, tűzfal, nat, minden lehet:

pfsense, endian firewall.

Értelemszerűen ezt úgy kell felrakni ahogy egy fizikai hálózatban tennéd.

Gábriel Ákos

pfSense-el próbálkoztam, de ugye az sem kapott IP-címet... :)

A vmbr1 konfigjára tudnál példát írni?

Szerk:: pl ezt próbáltam:

auto vmbr0
#private sub network
iface vmbr0 inet static
        address  192.168.0.1/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0

        post-up   echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up   iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o enp5s0 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o enp5s0 -j MASQUERADE

ez jó konfig szerintem.

a pfsense-nek nyilván fix ip-t kell adjál, ő majd ad a többinek dhcp-vel

Önmagában a proxmoxon nincs semmi ami adna neked dhcp-t. A hetzner se fog, ez nem az otthoni lan.

Ha otthoni lan-on van a proxmoxod, összebridgeled a vmbr0-t a lan interfészeddel akkor a helyi dhcp servered ad a konténereidnek is ip-t (nekem itthon így van)

Gábriel Ákos

Most indítottam egy Debian 11 Netinstall-t. A hálózatot nem tudja detektálni, kézi beállítást kér.
IP címnek beírtam: 192.168.0.2 netmask 255.255.225.0. a Telepítés a netes forrásokig végigfut, de azokat nem tudja elérni.
Próbáltam német és magyar szervereket is beállítani, mindre "Hibás archívum tükör" hibaüzenet jön.

Ha jól értettem...

host interfaces fájlba:

auto vmbr0
iface vmbr0 inet static
    address 192.168.100.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0

kliensbe:

auto eth0
iface eth0 inet static
    address 192.168.100.2
    netmask 255.255.255.0
    gateway 192.168.100.1

 

Amúgy a proxmox admin felületén is beállítható

üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -p tcp -m multiport --dports 80,443,8006 -j f2b-proxmox-web-gui
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 192.168.100.2/32 -i eno1 -p tcp -m tcp --dport 465 -j ACCEPT
-A FORWARD -d 192.168.100.2/32 -i eno1 -p tcp -m tcp --dport 25 -j ACCEPT
-A FORWARD -d 192.168.100.2/32 -i eno1 -p tcp -m tcp --dport 993 -j ACCEPT
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 54321 -j DNAT --to-destination 192.168.100.2:54321
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 8443 -j DNAT --to-destination 192.168.100.2:8443
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 192.168.100.2:443
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.100.2:80
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 465 -j DNAT --to-destination 192.168.100.2:465
-A PREROUTING -d publikus_ip/32 -p tcp -m tcp --dport 993 -j DNAT --to-destination 192.168.100.2:993

-A POSTROUTING -o eno1 -j MASQUERADE

-A POSTROUTING -o vmbr0 -j MASQUERADE

üdv: pomm

A 852-es kídlap telepötúsa sikeresen befejezádétt

Szerkesztve: 2021. 12. 17., p – 16:01

Nálam pont így van (Hetzner + Proxmox), és jó úgy, ahogy a fenti configban írtad. Nincs benne semmi mágia, kell egy port/fizikai NIC nélküli bridge, a vm-ek networkjét ebbe teszed, és ennyi. Ha a hoston fut a dhcp szerver, akkor nyilván ezen a bridgen kell figyelnie.

Érdemes egyébként a Hetzner felé néző fizikai NIC-et is egy külön bridge-be tenni. Így ha veszel még tőlük publikus címe(ke)t, akkor a promox guin is kényelmesen állítgathatod hogy adott vm/konténer adott virtuális interfésze hol legyen (WAN/LAN). Egyébként maguk a bridgek is létrehozhatóak a gui-ról.

Szerkesztve: 2021. 12. 17., p – 20:19

DHCP-m nincs, de tessék:

iface enp4s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address x.x.x.230/27
        gateway y.y.y.y
        bridge-ports enp4s0
        bridge-stp off
        bridge-fd 0
        up route add -net x.x.x.224 netmask 255.255.255.224 gw x.x.x.x dev vmbr0
        #add static route to subnet (because the port security blocked arp for neighbour IPs)

auto vmbr1
iface vmbr1 inet static
        address 10.x.x.x/24
        bridge-ports none
        bridge-stp off
        bridge-fd 0

A vmbr0-án értelemszerűen a host saját public IP-je van, de ugyanezen a bridgen van egy vm, szintén public címmel (ezeket ugye külön lehet rendelni/venni a Hetznernél), ott nincs egyéb teendő, a vm-en belül beállítom a megszokott módon az interfészre, és megy.

Ezzel már van fejlemény :)

A Hetzner leírásában találtam (egy szerintem új) megjegyzést, miszerint Proxmox 7-nél meg kell adni az
hwaddress <HW MAC Address>
értéket a vmbr0-hoz.
Egyből kaptram is egy levelet:

Dear Sir or Madam,

We have detected that your server is using different MAC addresses from those allowed by your Robot account.

Please take all necessary measures to avoid this in the future and to solve the issue.
We also request that you send a short response to us. This response should contain information about how this could have happened and what you intend to do about it.
In the event that the following steps are not completed successfully, your server can be locked at any time after 2021-12-29 16:44:12 +0100.

How to proceed:
- Solve the issue
- Please note, in case you have fixed the problem, please wait at least 10 minutes before rechecking: Itt egy link van
- After successfully testing that the issue is resolved, send us a statement by using the following link: Itt is egy link

Please visit our FAQ here, if you are unsure how to proceed:
https://docs.hetzner.com/robot/dedicated-server/faq/error-faq/#mac-errors

Important note:
When replying to us, please leave the abuse ID [AbuseID:9AD316:1B] unchanged in the subject line. Manual replies will only be handled in the event of a lock.
Please note that we do not provide telephone support in our department. If you have any questions, please send them to us by responding to this email.

Kind regards

Network department

Hetzner Online GmbH
Industriestr. 25
91710 Gunzenhausen / Germany
Tel: +49 9831 505-0
Fax: +49 9831 505-3
abuse@hetzner.com
www.hetzner.com

Register Court: Registergericht Ansbach, HRB 6089
CEO: Martin Hetzner, Stephan Konvickova, Günther Müller

For the purposes of this communication, we may save some
of your personal data. For information on our data privacy
policy, please see: www.hetzner.com/datenschutzhinweis> (<IP címem>)
   Allowed MACs:
       x:x:x:x:x:x (ez a HW MAC)
   Unallowed MACs:
       82:9c:7e:f3:40:b4 (ez az egyik VM MAC címe, amit vmbr0-ra kötöttem)
       9e:f5:1b:c2:4e:a0 (ez meg a másiké)

Ennek semmi köze a Proxmoxhoz, pontosabban bármilyen OS-hez köze van. A switchük csak azzal a mac addressel áll szóba, ami a roboton meg van adva, ez mindig is így volt, szóval megnézheted a bridge mac-jét, és felviheted a robotban is, de amúgy kb. mindegy, mindkét megoldás működik.

Ezt egyébként el is felejtettem írni, mert engem nem érint, illetve nem így, mert a szűrés csak primary IP-re vonatkozik, nálam pedig az pl. történelmi okból az egyik vm-é, így annak a mac-je van a robotban rögzítve, a Proxmox vmbr0-án egy külön vásárolt cím van, ezekhez nincs mac szűrés Hetzner oldalon.

Felraktam 2 Debiant 1-1 VM-be a vmbr1-re kötve.
Mindkettőnek kézzel adtam IP címet (192.168.0.2, és 0.3).
Egymást és a 192.168.0.1-et is tudják pingelni és a hostról is pingelhetőek.

De még mindig nincs net egyiken sem...

# cat /etc/network/interfaces
 

auto lo
iface lo inet loopback

iface lo inet6 loopback

iface enp5s0 inet manual

auto vmbr0
iface vmbr0 inet static
        address x.x.x.125/26
        hwaddress y:y:y:y:y:y
        pointopoint x.x.x.65
        gateway x.x.x.65
        bridge_ports enp5s0
        bridge_stp off
        bridge_fd 1
        up route add -net x.x.x.64 netmask 255.255.255.192 gw x.x.x.65 dev vmbr0
# route 142.132.139.64/26 via 142.132.139.65

iface enp5s0 inet6 static
        address z:z:z:z::2/64
        gateway fe80::1
        up sysctl -p

# for a subnet
auto vmbr1
iface vmbr1 inet static
  address 192.168.0.1/24
  bridge_ports none
  bridge_stp off
  bridge_fd 0
  post-up   iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o vmbr1 -j MASQUERADE
  post-down iptables -t nat -D POSTROUTING -s '192.168.0.0/24' -o vmbr1 -j MASQUERADE
Szerkesztve: 2021. 12. 18., szo – 05:32

Szia!

FORWARD -ra szükség van iptables-ben, anélkül nem engedi át.

-A FORWARD -s 192.168.0.0/24 -j ACCEPT
-A FORWARD -d 192.168.0.0/24 -j ACCEPT

valamint a fenti szabályod se jó, mert a "külvilág" felé menő interface-n (L3) kell maszkolni:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o vmbr0 -j MASQUERADE

Fenti konfigban ezt a sort nem értem:

auto vmbr0
....
gateway x.x.x.65
up route add -net x.x.x.64 netmask 255.255.255.192 gw x.x.x.65 dev vmbr0

Itt már beállítottad a route-t a "gateway" opcióval.

Másik,ha egy fizikai interface-t már beleraksz egy "bridge"-be akkor az "L2 mode only" ( slave ) lesz, annak hiába adsz L3 paramétereket, figyelmen kívűl hagyja a rendszer:
 

iface vmbr0 inet static
bridge_ports enp5s0

iface enp5s0 inet6 static
xxx

Ez így eléggé összevisszaság, ehhez tudni kell mi a "BRIDGE, L2, L3 , hálózati OSI rétegek, NAT, routing vs. switching , stb " - ezek hogy vannak implementálva Linux alatt ( iptables ).
 

Segítség:
Debian alatt van egy ilyen csomag: netfilter-persistent
amikor kérdezi, "yes" mentse le a szabályokat:
-> /etc/iptables/rules.v4
-> /etc/iptables/rules.v6
Itt egyszerűbb szerkeszteni az iptables szabályokat, majd ha változtatni kell valamit akkor:

iptables-restore < /etc/iptables/rules.v4
ip6tables-restore < /etc/iptables/rules.v6

parancsot adod ki.
 

Valahogy így nézne ki a megoldás:

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp5s0
iface enp5s0 inet manual

auto brtrunk
iface brtrunk inet static
        address x.x.x.125
        netmask 255.255.255.255
        pointopoint x.x.x.65
        gateway x.x.x.65
        bridge_ports enp5s0

iface brtrunk inet6 static
	address z:z:z:z::2/64
	gateway fe80::1
	bridge_ports enp5s0
		
		
auto vmbr0
        iface vmbr0 inet manaul

auto vmbr1
iface vmbr1 inet static
	address 192.168.0.1/24
	bridge_ports none
	

iptables -t filter -A FORWARD -s 192.168.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.0.0/24 -j ACCEPT

iptables -t nat -A POSTROUTING -o brtrunk -j MASQUERADE

valamint,

/etc/sysctl.conf

net.ipv4.ip_forward = 1

 

Örök hálám üldözzön!

Az nekem is furcsa volt, hogy a vmbr1 sehol sem volt "összekötve" sem az enp5s0-val, sem a vmbr0-val, így mitől menne át a forgalom a külvilág felé/felöl?! (A GUI-ban sem engedte szerkeszteni az interfésztaz összehordott fa'sságaim miatt :D)

A fenti kusza konfigomban átírtam a maszkolást vmbr0-ra, így már van net a VM-ekben.
Most átírom úgy az egészet, ahogy javasoltad.

Megj.: Én az iptables-persistent -et használtam eddig, ami val'szeg ugyan az, mert ugyan azt csinálja, mint a netfilter-persistent.

Futok még egy kört a dnsmasq-al is, hogy a Windowsos VM-ekkel ne kelljen szxpni a kézi beállítással.

Még egyszer köszönöm a belém fektetett munkád és a részletes magyarázatot!