[Linux]Connecties verdelen over 2 internet verbindingen

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 16-03 20:58
Ik ben op zoek hoe en of er een manier is om te load balancen tussen 2 internet verbindingen (of om concreet te zijn, dat TCP en UDP gelijkmatige gespreid worden over 2 internet verbindingen).

Mijn routing tabel ziet er op dit moment zo uit (de 2 default gateways zijn 2 routers op verschillende internet verbindingen):

code:
1
2
3
4
5
6
7
8
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.228.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet1
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 vmnet8
192.168.24.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
0.0.0.0         192.168.24.1    0.0.0.0         UG    0      0        0 eth1
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth0


Ik vond online enkele tutorials, die nogal afwijken in werkwijze tov elkaar. Ook op GOT vond ik uiteenlopende topics, maar het is mij dus nog niet echt duidelijk hoe het echt moet.

Een korte manier om te load balancen

Daarom probeerde ik dus:

code:
1
2
3
ip route add default equalize scope global \
                        nexthop via 192.168.2.1 dev eth0 weight 1 \
                        nexthop via 192.168.24.1 dev eth1 weight 1


Ik krijg dan als output te zien: "RTNETLINK answers: File exists"

Lange manier van load balancen
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
27
28
29
30
31
32
33
34
#!/bin/bash

P1_NET="192.168.2.0/24" # Netwerk
IF1="eth0" # Telenet via wireless
IP1="192.168.2.153" # IP adres interface
P1="192.168.2.1" # Gateway interface

P2_NET="192.168.24.0/24" # Netwerk
IF2="eth1" # Skynet via wired
IP2="192.168.24.15" # IP adres interface
P2="192.168.24.1" # Gateway interface

ip route add $P1_NET dev $IF1 src $IP1 table Telenet
ip route add default via $P1 table Telenet
ip route add $P2_NET dev $IF2 src $IP2 table Skynet
ip route add default via $P2 table Skynet

ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2

ip route add default via $P1

ip rule add from $IP1 table Telenet
ip rule add from $IP2 table Skynet

#ip route add $P0_NET     dev $IF0 table Telenet
#ip route add $P2_NET     dev $IF2 table Telenet
#ip route add 127.0.0.0/8 dev lo   table Telenet
#ip route add $P0_NET     dev $IF0 table Skynet
#ip route add $P1_NET     dev $IF1 table Skynet
#ip route add 127.0.0.0/8 dev lo   table Skynet                                      

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 \
        nexthop via $P2 dev $IF2 weight 1

In dit geval heb ik wel 2 tables bijgemaakt in "/etc/iproute2/rt_tables"

In dit geval krijg ik enkele keren "RTNETLINK answers: File exists" te zien.


Zo vond ik er nog een aantal. Deze eerste blijkt in elk geval niet te werken. Er wordt altijd langs de eerste gateway gesurft.

Iemand een idee wat ik mis aan deze configuratie en welke methode nu boven de andere te verkiezen is?

[ Voor 16% gewijzigd door Tom_G op 29-06-2007 19:45 ]


  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 16-03 20:58
---Deze post wordt progressief opgebouwd en kan daarom mogelijks nog niet volledig zijn---

Na veel zwoegen en zweten ben ik eindelijk een heel stuk verder geraakt.

Onderstaande is ter informatie voor iedereen die het wil gebruiken :) In principe zouden onderstaande tutorials ook moeten bruikbaar zijn voor >2 internetverbindingen.

Load balancen van 2 PPPoe (ADSL) internet verbindingen

