Multiple Netze und Gateways mit systemd

Vorwort

Ich habe inzwischen mehrere Server, die ich Verwalte und welche über TINC ein Layer 2 Netzwerk haben, das für meine LXC Container genutzt wird. Dadurch konnte ich Nginx auf den Server diverse LXC-Container auf unterschiedlichen Servern als Ziel angeben. Nun möchte ich aber auch Nginx in einem LXC-Container umziehen und die Server via Iptables nur noch Port 80 und 443 an diesen leiten lassen. Das hat sich durch das Default Routing Verhalten des LXC-Containers als schwerer erwiesen als gedacht.

Szenario

Server A

  • Externe IP: 999.888.777.666
  • LXC-Net IP: 10.10.13.3

Server B

  • Externe IP: 555.444.333.222
  • LXC-Net IP: 10.10.14.4

LXC-Container Nginx

  • LXC-Net IPs: 10.10.10.11, 10.10.13.11, 10.10.14.11

Aufbau

Server A und B leiten alle anfragen an ihre externe IP auf Port 80 und 443 mit folgender Iptables Regel weiter:

# Server A
iptables             \
  -I PREROUTING      \
  -d 999.888.777.666 \
  -p tcp             \
  -m tcp             \
  --dport 80         \
  -j DNAT            \
  --to-destination 10.10.13.142
# Server B
iptables             \
  -I PREROUTING      \
  -d 555.444.333.222 \
  -p tcp             \
  -m tcp             \
  --dport 80         \
  -j DNAT            \
  --to-destination 10.10.14.142

Wichtig ist zu beachten, das beide ein anderes Subnetz dafür nutzten. Das wird später nötig, da wir so die Routing Regeln im LXC-Container definieren.

Ausgehend müsst ihr natürlich das MASQUERADE aktivieren.

Im LXC-Container ist wichtig, das wir eine Systemd Version von 235 oder höher brauchen, da sonst die [RoutingPolicyRule] Sektion noch nicht zur Verfügung steht.

Die Netzwerk Konfiguration für Networkd sieht nun so aus:

# /etc/systemd/network/lxc-net.network
[Match]
Name=lxc-net

[Network]
Address=10.10.10.11/24
Gateway=10.10.10.1
Address=10.10.13.11/24
Address=10.10.14.11/24

[Route]
Gateway=10.10.13.3
Table=3

[Route]
Gateway=10.10.14.4
Table=4

[RoutingPolicyRule]
From=10.10.13.0/24
Table=3
Priority=300

[RoutingPolicyRule]
From=10.10.14.0/24
Table=4
Priority=400

Dadurch werden die Packete, welche Nginx von Server A Empfängt, auch wieder über diesen Versendet und nicht ungewollt über die Default Gateway 10.10.10.1 gesendet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.