Teilen sich Sites eine Adresse, und warum geht neuer Ausgang über die erste Zeile?

Mehrere Sites können alle auf die erste Zeile der Konsolenliste zeigen und sich über den Hostnamen trennen. Eine Zeile für sich bekommt ein Dienst, der einen Port allein braucht oder als andere Quelle erscheinen muss. Eine neu geöffnete Verbindung ohne gebundene lokale Adresse verlässt die Maschine über die erste Zeile.

Eingehend und ausgehend getrennt betrachten

Mehrere Sites auf einer Maschine zu betreiben ist eine andere Frage als die Zuordnung der Adressen. Diese Notiz behandelt zwei Dinge: auf welcher Listenzeile eine Anfrage ankommt, und über welche Zeile die Maschine hinausgeht, wenn sie selbst eine Verbindung öffnet.

Die Konsole teilt Adressen in Zeilen. Die erste Zeile ist für SSH oder RDP. Jede weitere Zeile ist eine einzeln gekaufte IPv4, kein freier Platz in einem Subnetz. Wie jede Zeile auf die Karte kommt und den Neustart übersteht, steht in jede zusätzliche IPv4 auf die Netzwerkkarte legen. Danach werden die Zeilen den Sites zugeordnet.

Eingehend zählen DNS und die lauschende Adresse. Der Client verbindet sich mit der Zeile, die der A-Eintrag nennt. Ein Programm, das nur auf der ersten Zeile lauscht, beantwortet denselben Port auf keiner anderen Zeile.

Ausgehend zählt, wer die Verbindung geöffnet hat. Nachdem jemand eine bestimmte Zeile verbunden hat, gehen die Antworten dieser Sitzung über diese Zeile hinaus. Eine Verbindung, die die Maschine selbst öffnet — ein Update, ein API-Aufruf, ausgehende Post — verwendet die erste Zeile, die die Standardroute trägt, wenn das Programm keine lokale Adresse wählt.

Eine Site, die über eine Zusatzadresse lädt, zeigt nur, dass eingehender Verkehr und die Antworten dieser Sitzung diese Zeile genutzt haben. Updates oder ausgehende Post sind damit nicht umgezogen.

Mehrere Sites teilen die erste Zeile

Sind alle Sites Websites auf den Ports 80 und 443 und reicht der Hostname zur Trennung, zeigen alle auf die erste Zeile. Ein weiterer Name braucht keine weitere Adresse.

Jeder Name bekommt einen A-Eintrag, jeder Wert ist die erste Zeile. Der Webdienst lauscht auf 0.0.0.0 Port 443 oder nur auf Port 443 der ersten Zeile. Der Hostname wählt Verzeichnis und Zertifikat. Zertifikate folgen dem Namen, nicht der Zeilenzahl. Auf einer gemeinsamen Zeile trennt SNI die Zertifikate auf demselben Port.

server {
    listen 443 ssl;
    server_name a.example;
}
server {
    listen 443 ssl;
    server_name b.example;
}

Keiner der Blöcke legt eine Adresse fest. Beide lauschen auf jeder Adresse dieser Karte und trennen dann über server_name. Aus listen 203.0.113.10:443 ssl wird nur Port 443 der ersten Zeile. Port 443 einer Zusatzadresse betritt diese Blöcke nicht.

IIS trennt genauso über den Hostheader. Binden Sie die IP an die erste Zeile oder an Alle nicht zugewiesen, tragen Sie jeden Namen als Hostnamen ein und lassen Sie Port 443. Eine neue Site ist eine neue Bindung und ein neuer A-Eintrag, keine neue Adresszeile.

Zwei Programme können denselben Port auf derselben Zeile nicht beide allein besitzen. Die zweite Bindung scheitert. Muss eine Arbeitslast diesen Port allein haben, verschieben Sie eine davon auf eine andere Zeile, wie im nächsten Abschnitt.

Eine Site bekommt eine Zeile

Trennen Sie nach Zeile in den folgenden Fällen. Maßstab sind Port und Quelladresse, nicht die bloße Zahl der Sites.