Belangrijke opmerking!!
Ikzelf maak gebruik van Debian 'Ech" 4.0
Echter zit er in één van deze recentere kernels een probleem wanneer er gebruik gemaakt wordt van multipath routing (load balancen over meerdere links dus).
Het was daarom nodig om de kernel te her-compileren met een optie (die ik niet uit het hoofd meer ken op no).
Zie ook http://www.debian-administration.org/articles/377.
Inleiding
Wanneer er gebruik wordt gemaakt van 2 (ADSL PPPoe in mijn geval) internet verbindingen waarbij het wenselijk is dat er ge-load balanced wordt tussen de 2 verbindingen. Hoe de connecties precies verdeeld worden, zal vooral afhangen van de "destination": routes worden namelijk gecached, dus op termijn zullen altijd dezelfde routes gebruikt worden voor dezelfde destinations (bvb het ip adres van een webserver).
Het is echter mogelijk af en toe de routing tabel te "flushen", zodat de verdeling wat meer ad random loopt.
  1. Variabelen definiëren waar oa de naam van de providers en hun interfaces in komen te staan. De naam van de providers is belangrijk voor het opzetten van de verbinding (daartoe wordt het configuratiebestand /etc/ppp/peers/<naam_isp> gebruikt).
  2. Definiër enkele basis regels voor IPtables (bijvoorbeeld, default policy op drop, enkel voor lokale LAN interface alles open zetten)
  3. Zet de internet verbinding op (PPPoe sessie starten)
  4. Hou de ip adressen en gateways van beide verbindingen bij in variabelen (voor 2 internetverbindingen kom je dus uit bij 4 variabelen).
  5. Voeg nu een load balanced default gateway toe.
  6. Uitgebreide IPtables configuratie: instellen van masuerading, eventuele poorten die je wilt openzetten naar de firewall, port forwarding,...
