Ik heb een probleem met een loadbalancer die ik hier heb draaien.
Situatie:
1 loadbalancers
2 web/ftp servers
dus 3 servers in totaal.
De loadbalancer is een server uitgerust met Fedora Core 3 waarop gebruik wordt gemaakt van KeepAlived 1.1.11. Dit is een soort schil om IPVS heen. Ik gebruik LVS DR (Direct Routing) als opzet.
RIP = real ip
VIP = virtual ip
Hieronder even een schematisch overzichtje:
Het probleem:
-------------
Een applicatie uploadt bestanden via SFTP (FTP over SSL) naar een server. Dit verkeer zal via de loadbalancer verlopen. Aangezien het verkeer ge-encrypt is, moet er gebruik worden gemaakt van Passive Mode om er voor te zorgen dat er uberhaupt een connectie mogelijk is. De FTP-server (in dit geval ProFTPD) zal anders een connectie proberen op te bouwen met interne ip adressen als men via NAT online zit. Dit is op zich geen probleem. Als er via poort 21 een verbinding wordt gemaakt, kan men zonder problemen ook een data connectie opbouwen met de FTP server en zodoende bestanden overzetten, etc.
Alleen is het zo dat sommige mensen geen correcte connectie kunnen opbouwen via poort 21 aangezien hun firewall dit verkeer niet snapt, aangezien het ge-encrypt is. Deze mensen kunnen dus niet gebruik maken van de SFTP server. Dit is niet acceptabel voor het systeem en het dient voor iedereen beschikbaar te zijn.
Om dit probleem op te lossen dacht ik de oplossing te hebben door de SFTP server ook op poort 2121 te laten luisteren. Rechtstreeks naar een web/ftp server werkt dit naar behoren. Via het VIP niet. Het probleem is dat de control channel wel wordt bereikt via de Loadbalancer en de web/ftp server zet ook een poort open voor de client, maar doet dit namens het VIP waardoor het antwoord van de Client weer naar de loadbalancer wordt gestuurd. Bij poort 21 is dit geen probleem, aangezien de loadbalancer op de hoogte is van het FTP protocol maar dus niet als het via poort 2121 gaat.
Ik heb geloof ik heel Google al afgezocht maar heb tot nog toe geen goede oplossing kunnen vinden.
Ik heb ook nog geprobeerd om poort 2121 te redirecten naar poort 21 maar dan luistert IPVS er niet naar omdat het request vanaf een locale interface afkomt. Hiervoor had ik wel een hack in de kernel gevonden om dit op te lossen maar deze was voor een oude kernel (2.4.26 geloof ik). Ik heb mijn huidige kernel (2.6.11) wel voorzien van de hack (kwam enigszins wel overheen) en uitgeprobeerd maar helaas loste dit mijn probleem niet op. Zag wel via de tcpdump dat iptables de redirect wel goed uitvoerde.
Verder heb ik het bestand /net/ipv4/ipvs/ip_vs_ftp.c ook nog gehackt en daar bij de volgende wijziging doorgevoerd:
veranderd in:
Helaas gaf dit niet het juiste resultaat.
Ik kom er niet meer uit. Wie heeft meer info?
Alvast bedankt!
Situatie:
1 loadbalancers
2 web/ftp servers
dus 3 servers in totaal.
De loadbalancer is een server uitgerust met Fedora Core 3 waarop gebruik wordt gemaakt van KeepAlived 1.1.11. Dit is een soort schil om IPVS heen. Ik gebruik LVS DR (Direct Routing) als opzet.
RIP = real ip
VIP = virtual ip
Hieronder even een schematisch overzichtje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| ==================================================
----------------
| |
| LoadBalancer |
| |
----------------
RIP = 1.1.1.1
VIP = 1.1.1.10
|
|
|
|
-------------------------
| |
| |
| |
| |
------------------ ------------------
| | | |
| Web/ftp server | | Web/ftp server |
| | | |
------------------ ------------------
RIP = 1.1.1.2 RIP = 1.1.1.3
================================================== |
Het probleem:
-------------
Een applicatie uploadt bestanden via SFTP (FTP over SSL) naar een server. Dit verkeer zal via de loadbalancer verlopen. Aangezien het verkeer ge-encrypt is, moet er gebruik worden gemaakt van Passive Mode om er voor te zorgen dat er uberhaupt een connectie mogelijk is. De FTP-server (in dit geval ProFTPD) zal anders een connectie proberen op te bouwen met interne ip adressen als men via NAT online zit. Dit is op zich geen probleem. Als er via poort 21 een verbinding wordt gemaakt, kan men zonder problemen ook een data connectie opbouwen met de FTP server en zodoende bestanden overzetten, etc.
Alleen is het zo dat sommige mensen geen correcte connectie kunnen opbouwen via poort 21 aangezien hun firewall dit verkeer niet snapt, aangezien het ge-encrypt is. Deze mensen kunnen dus niet gebruik maken van de SFTP server. Dit is niet acceptabel voor het systeem en het dient voor iedereen beschikbaar te zijn.
Om dit probleem op te lossen dacht ik de oplossing te hebben door de SFTP server ook op poort 2121 te laten luisteren. Rechtstreeks naar een web/ftp server werkt dit naar behoren. Via het VIP niet. Het probleem is dat de control channel wel wordt bereikt via de Loadbalancer en de web/ftp server zet ook een poort open voor de client, maar doet dit namens het VIP waardoor het antwoord van de Client weer naar de loadbalancer wordt gestuurd. Bij poort 21 is dit geen probleem, aangezien de loadbalancer op de hoogte is van het FTP protocol maar dus niet als het via poort 2121 gaat.
Ik heb geloof ik heel Google al afgezocht maar heb tot nog toe geen goede oplossing kunnen vinden.
Ik heb ook nog geprobeerd om poort 2121 te redirecten naar poort 21 maar dan luistert IPVS er niet naar omdat het request vanaf een locale interface afkomt. Hiervoor had ik wel een hack in de kernel gevonden om dit op te lossen maar deze was voor een oude kernel (2.4.26 geloof ik). Ik heb mijn huidige kernel (2.6.11) wel voorzien van de hack (kwam enigszins wel overheen) en uitgeprobeerd maar helaas loste dit mijn probleem niet op. Zag wel via de tcpdump dat iptables de redirect wel goed uitvoerde.
Verder heb ik het bestand /net/ipv4/ipvs/ip_vs_ftp.c ook nog gehackt en daar bij de volgende wijziging doorgevoerd:
code:
1
| static int ports[IP_VS_APP_MAX_PORTS] = {21, 0}; |
veranderd in:
code:
1
| static int ports[IP_VS_APP_MAX_PORTS] = {21, 2121, 0}; |
Helaas gaf dit niet het juiste resultaat.
Ik kom er niet meer uit. Wie heeft meer info?
Alvast bedankt!