Zwei Prozesse brauchen denselben Port und lassen sich nicht über den Hostnamen trennen. Zwei Listener, die beide Port 25 oder denselben eigenen Port allein brauchen, sind der übliche Fall. Auf einer Zeile gibt es für diesen Port nur einen Listener. Der zweite Prozess kommt auf die nächste Zeile.

Ein Dienst, dessen A-Eintrag eine eigene Adresse sein muss, verschieden von den anderen Sites, zeigt diesen Namen auf eine andere Zeile der Liste. Der Prozess lauscht auf dieser Zeile oder auf 0.0.0.0, damit die Zeile enthalten ist.

Ausgehende Post, ein Rückruf oder ein API-Aufruf soll als eine gewählte Zeile erscheinen, nicht als die erste. Diese Zeile muss schon auf der Karte stehen, und das Programm muss seine lokale Adresse darauf binden. Nur den A-Eintrag zu ändern, ändert die Quelle einer Verbindung nicht, die das Programm selbst öffnet.

server {
    listen 203.0.113.10:443 ssl;
    server_name a.example;
}
server {
    listen 203.0.113.21:443 ssl;
    server_name b.example;
}

203.0.113.10 und 203.0.113.21 sind Dokumentationsadressen. Ersetzen Sie sie durch zwei Zeilen der Liste. Der erste Block nimmt nur die erste Zeile, der zweite nur die Zusatzzeile. Beide Zeilen müssen als /32 auf der Karte stehen. Der A-Eintrag von b.example ist 203.0.113.21, nicht die erste Zeile.

Ein Programm auf 0.0.0.0 beantwortet auch später hinzugefügte Zeilen. Soll eine Site nur auf einer Zeile erscheinen, schreiben Sie diese Zeile in listen und lassen Sie 0.0.0.0 weg. Umgekehrt beantwortet ein Programm, das nur an die erste Zeile gebunden ist, eine später hinzugefügte Zeile nicht.

Geht die Adresse an eine virtuelle Maschine, existiert die Zeile nur auf der Gast-Karte. Konfigurieren Sie sie nicht zusätzlich auf Bridge oder physischem Port des Hosts. Läuft die Site auf dem Host, bleibt die Zeile auf der Schnittstelle, die die erste Adresse bereits trägt.

Mit dieser Tabelle die Anzahl festlegen

Die enthaltene erste Zeile zählt als eine zuweisbare Adresse. Jede weitere Adresse, die allein belegt werden muss, ist eine zusätzliche IPv4. Namen, die die erste Zeile teilen, erhöhen die Anzahl nicht.

Was geschehen sollWohin die Adressen kommenZusatzkäufe
Mehrere Websites auf 80/443, getrennt über den NamenJeder A-Eintrag zeigt auf die erste Zeile0
Vier Websites, jede mit eigenem A-Eintrag und eigener ZeileDie erste Zeile für eine, je eine Zeile für die übrigen3
Websites teilen die erste Zeile, zwei weitere Dienste brauchen eigene AdressenWebsites bleiben auf der ersten Zeile, jeder Dienst eine Zeile2
Zwei Prozesse auf demselben Port, nicht über den Namen trennbarJeder lauscht auf einer eigenen ZeileMindestens 1

Vier Websites, die sich eine Adresse teilen können, brauchen null Zusatzadressen. Vier Websites, die je eine Zeile brauchen, brauchen drei Zusatzadressen. Zusammen mit der enthaltenen Adresse hat die Liste vier Zeilen. Kaufen Sie nicht „etwa ein /29“, weil es vier Sites sind. Ein /29 ist die Schreibweise für einen Block aus acht Adressen. Adressen werden hier nicht als Block verkauft, und es gibt keine Netz- oder Broadcast-Adresse zum Eintragen.

Jede Zusatzadresse kostet $1.6 im Monat, höchstens 255 weitere, zusammen mit der enthaltenen Adresse höchstens 256. Fünf Zusatzadressen sind $8.0 im Monat. Zählen Sie das zur Monatsmiete und multiplizieren Sie mit den Monaten der Laufzeit. Monatlich mal 1, vierteljährlich mal 3, halbjährlich mal 6, jährlich mal 12. Keine Laufzeit ist rabattiert.