In de praktijk
Hier ga ik concreet uitwerken wat in de punten hierboven kort uitgelegd werd.
  1. Variabelen instellen
    code:
    1
    2
    3
    4
    5
    6
    
    # Definiëren van interfaces en providers
    LAN="eth1"
    WAN1_IF="ppp0"
    WAN1_ISP="Skynet"
    WAN2_IF="ppp1"
    WAN2_ISP="Skynet2"


    Op dit moment heb ik nog maar één internet verbinding (in afwachting van een 2de ADSL abonnement die op een 2de telefoonlijn en dus ook via een 2de modem zal gebruikt worden). In mijn geval is het echter wèl mogelijk om 2 PPPoe sessie op te zetten naar dezelfde provider.
    Merk op dat deze situatie geen prestatieverbetering opleverd: de beperking zit hem nog steeds in het ADSL lijnprofiel dat van toepassing is. Dit dient dus ook louter ter illustratie.

    Tevens heeft het systeem dat als firewal/gateway wordt gebruikt slechts één interface. De modem staat in bridged modus en wordt op het gewone LAN netwerk aangesloten via een switch, evenals de firewall/gateway machine.
  2. Basis regels voor IPtables
    code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
        # Standaard policy instellen op drop voor ingaand, doorgaand en uitgaand verkeer
        iptables -P INPUT DROP
        iptables -P FORWARD DROP
        iptables -P OUTPUT DROP
    
        # Alle verkeer via de loopback interface toelaten
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT
    
        # Alle verkeer via de LAN interface toelaten
        iptables -A INPUT -i $LAN -j ACCEPT
        iptables -A OUTPUT -o $LAN -j ACCEPT
    
        # Alle verkeer van/naar ongeldige connecties blokkeren
        iptables -A INPUT -m state --state INVALID -j DROP
        iptables -A FORWARD -m state --state INVALID -j DROP
        iptables -A OUTPUT -m state --state INVALID -j DROP
  3. Opzetten van PPPoe verbindingen
    code:
    1
    2
    3
    4
    5
    6
    7
    
    # Verbindingen maken
        pon $WAN1_ISP
        echo "Verbinding maken met \"$WAN1_ISP\"..."
        sleep 5 # 5 seconden wachten totdat 2de verbinding wordt opgezet
        pon $WAN2_ISP
        echo "Verbinding maken met \"$WAN2_ISP\"..."
        sleep 5 # 5 seconden wachten vooraleer verder te gaan

    De wachttijd tussen de 2 verbindingen is om ervoor te zorgen dat er geen 2 connecties tegelijkertijd of te snel op elkaar geopend worden. De 2de "sleep" is om zeker te zijn dat de connectie tot stand is gekomen vooraleer er verder wordt gegaan.
  4. IP adressen en gateway adressen voor iedere verbinding in variabelen bijhouden en ter controlle laten echo'en:
    code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
        # IP adressen WAN interfaces en gateway IP adressen ophalen
        # WAN1
        WAN1_IP=`ifconfig $WAN1_IF | grep inet | cut -f2 -d ":" | cut -f1 -d " "`
        WAN1_GW=`route -n | grep UH | grep $WAN1_IF | cut -f1 -d " "`
        # WAN2
        WAN2_IP=`ifconfig $WAN2_IF | grep inet | cut -f2 -d ":" | cut -f1 -d " "`
        WAN2_GW=`route -n | grep UH | grep $WAN2_IF | cut -f1 -d " "`
    
        echo
        echo "$WAN1_ISP ADSL:"
        echo -e "\t WAN1_IP: $WAN1_IP"
        echo -e "\t WAN1_GW: $WAN1_GW"
    
        echo
        echo "$WAN2_ISP ADSL:"
        echo -e "\t WAN2_IP: $WAN2_IP"
        echo -e "\t WAN2_GW: $WAN2_GW"
  5. Een load balanced default route toevoegen
    code:
    1
    2
    3
    4
    
        # Een default gateway toevoegen die aan load balancing doet
        ip route add default equalize scope global \
            nexthop via $WAN1_GW dev $WAN1_IF weight 1 \
            nexthop via $WAN2_GW dev $WAN2_IF weight 1

    De weight waarde bepaald welke verbinding er meer geprefereerd wordt dan de andere. Hier zijn deze gelijk. Hoe hoger de waarde, hoe lager de prioriteit.
  6. Overige IPtables configuratie: NAT (masquerade) uitvoeren op de WAN interfaces, eventueel poorten openzetten, portforwarding instellen,... + extra zaken die moeten gebeuren:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    # Activeer forwarding in de kernel:
        echo "1" > /proc/sys/net/ipv4/ip_forward
    
        # Enkel van toepassing op de WAN interfaces
        # Accepteer alle inkomende verkeer als de connectie zelf geinitialiseerd werd
        iptables -A INPUT -i $WAN1_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A INPUT -i $WAN2_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
    
        # Uitgaand WAN verkeer onbeperkt toestaan
        iptables -A OUTPUT -o $WAN1_IF -j ACCEPT
        iptables -A OUTPUT -o $WAN2_IF -j ACCEPT
    
        # Forwarding tussen interfaces toestaan
        # 1ste wan interface
        iptables -A FORWARD -i $WAN1_IF -o $LAN -j ACCEPT
        iptables -A FORWARD -i $LAN -o $WAN1_IF -j ACCEPT
        # 2de wan interface
        iptables -A FORWARD -i $WAN2_IF -o $LAN -j ACCEPT
        iptables -A FORWARD -i $LAN -o $WAN2_IF -j ACCEPT
    
        # WAN1 en WAN2 interfaces masqueraden (NAT)
        iptables -t nat -A POSTROUTING -o $WAN1_IF -j MASQUERADE
        iptables -t nat -A POSTROUTING -o $WAN2_IF -j MASQUERADE
    
        # Verplicht gebruik maken van Squid proxy server
        # iptables -t nat -A PREROUTING -i $LAN -p tcp -d 192.168.24.3 --dport 80 -j ACCEPT
        iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port 3128
    
        # Inkomende SSH connecties toelaten
        iptables -A INPUT -i $WAN1_IF -p tcp --dport 22 -j ACCEPT
        iptables -A INPUT -i $WAN2_IF -p tcp --dport 22 -j ACCEPT
    
        # Inkomende Bittorrent connecties forwarden naar debian-server
        iptables -t nat -A PREROUTING -i $WAN1_IF -p tcp --dport 6881:6889 -j DNAT --to-destination 192.168.24.3:6881-6889
        iptables -t nat -A PREROUTING -i $WAN2_IF -p tcp --dport 6881:6889 -j DNAT --to-destination 192.168.24.3:6881-6889
    
        # IP adressen updaten bij DynDNS => Wordt ook om de minuut door cronjob uitgevoerd
        # /root/updateDynDNS.sh

    Dit laatste stuk is vooral een persoonlijke voorkeur: in mijn geval zorg ik ervoor dat iedere client gebruik maakt van de Squid proxy server door alle verkeer naar poort 80 te redirecten naar de proxy server.
    Ook is het mogelijk om enkele poorten open te zetten of te forwarden naar een andere machine in het netwerk.

    Als laatste kan het ook handig zijn om hierin een script aan te roepen die uw DynDNS account update.
    In mijn geval worden er in het aangeroepen script 2 updates doorgevoerd: 1 hostname per verbinding (wat dus neerkomt op 2 hostnames voor deze 2 verbindingen).
    Op die manier zijn beide WAN interfaces makkelijk te benaderen vanaf het internet.
