Proxmox-Konfiguration: NAT-Regeln und Masquerading

Es kommt vor, dass nur eine IP Adresse zur Verfügung gestellt wird. Sobald eine virtuelle Maschine eingerichtet wird, würde diese keine keine Netzwerkverbindung aufbauen können, würde man nicht folgende Konfiguration durchführen.

Um einen Proxmox-Hypervisor mit einer externen IP so zu konfigurieren, dass vom Internet aus auf mehrere laufende VMs zugegriffen werden kann, müssen NAT (Network Address Translation) Regeln und Masquerading eingerichtet werden. Masquerading erlaubt Netzwerkverkehr aus einem Subnetz durch eine einzige IP-Adresse fließen zu lassen.

Netzwerkkonfiguration mit Netzwerkbrücken (Linux Bridges), NAT-Regeln und Masquerading

Standardmäßig existiert seitens des Hypervisors eine Netzwerkkarte und eine Linux-Bridge. Die Linux-Bridge (vmbr0) verweist auf die Netzwerkkarte und besitzt die IP, über welche der Hypervisor erreicht werden kann.

Damit erfolgreich ein privates Subnetz erstellt werden kann, muss eine neue Linux-Bridge konfiguriert werden. Dazu muss die Datei /etc/network/interfaces mit einem beliebigen konsolenbasierten Texteditor geöffnet werden. Am Ende der Datei kann folgende Konfiguration eingefügt werden:

auto vmbr1
iface vmbr1 inet static
address 192.168.100.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.100.0/24 -o vmbr0 -j MASQUERADE
        post-up /root/dnat.sh
        post-down iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o vmbr0 -j MASQUERADE

Anschließend muss der Networking-Service mithilfe von systemctl restart networking.service neugestartet werden.

Die hinzugefügte Konfiguration erstellt eine neue Linux-Bridge (vmbr1) mit der IP 192.168.100.1 mit dem Subnetz 192.168.100.0/24.

Durch echo 1 > /proc/sys/net/ipv4/ip_forward wird ermöglicht, Pakete weiterzuleiten, die für andere Ziele außer sich selbst bestimmt sind. Dies ist notwendig, um auf andere Maschinen zugreifen zu können. Die Zeile darunter konfiguriert das Masquerading. Im aufgerufenem Skript werden notwendige iptables NAT-Regeln erstellt. Das Skript kann wie folgt aussehen:

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.100.104:22 

Hier wurde als Beispiel ein SSH Zugang konfiguriert. Über 192.168.179.43:2222 kann sich per SSH auf die VM mit der IP 192.168.100.104 geschaltet werden.

Optional: Installation eines DHCP-Servers

Damit die Einrichtung neuer VMs erleichtert wird, kann optional ein DHCP Server installiert werden, welcher nur die vmbr1-Bridge operiert:

apt install dnsmasq -y

vim /etc/dnsmasq.conf

# Beispielkonfiguration:

# interface to listen to
interface=vmbr1
# IP range to handout
dhcp-range=192.168.100.200,192.168.100.210,30d
# set gateway
dhcp-option=vmbr1,3,192.168.100.1
# DNS server
server=1.1.1.1
server=8.8.8.8
# DHCP database location (to save to)
dhcp-leasefile=/var/lib/misc/dnsmasq.leases

# Service aktivieren und starten:
systemctl enable dnsmasq && systemctl start dnsmasq

Abschluss

Um die persitente Konfiguration zu testen, sollte die VM heruntergefahren werden und der Hypervisor neugestartet werden. Anschließend sollte sich nach dem Start der VM ohne weiteres Eingreifen per SSH über den Port 2222 auf die VM zugegriffen werden können.