Opened 12 years ago

Closed 12 years ago

#129 closed defect (fixed)

Hybrid: geen lvrouted z-vlaggetjes

Reported by: huub Owned by: rick
Priority: major Milestone: WL-9.0-RELEASE
Keywords: Cc:
Resource needed to fix:

Description

Op HybridHuub, hybrid met proxy, geen ileiden-gateway, wordt lvrouted gestart zonder -z vlaggetjes.
De default route staat naar de lokale interface:
HybridHuub# netstat -rn|grep default
default 192.168.3.254 UGS 0 18919 vr0

In rc.conf staat bovendien gateway_enable="yes" en in rc.conf.local staat geen gateway_enable herdefinitie.

Change History (10)

comment:1 by rick, 12 years ago

Op HybridHuub?, hybrid met proxy, geen ileiden-gateway, wordt lvrouted gestart zonder -z vlaggetjes.
De default route staat naar de lokale interface:

HybridHuub?# netstat -rn|grep default
default 192.168.3.254 UGS 0 18919 vr0

Je stipt hier een heel interessante fout in het design aan, waarvoor ik niet 123 een oplossing weet (behalve 2 doosjes weer gebruiken).

De default route is nodig vanwege de normale proxy die erop draait. Echter omdat het ook iLeiden functionaliteit draait (vanwege zijn node functie) zou de default route richting een andere iLeiden proxy moeten wijzen (dit moet idd de -z vlag regelen.

Eigenlijk zou hiervoor iets als source based routing voor gebruikt worden (als van localhost dan naar buiten via interface vrX, anders naar buiten via interface vrY). Ik heb echter geen idee of dit ook (in FreeBSD) kan.

In rc.conf staat bovendien gateway_enable="yes" en in rc.conf.local staat geen gateway_enable herdefinitie.

Dat klopt, als je dit uitzet kan de node namelijk ook niet functioneren, gateway=yes, is nodig om verkeer van de ene interface naar de andere toe te staan. Verkeer naar het internet is voor een normale proxy niet toegestaan (dit is geregeld met firewall regels).

comment:2 by rick, 12 years ago

Ik heb echter geen idee of dit ook (in FreeBSD) kan.

Een truc kan zijn om de applicatie tinyproxy een andere routing table te geven, door gebruik te maken van de support voor meerdere routing tables in FreeBSD:

http://www.mmacleod.ca/blog/2011/06/source-based-routing-with-freebsd-using-multiple-routing-table/

Maar netter is om gebruik te maken van de pf regels om verkeer van lokaal (de tinyproxy) naar buiten (port 80,443) om te routeren via PF regels zoals het voorbeeld:

http://prosauce.org/blog/2010/12/route-based-on-source-ip-address-linux-bsd/

comment:3 by rick, 12 years ago

De -z flag is gefixed in r10570 en r10572

De pf variant gaat niet werken, omdat je hiermee geen routes kan wijzigen voor de lokale processen op de machine zelf. Ik heb experimentele support van multiple routing tables in r10574 gecommit.

Voor het gemak is het het makkelijkste om de traditionele proxies gewoon op een eigen doosje te laten draaien (het is toch een uitstervend ras, nu de iLeiden proxies toenemen). Echter voor de techniek is het multiple source routing table wel een leuk verhaal :-).

Ik ga proberen om tinyproxy hierop de binden en iets slims te bedenken van de initiele default route set, maar ik ben bang dat het geheel er niet transparanter (lees: makkelijker op gaat worden).

comment:4 by huub, 12 years ago

in versie 10605 staan de -z vlaggetjes. Default route nog wel naar lokaal:
HybridHuub# netstat -rn|grep default
default 192.168.3.254 UGS 0 5224 vr0

Op vosko2 (buurnode) zie ik:
CNodeVosko2# traceroute huub
traceroute to hybridhuub.wleiden.net (172.17.16.1), 64 hops max, 40 byte packets

1 cnodehuub.wleiden.net (172.17.16.1) 3.723 ms 3.680 ms 3.243 ms

CNodeVosko2# traceroute www.nu.nl
traceroute to www-nu-nl.gl.sanomaservices.nl (62.69.184.21), 64 hops max, 40 byte packets

1 2pool-172-16-4-120-cnodehuub-cnodevosko2.hybridhuub.wleiden.net (172.16.4.124) 3.573 ms 3.755 ms 3.300 ms
2 2pool-172-16-4-120-cnodehuub-cnodevosko2.hybridhuub.wleiden.net (172.16.4.124) 3.495 ms 3.622 ms 3.318 ms

CNodeVosko2# fetch -o /dev/null http://www.nu.nl
/dev/null 100% of 76 kB 737 kBps

comment:5 by rick, 12 years ago

Owner: changed from nobody to rick
Status: newaccepted

Er zou nu een dhcp-exit-hooks moeten starten na een dhclient actief dite deze default vakkundig om zeep helpt. Lvrouted overschrijft (terecht) geen statische routes. Als je route del default' doet dan zal lvrouted de default route management moeten overnemen.

De hook heeft nog wat extra aandacht nodig

comment:6 by rick, 12 years ago

Resolution: fixed
Status: acceptedclosed

hook werkt nu goed, en de default route wordt goed gezet.

comment:7 by rick, 12 years ago

Resolution: fixed
Status: closedreopened

De pf variant is vreselijk traag en bijna niet te begrijpen, toch maar setfib(2) dan maar.

comment:8 by rick, 12 years ago

Het nieuwe idee:

  1. Maak een tweede schaduw routing table.
  2. Sync de WL routes elke 5 minutes.
  3. Sync de default route via dhclient.
  4. Laat de diensten die gebruik maken van de directe verbinding dnsmasq, tinyproxy,named gebruik maken van de tweede shaduw route tabel

Implementatie:

  1. kernel optie options ROUTETABLES=x
  2. cronjob met sync script.
  3. Script in /etc/dhclient-hooks.
  4. patch /etc/rc.subr en zet _setfib via GenesisFormat

comment:9 by rick, 12 years ago

Lijkt verrassend goed te werken (en is nog een stuk begrijpbaarder ook ;-))

comment:10 by rick, 12 years ago

Resolution: fixed
Status: reopenedclosed
Note: See TracTickets for help on using tickets.