Load balancing uittesten
Ik weet niet of er een betere manier bestaat om te zien via welke verbinding uw verkeer gaat, maar ik heb in elk geval bij deze toch een eenvoudig voorbeeld.

Op het internet bestaan er genoeg diensten waarmee je uw eigen ip adres kan gebruiken:
http://dynamic.zoneedit.com/checkip.html
http://www.komar.org/cgi-bin/ip_to_country.pl
http://ipinfo.info/index.php
http://www.edpsciences.org/htbin/ipaddress
http://www.showmyip.com/
http://ip.kify.com/
http://www.showipaddress.com/
http://showip.net/
http://www.nirsoft.net/show_my_ip_address.php
http://www.mediacollege.com/internet/utilities/show-ip.shtml
http://www.bionixwallpaper.com/tools/ip.php
http://web.forret.com/tools/whatsmyip.asp
http://www.iopus.com/myip/
http://www.proxydetect.com/
http://www.whatismyipaddress.com/
http://www.ip-adress.com/
http://myipadress.info/

Wat ik doe: bookmarken in één folder in firefox en ze allemaal in afzonderlijke tabbladen openen. Dan zie je goed het effect van het load balancen. :)

Verkeer voorwaardelijk spreiden over 2 PPPoe (ADSL) internet verbindingen

Inleiding
In bepaalde gevallen is het wenselijk dat iedere internetverbinding zijn bestemming krijgt, enkele voorbeelden hiervan:
  • pc a,b en c moeten van ISP x gebruikmaken, terwijl pc d en e langs ISP y gaan.
  • Regulier HTTP en mailverkeer langs ISP x, grote downloads (Bittorrent, nieuwsgroepen,...) langs ISP y.
  • Het bekijken van website a, b en c via ISP x en website d en e via ISP y. Dit is vooral nuttig voor pagina's die enkel maar bereikbaar zijn via een connectie via deze specifieke ISP (bijvoorbeeld HTTPS pagina voor de configuratie van de mailboxen van uw ISP).
  • Uitaande (SMTP) mailserver a van provider x ook daadwerkelijk via provider x sturen, terwijl mailserver b van provider y via provider y sturen. Dit is dan weer vooral handig voor e-mail verkeer van de provider zelf: vaak zijn SMTP servers enkel toegankelijk vanaf een internetverbinding via deze ISP
  • Web en mailservers via een SDSL verbinding laten gaan, reguliere internet verkeer voor de LAN via ADSL.
  • ...
  • Er zijn oneinding veel combinaties waarin bovenstaande voorbeelden gebruikt kunnen worden. Zo zou het mogelijk zijn om bepaalde pc's altijd via ISP x te sturen en andere via y, maar dat tegelijkertijd website a altijd via ISP x gaat en website b via ISP y, ongeacht vanop welke pc dit gebeurd (overriden van eerste regels).
