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:

[pastacode lang=“bash“ manual=“%23Server%20A%0Aiptables%20-I%20PREROUTING%20-d%20999.888.777.666%20-p%20tcp%20-m%20tcp%20–dport%2080%20-j%20DNAT%20–to-destination%2010.10.13.142%3A80%0A%0A%23Server%20B%0Aiptables%20-I%20PREROUTING%20-d%20555.444.333.222%20-p%20tcp%20-m%20tcp%20–dport%2080%20-j%20DNAT%20–to-destination%2010.10.14.142%3A80%0A“ message=““ highlight=““ provider=“manual“/]

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:

[pastacode lang=“bash“ manual=“%5BMatch%5D%0AName%3Dlxc-net%0A%0A%5BNetwork%5D%0AAddress%3D10.10.10.11%2F24%0AGateway%3D10.10.10.1%0AAddress%3D10.10.13.11%2F24%0AAddress%3D10.10.14.11%2F24%0A%0A%5BRoute%5D%0AGateway%3D10.10.13.3%0ATable%3D3%0A%0A%5BRoute%5D%0AGateway%3D10.10.14.4%0ATable%3D4%0A%0A%5BRoutingPolicyRule%5D%0AFrom%3D10.10.13.0%2F24%0ATable%3D3%0APriority%3D300%0A%0A%5BRoutingPolicyRule%5D%0AFrom%3D10.10.14.0%2F24%0ATable%3D4%0APriority%3D400%0A“ message=“/etc/systemd/network/lxc-net.network“ highlight=““ provider=“manual“/]

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.