[Iptables] Localhost:3306 forwarden naar andere host

Pagina: 1
Acties:

  • _JGC_
  • Registratie: Juli 2000
  • Nu online
Op school zit ik met een Tomcat4 server die enorm brak draait. Nu heb ik een tweede machine opgebracht die Tomcat 4.1.8 draait ipv 4.0.4, en die de webroot via NFS koppelt met de andere tomcat server.

Nu is het de bedoeling dat de website troep op de nieuwe tomcat4 server gewoon naadloos moet integreren met de oude apache server waar tomcat aan gekoppeld was. Probleempje: hoe wil je dat naadloos doen als apache, mysql en tomcat allemaal op dezelfde host draait, en niemand ff de moeite heeft genomen om bij de mysql connects even FQDN:3306 op te geven, maar "localhost:3306".

Zoiets is onmogelijk te loadbalancen. Eerste optie: zoek alle JSP files, trek ze door sed en laat alle localhost:3306 door de FQDN:3306 vervangen. Aangezien het maar tijdelijk is, en die mysql server misschien in de toekomst ook ergens anders gaat wonen, dacht ik aan firewalling/routing.

Ik denken: ha, dat gaat hetzelfde als met mn transparent proxy:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

en dan nog wat aanpassen zodat het naar een andere host gaat.
Probleem 1: localhost -> localhost is geen {pre|post}routing
Probleem 2: Redirect kent alleen een poortnummer

Hoe krijg ik nou alle requests van localhost naar localhost:3306 weggestuurd naar oudemysqlserver:3306 ?

Heb de hele avond wat zitten googlen, het enige wat ik tegenkwam was dat ik met OUTPUT zou moeten werken ipv PREROUTING, wat me op zich wel logisch lijkt. Echter alleen maar voorbeelden met die REDIRECT waar poortje 1234 naar poort 8076 wordt geforward op dezelfde host, iets wat ik niet zie zitten in mijn geval.

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 23:59
ff in je kernel aanzetten dat ook localhost door de NAT tabel moet. :)
CONFIG_IP_NF_NAT_LOCAL:
This option enables support for NAT of locally originated connections.
Enable this if you need to use destination NAT on connections originating from local processes on the nat box itself.
Maar goed, ik vind eerlijk gezegd de sed optie ietjes netter, en bovendien scheelt het in de toekomst load/werk.

[ Voor 39% gewijzigd door Jelmer op 21-05-2003 23:08 ]


  • _JGC_
  • Registratie: Juli 2000
  • Nu online
Wat ik zelf nog bij TLDP gevonden heb over squid op remote box:
code:
1
2
3
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp --dport 80
ip rule add fwmark 3 table 2
ip route add default via squid-box dev eth1 table 2


Wat ik in dit zou kunnen aanpassen:
code:
1
2
3
iptables -t mangle -A OUTPUT -i lo -j MARK --set-mark 3 -p tcp --dport 3306
ip rule add fwmark 3 table 2
ip route add default via <MYSQL SERVER> dev eth1 table 2


That should do the trick... mits ik policy routing mee heb gecompileerd... :X

Verwijderd

En anders zou je nog zoiets kunnen doen:
code:
1
2
3
4
for file in $(ls allfiles); do
  cat $file | sed -e "s/localhost\:3306/FQDN\:3306/g" > $file.bla
  mv $file.bla $file
done