Die Stufe 128GB kostet $454.8 im Monat, 256GB kostet $612.7. Der Speicher ist DDR4-3200 ECC RDIMM und lässt sich nach der Bestellung nicht erweitern. Der Prozessor ist ein AMD EPYC 7543P, 32 Kerne und 64 Threads, 2,8 bis 3,7 GHz. Standard sind zwei NVMe mit je 1TB, jeweils direkt angebunden, ohne Hardware-RAID, nutzbar ist die Summe, etwa 2TB. Die Bandbreite beginnt bei 250 Mbps ohne Transferlimit. 1 Gbps kostet $245.0 im Monat zusätzlich, 2 Gbps $742.7. Es gibt keine Einrichtungsgebühr. Die Maschine steht in Tokio, Japan. Linux nutzt SSH, Windows RDP. Beide Befehle verwenden nur die erste Zeile.

Tragen Sie die Anzahl aus dieser Tabelle auf der Konfigurationsseite ein. Null heißt: jede gemeinsame Site nutzt die enthaltene Zeile. Ein weiteres Site-Verzeichnis, während Port und Quelladresse gleich bleiben, erhöht die Zusatzanzahl nicht.

Neue Verbindungen verlassen die Maschine über die erste Zeile

Die Standardroute wird bei der Installation zusammen mit der ersten Zeile geschrieben. Später als /32 hinzugefügte Adressen sind unter Linux sekundäre Adressen derselben Schnittstelle. Erzeugt ein Programm einen Socket und wählt keine lokale Adresse, sucht der Kernel die Quelle entlang der Standardroute. Diese Quelle ist die primäre Adresse, die erste Zeile.

Fragen Sie die Routingtabelle auf der Maschine. Das Ziel muss nicht erreicht werden. 192.0.2.1 lässt das System nur zeigen, welche Standardroute es nach außen nehmen würde und welche Quellzeile es wählt.

ip route get 192.0.2.1

src in der Ausgabe soll die erste Zeile der Liste sein. via ist das ursprüngliche Gateway. Ist src eine später hinzugefügte Zeile geworden, wurde die Standardroute geändert, oder die erste Zeile ist nicht mehr die primäre Adresse dieser Schnittstelle. Stellen Sie die Standardroute aus der Installation wieder her und lassen Sie die Zusatzadressen als /32 auf der Schnittstelle.

Eine bereits offene eingehende Sitzung fällt nicht unter diese Regel. Ein Client, der 203.0.113.21 verbunden hat, hat einen Socket mit dieser lokalen Adresse, und die Antworten verwenden diese Quelle. Ein Browser, der eine Site auf der Zusatzadresse öffnet, sieht daher diese Zeile. Gleichzeitig zeigen apt, ein geplanter Auftrag und ein HTTP-Client ohne gebundene Adresse weiter die erste Zeile als src.

Sollen die neuen Verbindungen eines bestimmten Programms über eine Zusatzzeile hinausgehen, binden Sie die lokale Adresse in diesem Programm. Post, ein Reverse-Proxy und API-Clients haben meist eine Einstellung bind oder interface. Tragen Sie die gewählte Zeile dort ein. Der nächste Befehl prüft nur den Weg. Er nimmt an, die Quelle sei bereits die Zusatzzeile, und fragt, ob das Standard-Gateway noch erreichbar ist. Er ändert die Systemvorgabe nicht und ersetzt keine Bindung im Programm.

ip route get 192.0.2.1 from 203.0.113.21

Ersetzen Sie die Adresse nach from durch die zu prüfende Zeile. src ist dann diese Zeile. Ohne from bleibt src die erste Zeile.

Policy-Routing behandelt Pakete, deren Quelle bereits die Zusatzzeile ist. Bindet das Programm diese Zeile nie, greift die Regel nicht, und neue Verbindungen verlassen die Maschine weiter über die erste Zeile. Stimmt nach einer Bindung das Ausgangs-Gateway nicht, schicken Sie diese Quelle in eine eigene Tabelle. Gateway und Gerät übernehmen Sie aus ip route show default. Die Standardroute der Haupttabelle bleibt.

ip rule add from 203.0.113.21 table 121
ip route add default via 203.0.113.1 dev eno1 src 203.0.113.21 table 121

