Om weer een single point of failure weg te halen uit ons bedrijfsnetwerk, heb ik een tweede ADSL lijn in gebruik genomen. Door middel van Policy routing laat ik uitgaande connecties willekeurig via eth0 en eth1 tot stand komen.
Uitgaande TCP verbindingen gaan helemaal prima. Uitgaande UDP verbindingen volgens mij ook, al heb ik daar wel problemen mee gezien. Maar deze krijg ik nu niet meer gemaakt, dus dat lijkt opgelost door de policy te strippen naar het minimum.
Ook inkomende TCP verbindingen gaan zonder problemen. Echter inkomende UDP verbindingen werken veel minder goed: deze gaan via de verkeerde interface terug.
De situatie:
Wanneer de roadwarrior (thuis-/buitenwerker) zijn laptop opstart en een VPN verbinding naar kantoor maakt, wordt er een udp "verbinding" tot stand gebracht: Eerst pakketje 1 van laptop naar router, dan een antwoord van router naar laptop. Maar als pakketje 1 via eth0 binnenkomt, wil het antwoord daarop nogal eens via eth1 terug gaan... en dat kan niet.
Zou het kunnen dat bij TCP (stateful) het source IP voor de hele verbinding geldt, en bij UDP bij ieder pakketje opnieuw beoordeeld moet worden wat het source adres is?
Omdat ik eerst nog dacht dat het misschien wel aan de linux router zelf lag, of aan de kernel, ben 'k vervolgens nog even gaan knoeien met een vmware server, waar 'k de volgende situatie heb gebouwd:
Hierbij geldt:
VMW1<->VMW2, VMW2<->VMW3 en VMW2<->VMW4 zijn allen afgescheiden VMWare netwerken
VMW3<->LAN en VMW4<->lan zijn gebridged
Hierbij blijkt het resultaat hetzelfde. Op de VMW1 draait een xinetd met echo server. De sniff resultaten zijn als volgt:
Dus in feite kiest de VMW1 voor een verkeerd source adres voor het retourpakketje.
Een mogelijke oplossing zou zijn al het verkeer voor een bepaalde service maar over 1 poort te routeren, maar dan heb je het oude vertrouwde single point of failure weer terug. Dus da's niet echt een optie.
Een andere oplossing zou zijn: het markeren van het inkomende pakketje mbv iptables [..] -j MARK/CONNMARK, waarbij het antwoordpakketje dezelfde mark zou moeten krijgen. Dan kan je een iproute2 filer plaatsen om het pakketje een bepaalde route op te forceren. Maar dat lukt me niet.
Suggesties? Bij voorbaat dank.
Docu: lartc nano netfilter iproute2
Uitgaande TCP verbindingen gaan helemaal prima. Uitgaande UDP verbindingen volgens mij ook, al heb ik daar wel problemen mee gezien. Maar deze krijg ik nu niet meer gemaakt, dus dat lijkt opgelost door de policy te strippen naar het minimum.
Ook inkomende TCP verbindingen gaan zonder problemen. Echter inkomende UDP verbindingen werken veel minder goed: deze gaan via de verkeerde interface terug.
De situatie:
________
+-------+ /
| | |
+-----------+ ISP 1 +-------
__ | | | /
___/ \_ +------+------+ +-------+ |
_/ \__ | eth0 | /
/ \ | | +-------+ |
| Local network -----+ Linux eth1 | | | | Internet
\_ __/ | +----+ ISP 2 +---|
\__ __/ | | | | \
\___/ +-------------+ +-------+ |
\
+--------+ /--
| | / |
+ LAPTOP +-------------- \________
| |
+--------+
Wanneer de roadwarrior (thuis-/buitenwerker) zijn laptop opstart en een VPN verbinding naar kantoor maakt, wordt er een udp "verbinding" tot stand gebracht: Eerst pakketje 1 van laptop naar router, dan een antwoord van router naar laptop. Maar als pakketje 1 via eth0 binnenkomt, wil het antwoord daarop nogal eens via eth1 terug gaan... en dat kan niet.
Zou het kunnen dat bij TCP (stateful) het source IP voor de hele verbinding geldt, en bij UDP bij ieder pakketje opnieuw beoordeeld moet worden wat het source adres is?
Omdat ik eerst nog dacht dat het misschien wel aan de linux router zelf lag, of aan de kernel, ben 'k vervolgens nog even gaan knoeien met een vmware server, waar 'k de volgende situatie heb gebouwd:
________
+-------+ /
| | |
+-----------+ VMW 3 +-------
__ | | | /
___/ \_ +------+------+ +-------+ |
_/ \__ | eth0 | /
/ \ | | +-------+ |
| VMWare 1 -----+ VMW.2 eth1 | | | | LAN
\_ __/ | +----+ VMW 4 +---|
\__ __/ | | | | \
\___/ +-------------+ +-------+ |
\
+--------+ /--
| | / |
+ LAPTOP +-------------- \________
| |
+--------+
Hierbij geldt:
VMW1<->VMW2, VMW2<->VMW3 en VMW2<->VMW4 zijn allen afgescheiden VMWare netwerken
VMW3<->LAN en VMW4<->lan zijn gebridged
Hierbij blijkt het resultaat hetzelfde. Op de VMW1 draait een xinetd met echo server. De sniff resultaten zijn als volgt:
vmw3:~# tcpdump -i eth1 not port 53 and udp vmw4:~# tcpdump -i eth1 not port 53 and udp laptop:~$ echo dummy|netcat -u 1.1.1.1 echo resultaat vmw3: 18:33:44.281808 IP 192.168.15.140.1398 > 1.1.1.1.7: UDP, length 5 resultaat vmw4: 18:33:22.948172 IP 2.2.2.1.7 > 192.168.15.140.1398: UDP, length 5
Dus in feite kiest de VMW1 voor een verkeerd source adres voor het retourpakketje.
Een mogelijke oplossing zou zijn al het verkeer voor een bepaalde service maar over 1 poort te routeren, maar dan heb je het oude vertrouwde single point of failure weer terug. Dus da's niet echt een optie.
Een andere oplossing zou zijn: het markeren van het inkomende pakketje mbv iptables [..] -j MARK/CONNMARK, waarbij het antwoordpakketje dezelfde mark zou moeten krijgen. Dan kan je een iproute2 filer plaatsen om het pakketje een bepaalde route op te forceren. Maar dat lukt me niet.
Suggesties? Bij voorbaat dank.
Docu: lartc nano netfilter iproute2
[ Voor 4% gewijzigd door Verwijderd op 06-07-2006 16:45 ]