In de praktijk
Stap 1 t.e.m. 4 blijven dezelfde zoals bij de situatie hierboven, dus:
  1. Variabelen definiëren waar oa de naam van de providers en hun interfaces in komen te staan. De naam van de providers is belangrijk voor het opzetten van de verbinding (daartoe wordt het configuratiebestand /etc/ppp/peers/<naam_isp> gebruikt).
  2. Definiër enkele basis regels voor IPtables (bijvoorbeeld, default policy op drop, enkel voor lokale LAN interface alles open zetten)
  3. Zet de internet verbinding op (PPPoe sessie starten)
  4. Hou de ip adressen en gateways van beide verbindingen bij in variabelen (voor 2 internetverbindingen kom je dus uit bij 4 variabelen).
  5. Custom routing tabellen definiëren + in iedere tabel een route voor die bepaalde ISP toevoegen.
  6. Routing rules aanmaken
  7. Uitgebreide IPtables configuratie: instellen van masuerading, eventuele poorten die je wilt openzetten naar de firewall, port forwarding,...
  8. IPtables vervolg: definiëren welk verkeer er via welke route loopt
De laatste stap blijft ook min of meer dezelfde. De stappen in het blauw aangeduid zijn verschillend. We werken hieronder enkel de gewijzigde stappen t.o.v. load balancing uit.

Custom routing tabellen definiëren + in iedere tabel een route voor die bepaalde ISP toevoegen.
In het bestand /etc/iproute2/rt_tables moet er per ISP een custom routing tabel worden toegevoegd:
code:
1
2
1 WAN1_table
2 WAN2_table


Vervolgens voor iedere ISP een default gateway in iedere tabel toevoegen + laten verifiëren bij het runnen van het script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    ip route add default via $WAN1_GW dev $WAN1_IF table WAN1_table
    ip route add default via $WAN2_GW dev $WAN2_IF table WAN2_table
    
    # Verifieren
    WAN1_table=`ip route show table WAN1_table`
    echo
    echo "Routing tabel \"WAN1_table\":"
    echo -e "\t $WAN1_table"

    WAN2_table=`ip route show table WAN2_table`
    echo
    echo "Routing tabel \"WAN2_table\":"
    echo -e "\t $WAN2_table"


Routing rules aanmaken
code:
1
2
3
    # Routing rules op basis van iptables markeringen die later opgezet worden
    ip rule add fwmark 1 table WAN1_table
    ip rule add fwmark 2 table WAN2_table

Er zijn meerdere mogelijkheden om rules toe te voegen. één ervan die ik prefereer, is door het markeren van paketten.
In deze situatie worden alle paketten die gemarkeerd worden met een "1" via WAN1_table gerouteerd terwijl alle paketten gemarkeerd met een "2" via WAN2_table lopen.

Het markeren van deze paketten gebeurd dan weer voorwaardelijk, en dat door IPTables wat hieronder wordt besproken.

Opmerking: Alle vormen van verkeer waarvoor geen regels gedefiniërd worden (zie verder) worden altijd langs de laatst toegevoegde gateway gerouteerd.
Concreet: alle verkeer die niet expliciet gemarkeerd wordt om via ISP x of y gerouteerd te worden, wordt langs ISP2 gestuurd (ip route add default via $WAN2_GW dev $WAN2_IF table WAN2_table).
Een goede manier van werken zou dus zijn: voor de standaard internetverbinding wordt als laatst een default gateway toegevoegd. Voor alle uitzonderingen hierop worden er voor de andere verbindingen regels aangemaakt.

Een andere manier is door dit louter af te handelen via "ip rule add".

code:
1
$ man ip rule add
...
ip rule - routing policy database management
Rules in the routing policy database control the route selection algo‐
rithm.

Classic routing algorithms used in the Internet make routing decisions
based only on the destination address of packets (and in theory, but
not in practice, on the TOS field).

In some circumstances we want to route packets differently depending
not only on destination addresses, but also on other packet fields:
source address, IP protocol, transport protocol ports or even packet
payload. This task is called ’policy routing’.