Tabelle 121 trifft nur Pakete, die bereits 203.0.113.21 als Quelle verwenden. Andere Programme bleiben auf der Haupttabelle und gehen über die erste Zeile hinaus. Schreiben Sie beide Zeilen in die Startkonfiguration. Sonst verschwinden die Regeln beim Neustart, und ein Programm, das die Zusatzzeile bindet, verliert den bisherigen Ausgang. src der Haupt-Standardroute auf eine Zusatzadresse zu setzen, würde jede neue Verbindung der Maschine verschieben, einschließlich der Systemupdates. Das unterbleibt.

Unter Windows verlässt eine Zusatzadresse mit Hostmaske und SkipAsSource auf true neue Verbindungen ebenfalls über die erste Zeile. Muss ein Programm von dieser Zeile ausgehen, setzen Sie die lokale Adresse im Programm, oder setzen Sie SkipAsSource für diese Adresse auf false und prüfen Sie src erneut. Fügen Sie auf dem Adapter kein zweites Standard-Gateway hinzu.

Post, DNS und Zertifikate getrennt prüfen

Bei Post vermischen sich die beiden Wege am leichtesten. Ein MX-Eintrag oder der A-Eintrag des Postnamens kann auf eine Zusatzzeile zeigen, und der Empfangsprozess kann dort lauschen, sodass eingehende Post auf dieser Zeile landet. Eine neue Zustellung, die die Maschine selbst öffnet, zeigt weiter die erste Zeile als Quelle, wenn das Postprogramm keine lokale Adresse gebunden hat.

Die in SPF veröffentlichte Adresse muss die Quelle sein, die Empfänger tatsächlich sehen. Nutzt eingehende Post eine Zusatzzeile und verlässt ausgehende Post weiter die erste, listet SPF die erste Zeile. Ist ausgehende Post bereits an die Zusatzzeile gebunden, listet SPF diese Zeile. Veröffentlichen Sie kein ganzes /29.

Prüfen Sie in dieser Reihenfolge.

  1. 01 Die Zeilenzahl ist 1 plus die gekauften Zusatzadressen. Jede Zeile steht nach dem Neustart noch auf der Karte.
  2. 02 Der A-Eintrag jedes Namens zeigt auf die Zeile, auf der er landen soll. Namen, die sich eine Adresse teilen, zeigen alle auf die erste Zeile.
  3. 03 Die lauschende Adresse deckt diesen A-Eintrag. Ein Programm, das nur an die erste Zeile gebunden ist, beantwortet die anderen nicht.
  4. 04 Öffnen Sie von außen den Dienstport dieses Namens und prüfen Sie, dass die Anfrage auf der erwarteten Zeile ankommt.
  5. 05 Führen Sie auf der Maschine ip route get 192.0.2.1 aus und prüfen Sie, dass eine ungebundene neue Verbindung die erste Zeile als src hat. Ein Programm, das eine andere Quelle braucht, bindet diese Zeile selbst.
  6. 06 SSH oder RDP verwendet weiter die erste Zeile. Verlagern Sie die Verwaltung nicht so, dass sie nur auf einer Zusatzadresse lauscht, sonst passt der Befehl in der Konsole nicht mehr.

Zertifikate folgen dem Hostnamen. Auf einer gemeinsamen Zeile wählt SNI das Zertifikat auf einem Port. Auf getrennten Zeilen unterscheidet sich die lauschende Adresse, das Zertifikat wird weiter über den beim Besuch verwendeten Namen gewählt. Eine Adresse zu verschieben verlangt kein Zertifikat, dessen Name die Adresse selbst ist.

Die Firewall lässt Ports zu. Eine Adresse kann auf der Karte stehen und der A-Eintrag kann darauf zeigen, während ein geschlossener Port weiter in ein Timeout läuft. Schließen Sie die sechs Prüfungen ab, dann sehen Sie die Firewall an. Stimmen alle sechs, teilen Sites die erste Zeile über den Namen oder belegen je eine Zeile der Liste, und ungebundener Ausgang verlässt die Maschine weiter über die erste Zeile.

Erst die Aufteilung festlegen, dann die Anzahl kaufen

ab $454.8 / Monat