Verwenden von Nginx zum Maskieren der IP-Adresse ausgehender Verbindungen

Verwenden von Nginx zum Maskieren der IP-Adresse ausgehender Verbindungen

Wir haben die geschäftliche Anforderung, alle ausgehenden Verbindungen von mehreren Verarbeitungsservern über eine einzige IP-Adresse zu leiten.

Unser Setup ist wie folgt:

Wir haben einen Nginx-Server, der als Lastenausgleich für eingehende HTTP-Anfragen fungiert. Außerdem haben wir mehrere Webserver, die sich mit Verarbeitungsservern verbinden, die wiederum eine Verbindung zu den Datenbanken unserer Kunden herstellen.

Client --> Loadbalancer --> Webserver --> Prozessserver --> Datenbank

Client <-- Loadbalancer <-- Webserver <-- Prozessserver <-- Datenbank

Derzeit stellen wir unseren Kunden eine Liste mit IP-Adressen zur Verfügung, die sie zu ihrer Datenbank-Whitelist hinzufügen sollten. Mit zunehmender Skalierung wird diese Whitelist jedoch länger und unsere Kunden müssen ihre Whitelist entsprechend erneut aktualisieren.

Gewünschtes Setup

Um dies zu umgehen, möchten wir alle ausgehenden Verbindungen über einen anderen Nginx-Server leiten, der die IP-Adressen unserer Verarbeitungsserver maskiert. Im Gegenzug hätten wir dann nur noch eine IP-Adresse, die unsere Kunden auf die Whitelist setzen würden.

Client --> Loadbalancer --> Webserver --> Prozessserver --> IP-Maskierung --> Datenbank

Client <-- Loadbalancer <-- Webserver <-- Prozessserver <-- IP-Maskierung <-- Datenbank

Ist dies ausschließlich mit Nginx möglich? Wenn ja, welche Schritte müssten wir unternehmen, um dies zu erreichen?

Antwort1

Eine weitere mögliche Lösung ist die Verwendung von NAT. In diesem Fall ist der Maskierungsserver Ihr Router mit konfigurierter Netzwerkadressübersetzung. In diesem Fall müssen Sie die Kundendatenbank-IP in der node.js-Konfiguration nicht ändern, aber Sie sollten das Netzwerk ändern, möglicherweise die Routing-Konfiguration auf allen Prozessservern und ein Gateway mit konfiguriertem NAT haben.

Antwort2

Was Sie fragen, ist mit nginx ab Version 1.9.0 möglich. Sie haben TCP-Proxy-Unterstützung (nicht HTTP) hinzugefügt. Ab 1.9.13 haben sie auch UDP-Proxying hinzugefügt. Lesen Siehttps://www.nginx.com/resources/admin-guide/tcp-load-balancing/#upstream Undhttps://nginx.ru/en/docs/stream/ngx_stream_proxy_module.html

Der schwierige Teil wäre die Unterscheidung eingehender Verbindungen (IP-Maske nginx), um zu entscheiden, mit welcher Datenbank eine Verbindung hergestellt werden soll. Im HTTP-Proxy können Sie den Hostnamen verwenden. Im TCP-Proxy sollten Sie entweder auf verschiedenen Ports oder verschiedenen IP-Adressen lauschen. nginx.conf:

worker_processes  4;

error_log  /var/log/nginx/error.log;

events { worker_connections  1024; }
stream {
        server {
           listen 3307;
           proxy_pass client2.db.dev:3306;
           proxy_buffer_size 16k;
        }
        server {
           listen 3308;
           proxy_pass client1.db.dev:3306;
           proxy_buffer_size 16k;
        }
}

verwandte Informationen