To solve this task, the conventional destination based routing table,
ordered according to the longest match rule, is replaced with a ’rout‐
ing policy database’ (or RPDB), which selects routes by executing some
set of rules.
...
IPtables vervolg: definiëren welk verkeer er via welke route loopt
Het stuk hieronder plaats ik in een afzonderlijk script voor betere onderhoudbaarheid (alles hierboven is min of meer statisch).
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ISP kiezen op basis van protocol, source en destination IP,...

# Eventueel bestaande rules in de mangle tabel verwijderen
iptables -t mangle -F
iptables -t mangle -X

# Verkeer voor ISP1
for line in `cat ISP1.txt` ; do
        iptables -t mangle -A PREROUTING -d $line -j MARK --set-mark 1
        iptables -t mangle -A OUTPUT -d $line -j MARK --set-mark 1
done

# Verkeer voor ISP2
for line in `cat ISP2.txt` ; do
        iptables -t mangle -A PREROUTING -d $line -j MARK --set-mark 2
        iptables -t mangle -A OUTPUT -d $line -j MARK --set-mark 2
done

Hier is het mogelijk om 2 tekstbestanden te gebruiken: ISP1.txt en ISP2.txt.
In ieder bestand worden FQDN's (volledige URL, dus hostname + domain) geplaatst, één per regel.
Afhankelijk van wat je wilt laten routeren via welke ISP plaats je daar URL's in.

Bijvoorbeeld: de SMTP server van ISP1 plaats ik in ISP1.txt en de SMTP server van ISP2 plaats ik in ISP2.txt.
Op die manier ben ik er zeker van dat iedere SMTP server ook via die welbepaalde ISP loopt.

PREROUTING is van toepassing op alle gerouteerde verkeer (op de LAN), terwijl OUTPUT geldig is voor de lokale machine (de machine waarop de firewall/gateway dus op draait). Deze regels hoeven uiteraard niet per se dezelfde zijn.

Uiteraard, zoals in de voorbeelden reeds vernoemd kan men hier zover in gaan als men zelf wilt, enkele voorbeelden:

code:
1
iptables -t mangle -A PREROUTING -s 192.168.24.7 -j MARK --set-mark 2

Alle verkeer van pc met het ip 192.168.24.7 via ISP 2 routeren.

code:
1
2
3
4
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 21 -j MARK --set-mark 2

Alle HTTP verkeer langs ISP1, FTP verkeer langs ISP2 (zowel op de firwall/gateway machine als alle andere pc's op het netwerk).

[ Voor 255% gewijzigd door Tom_G op 17-07-2007 15:44 ]


  • jvanhambelgium
  • Registratie: April 2007
  • Laatst online: 16-03 23:10
Tja, doet ie dan dan per-destination loadbalancing ? of per-packet ?
Zo kan je jezelf wel wat problemen op de nek halen (asymmetrische routes etc) en ook niet altijd optimaal.

vb sommige delen van internet zijn door slechte peering Telenet niet van de snelste of doen onnodig veel hops.
Daar kan je met deze setup niet veel aan doen...

BGP ja ;-) maar dat is niet voor de huis/tuin/keuken tweaker...

  • Tom_G
  • Registratie: Januari 2004
  • Laatst online: 16-03 20:58
Load balancing gebeurd op basis van per-connection per-destination neem ik aan.

Dit zal inderdaad bijlange niet voor alles goed werken zoals je zelf al vermeld, door routes die onnodig veel hop's maken.

Ook worden routes gecached (kan je af en toe flushen). Daarom zal verkeer naar een bepaalde host op het internet in principe altijd dezelfde route (ISP) gebruiken (tenzij je de routetabel af en toe flushed (cronjob).

De "tutorial" is nog niet af: ik ga binnenkort er verder aan werken, en daarin wordt ook besproken hoe je kan op basis van regels de routes kiezen: zo kan je bijvoorbeeld werken op criteria als source mac of ip (pc in uw LAN), source of destionation port en source of destination IP.
Concreet is het dus mogelijk om daarmee te bepalen welke pc's via verbinding a en welke via verbinding b moeten op het internet gaan.
Of zorgen dat de uitgaande mailserver enkel maar via de provider waartoe deze mailserver behoort gaat.
Enzovoort enzoverder. :)

