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