differenza di bilanciamento del carico tra DNS e IP: inoltro e reindirizzamento


9

Mi sono imbattuto in una situazione che non riesco a capire. Abbiamo un firewall Fortigate che abbiamo abilitato per eseguire il bilanciamento del carico tra due server Web Apache back-end. Un nome DNS viene quindi associato all'IP virtuale su Load Balancer.

Come previsto, quando si accede al nome DNS / URL (ad es. Www.something.com), Load Balancer serve una pagina da uno dei server Web Apache back-end. L'URL nel browser rimane www.something.com . Da quanto ho capito, Load Balancer in questo caso sta semplicemente inoltrando i pacchetti tra il browser e Apache rimanendo sempre nel percorso.

Tuttavia, se cerco l' indirizzo IP su cui è mappato il DNS, allora il bilanciamento del carico restituisce un HTTP 302 trovato, con l'intestazione Posizione impostata sull'URL DNS di uno degli Apache. L'URL nel browser cambia nel DNS del server back-end.

Perché Load Balancer reindirizza quando viene eseguita una query tramite IP, ma inoltra correttamente il percorso quando viene eseguita una query tramite nome DNS.

Risposte:


10

Non ho usato un Fortigate FW per il bilanciamento del carico, quindi risponderò ad alcune delle domande più in generale.

Innanzitutto, per quanto riguarda il tuo problema, il bilanciamento del carico sta facendo esattamente come dovrebbe e penso che i tuoi server potrebbero non essere configurati correttamente per rispondere a una richiesta sul loro indirizzo IP. Se si dovesse provare questo dietro il bilanciamento del carico, è possibile impostare il nome di dominio nel file hosts di un client locale, dietro il firewall con il server e accedervi sia con il nome di dominio che con l'IP interno. Probabilmente otterrai lo stesso risultato che stai vedendo ora.

La mia ipotesi è che hai attivato l'hosting virtuale (per supportare più domini su un singolo server) e il "predefinito" non serve le stesse pagine del tuo dominio. In entrambi i casi si sta recuperando una pagina Web dal server. Se hai bisogno di aiuto con la configurazione del tuo server web, potresti provare ServerFault .

In secondo luogo, per entrare un po 'più in dettaglio. Un bilanciamento del carico funziona in genere su L7 per almeno cluster HTTP e HTTPS. Ciò significa che non solo guardano l'indirizzo IP e lo inoltrano, né "reindirizzano" la pagina.

Quando ricevono una richiesta, in realtà analizzano la richiesta e la inoltrano a un server dopo l'elaborazione della richiesta. Ci sono molte cose che possono fare a questo punto, come riscrivere le intestazioni in entrambe le direzioni, aggiungere potenzialmente cookie (per la persistenza) nei dati tornando al client, terminare le sessioni SSL, abbinare in base all'URL, ecc.

Ti consiglio di dedicare un po 'di tempo alla lettura completa dei documenti del fornitore per comprendere meglio come funziona il bilanciamento del carico (con Fortigate puoi leggere sia il loro sia il punto Coyote, un'altra società di bilanciamento del carico acquisita da Fortigate). Capire cosa sta facendo ti aiuterà in casi come questo e ti permetterà di sbloccare capacità che non avevi realizzato esistessero.


Il problema era una configurazione sul server web Apache back-end. Il nuovo nome DNS doveva essere aggiunto come alias.
Yusuf,

3

Dopo aver letto il bilanciamento del carico basato su host HTTP nel documento Fortigate Load Balancing , posso vedere come è possibile avere una configurazione atipica di bilanciamento del carico che potrebbe risultare in ciò che descrivi. Tuttavia, senza parte della tua configurazione, non possiamo essere certi che questo sia il tuo caso.

Fortigate FortiOS consente la creazione di un server virtuale collegato ai server reali, ciascuno con una diversa configurazione dell'intestazione host . Se qualsiasi richiesta corrisponde al VIP del tuo server virtuale, le richieste con bilanciamento del carico andranno solo ai server reali che corrispondono a quello host header. La parte più importante che spiega bene i tuoi sintomi è che uno dei server reali può omettere l'intestazione host in modo che corrisponda a qualsiasi intestazione host.

Il server reale senza intestazione host potrebbe essere stato configurato come una sorta di "catch-all" che arriva su un sito che esegue il reindirizzamento.

Utilizzando l'esempio seguente, solo il 1 ° e il 2 ° server gestiscono il traffico corrispondente al tuo nome DNS preferito tramite l'intestazione host, ma il 3 ° server accetta tutto ciò che corrisponde a tutte le altre intestazioni host che include il DNS VIP stesso e invia a un sito che potrebbe effettuare un reindirizzamento .

config firewall vip
 modifica "http-host-ldb"
  imposta il tipo server-load-balance
  set extip 192.0.2.1
  imposta extintf "lan"
  imposta il tipo di server http
  imposta http-host metodo ldb
  imposta extport 80
  configura i realserver
    modifica 1
      imposta http-host "www.example.com"
      impostare ip 192.168.2.1
      impostare la porta 80
      Il prossimo
    modifica 2
      imposta http-host "www.example.com"
      impostare ip 192.168.2.2
      impostare la porta 80
      Il prossimo
    modifica 3
      impostare ip 192.168.2.3
      impostare la porta 80
      Il prossimo
    fine
 fine

Suppongo che il bilanciamento del carico del firewall potrebbe fare il reindirizzamento stesso, ma non possiamo dirlo con le informazioni limitate fornite.


In questa configurazione, viene impostata la corrispondenza basata sul nome. E questo è il problema. Se vai al VIP per indirizzo, non saprà cosa farne. (verranno quindi applicate le normali regole NAT)
Ricky Beam,

Il motivo principale per cui non credevo che questa fosse la risposta è che nessun FW / bilanciamento del carico che conosco restituirà un 302 con la posizione impostata sul nome host / dominio della risorsa interna (almeno senza configurarlo specificatamente per fare quindi, il che non sembra essere il caso basato sulla domanda).
Impara

@RickyBeam, solo i primi a rserver eseguono la corrispondenza del nome host. L'ultimo rserver corrisponderebbe all'indirizzo VIP come host.
generalnetworkerror

@YLearn, sono d'accordo che sarebbe strano; Stavo dicendo che l'server, non l'LB, avrebbe fatto il 302 e avrebbe configurato l'ape per farlo. Non conosco nemmeno LB che lo avrebbe fatto.
generalnetworkerror
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.