Iets waar ik nog experimenteel mee bezig ben, is een combinatie van beide.
Zo kan je standaard alle verkeer load balancen, en alles waarvoor regels bestaan enkel via verbinding x of y sturen.

ps: Ik had al vernomen dat Telenet slechte peerings had, blijkbaar weet je hiermeer over? Ben wel geïnteresseerd eingelijk, weliswaar als offtopic gegeven. ;)

[ Voor 18% gewijzigd door Tom_G op 17-07-2007 15:04 ]


  • jvanhambelgium
  • Registratie: April 2007
  • Laatst online: 16-03 23:10
>ps: Ik had al vernomen dat Telenet slechte peerings had, blijkbaar weet je hiermeer over? Ben wel >geïnteresseerd eingelijk, weliswaar als offtopic gegeven.

Ik heb nog eens gekeken bij RIPE en heb de indruk dat hun peering er op vooruit is gegaan.
Toch precies veel meer entries tov vroeger ... dat zal wel z'n redenenen hebben...

  • Asperientje
  • Registratie: Juni 2004
  • Laatst online: 07-03-2015
gezien jullie het voor elkaar hebben gekregen om uitgaande verbindingen via een andere isp te laten lopen, (wat mij ook gelukt is), vroeg ik me af of het je ook gelukt is om inkomende verbindingen via een andere isp correct af te handelen.

ik ben zo ver gekomen:
bron: http://linux-ip.net/html/...ternet.html#ftn.id2571744

wat ik aan commando's nu heb toegevoegd:

ip route add nat GW_IP2_OUT via GW_IP2_IN
ip rule add nat GW_IP2_OUT from LOCAL2 table ZOOI

het komt er op neer dat je een secundair adres aanmaakt, en de router vertelt dat het internetzooi daar heen moet (ik heb de pc achter een firewall staan).

dit is volgens de tutorial (zie bovenstaande bron), maar het werkt niet/niet helemaal, gezien de verbinding maar half tot stand komt. ik vergeet dus blijkbaar een bepaald type pakketten te versturen via de goeie verbinding ofzo, waardoor de verbinding niet helemaal tot stand komt (ik heb getest met telnet en netstat)

ik hoop een van jullie (een vd mensen op got) een oplossing heeft, het zou me een hoop problemen besparen namelijk,

Everything's got a meaning


  • Asperientje
  • Registratie: Juni 2004
  • Laatst online: 07-03-2015
ik heb (eindelijk) uitgevonden hoe (voor mij) binnenkomende connecties via een andere isp kan laten lopen:

ik heb per poort het commando toegevoegd, in het voorbeeld zou het commando dan zo worden (WAN1_IP neergezet ipv eigen ip). ik heb hier poort 9000 gebruikt dus...
code:
1
iptables -t nat -A POSTROUTING -p tcp --sport 9000 -j SNAT --to WAN1_IP


verder heb ik globaal nog de volgende dingen toegevoegd:
code:
1
2
iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.254 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp -s 192.168.0.254 -j MARK --set-mark 2


uitleg over bovenstaande code:
het idee is om alle verkeer wat via de niet-standaard-gateway loopt per lijn een apart ip te geven. vervolgens match je dus alle verkeer wat via dat ip gaat op ipadres, en zet de mark zo dat hij de correcte lijn gebruikt.

verder wil je per poort de inkomende en uitgaande connecties fixen.
in totaliteit heb je dan per poort 3 commando's nodig (met $port als poort)
code:
1
2
3
iptables -t mangle -A PREROUTING -p tcp --dport $port -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp --dport $port -j MARK --set-mark 2
iptables -t nat -A POSTROUTING -p tcp --sport $port -j SNAT --to WAN1_IP


ik hoop dat iemand hier wat aan heeft, ik heb er 3 dagen over gedaan de correcte info te vinden ;)

Everything's got a meaning

Pagina: 1