Per IP internet verbinding bepalen

Pagina: 1
Acties:

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 06-02 16:29

WHiZZi

Museumdirecteurtje

Topicstarter
Hallo,

Ik zit hier al een tijdje met een klein probleempje. Wij hebben hier 2 ADSL lijnen (Demon en XS4All). Nou is het de bedoeling dat ik per ip adres van het interne netwerk (10.0.0.0/24 range) kan bepalen welke verbinding gebruikt wordt.

Onze hoofdverbinding is Demon. Dit wordt gewoon in een simpele IPtables firewall geregeld.
(eth0 = LAN, eth1 = Demon, eth2 = XS4All)
code:
1
2
iptables -A POSTROUTING -t nat -o eth1 -j MASQUERADE
iptables -A POSTROUTING -t nat -o eth2 -j MASQUERADE


De routing tabel op de router ziet er als volgt uit:
code:
1
2
3
4
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.1
192.168.2.0/24 dev eth2  proto kernel  scope link  src 192.168.2.2
83.160.38.0/23 dev eth1  proto kernel  scope link  src 83.160.X.Y
default via 83.160.38.1 dev eth1


Na het vele doorzoeken van vele internet sites (waaronder deze en advanced routing) heb ik het volgende gemaakt:
Een nieuwe tabel waarin de routing voor de XS4All verbinding komt:

# ip route show table 4
code:
1
2
3
192.168.2.0/24 dev eth2  proto kernel  scope link  src 192.168.2.2
10.0.0.0/16 dev eth0  scope link
default via 192.168.2.1 dev eth2


in de gewone rules staat het volgende:
code:
1
2
3
4
0:      from all lookup local
32756:  from 192.168.2.2 lookup 4
32766:  from all lookup main
32767:  from all lookup default


Volgens mijn idee kan ik nu een IP adres toevoegen door een "ip rule add from 10.0.0.47 lookup 4" te doen waardoor 10.0.0.47 dus over de XS4All lijn zou moeten gaan. Helaas werkt dit dus niet (ook niet na een ip route flush cache)

Wat zie ik hier over het hoofd?

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
WHiZZi schreef op dinsdag 11 april 2006 @ 16:10:
Onze hoofdverbinding is Demon. Dit wordt gewoon in een simpele IPtables firewall geregeld.
(eth0 = LAN, eth1 = Demon, eth2 = XS4All)
code:
1
2
iptables -A POSTROUTING -t nat -o eth1 -j MASQUERADE
iptables -A POSTROUTING -t nat -o eth2 -j MASQUERADE
Kun je in deze regels niet beter gelijk gebruiken voor het maken van de opdeling? Zoiets:
code:
1
2
iptables -A POSTROUTING -t nat --source 10.0.0.4/32 -o eth1 -j MASQUERADE
iptables -A POSTROUTING -t nat --source 10.0.0.5/32 -o eth2 -j MASQUERADE
Volgens mijn idee kan ik nu een IP adres toevoegen door een "ip rule add from 10.0.0.47 lookup 4" te doen waardoor 10.0.0.47 dus over de XS4All lijn zou moeten gaan. Helaas werkt dit dus niet (ook niet na een ip route flush cache)

Wat zie ik hier over het hoofd?
Waarschijnlijk is het adres al veranderd doordat je NAT(network adress translation) doet voordat hij kijkt naar de route table.

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 06-02 16:29

WHiZZi

Museumdirecteurtje

Topicstarter
cool_zero schreef op dinsdag 11 april 2006 @ 21:10:
[...]

Kun je in deze regels niet beter gelijk gebruiken voor het maken van de opdeling? Zoiets:
code:
1
2
iptables -A POSTROUTING -t nat --source 10.0.0.4/32 -o eth1 -j MASQUERADE
iptables -A POSTROUTING -t nat --source 10.0.0.5/32 -o eth2 -j MASQUERADE
Het is de bedoeling dat het op een later tijdstip wordt toegevoegd. Gebruikers moeten hier straks via een webinterface kunnen kiezen welke verbinding ze gebruiken.
Waarschijnlijk is het adres al veranderd doordat je NAT(network adress translation) doet voordat hij kijkt naar de route table.
Het zou kunnen, maar hoe is dat op te lossen in deze situatie. In principe moet iedereen (10.0.0.0/24) standaard over de Demon (Eth1) verbinding en sommige IP adressen via XS4All als ze dat willen.

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
Of je nu een route of een iptable rule toevoegd via een webinterface maakt volgens mij niet zoveel uit. Wat interessant is om te weten of deze iptables rules al goed werken. Als je ze toepast, gaat het verkeer dan ook over de verschillende nics?

Door de volgorde van de iptable rules kun je al het verkeer over eth1 laten gaan en een select aantal over eth2. De regels voor eth2 moeten dan voor de globale regel voor eth1 staan. De regels voor eth2 kun je met -I i.p.v. -A toevoegen zodat ze aan het begin komen te staan en dus voor de regel van eth1.

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 06-02 16:29

WHiZZi

Museumdirecteurtje

Topicstarter
De rules werken in zoverre, dat alles over 1 verbinding gaat. De 2e verbinding doet het totaal niet (zowel inkomend als uitgaand niet).

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
En dat komt omdat in de route-table staat dat alles over die interface gaat, wat je al eerder vermelde en waar dus het probleem zit zie ik nu. De oplossing is er gelukkig ook :) namelijk het markeren van packets, zie hier:
http://lartc.org/howto/lartc.netfilter.html

  • WHiZZi
  • Registratie: Januari 2001
  • Laatst online: 06-02 16:29

WHiZZi

Museumdirecteurtje

Topicstarter
Helaas, dat markeren had ik al geprobeerd. Op het moment dat ik mijn interne IP 10.0.0.47 markeer, danwel direct in de route tabel duw, verlies ik mijn internet verbinding

Het stomme is, het heeft ooit op deze manier gewoon gewerkt alleen ben ik door een crash dat firewall script kwijt :(

Ik zal in de loop van de dag het firewall script effe ergens online zetten. Ik zit echt muur- en muurvast ;(

HomeComputerMuseum - Interactief computermuseum waar wij de geschiedenis van de thuiscomputer preserveren. Centraal gelegen in de Benelux.


  • rvtk
  • Registratie: Juni 2001
  • Laatst online: 03-02 20:19
Misschien sla ik de plank compleet mis, maar als je clients dhcp gebruiken, kan je toch per client een andere gateway instellen. Vervolgens hang je 2 ip adressen aan 2 virtuele NICs (dan krijg je bijvoorbeeld 192.168.0.1 op eth0:0 en 192.168.0.2 op eth0:1). Dan hoef je alleen nog maar de (default)gateways van beide virtuele interfaces naar de juiste adsl verbinding te voeren. (en natuurlijk zorg je dat je dhcp-server die juiste gateway geeft per client-IP).

(ik heb het niet uitgezocht, maar mijn eerste idee om dit op te lossen zou bovenstaand idee zijn)

[ Voor 33% gewijzigd door rvtk op 13-04-2006 13:17 ]


  • cool_zero
  • Registratie: Juni 2001
  • Laatst online: 25-10-2022
@rvtk
De vraag is natuurlijk of dit ook nog goed gaat als ja aan NAT doet. En dit betekend ook dat je client in een ander ip moet geven als je wilt wisselen.

@Whizzi
Waar blijven die firewall scripts :P

De volgende stappen moet je volgens mij zo ongeveer doorlopen:

Misschien moet je eerst even reverse path filtering uitzetten zoals staat in http://lartc.org/howto/lartc.netfilter.html.

code:
1
2
3
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
  echo 0 > $i 
done


Daarnaast moet je aan alle voorwaarde voldoen om the kunnen markeren, zoals het landen van eventuele modules als die niet in de kernel zitten:
code:
1
2
modprobe iptable_mangle
modprobe ipt_MARK

i.p.v. alle interfaces zou je ook alleen de ene interface waarvoor het nodig is kunnen doen.

Daarna het markeren van packets:
code:
1
iptables -A PREROUTING -i eth0 -t mangle --source 10.0.0.47/32 -j MARK --set-mark 1


Daarna kun je de packets fowarden (volgorde is belangrijk):
code:
1
2
iptables -A POSTROUTING -t nat -o eth2 -m mark --mark 1 -j MASQUERADE
iptables -A POSTROUTING -t nat -o eth1 -j MASQUERADE


En dan zien je rules met de "mark 1" erin er ongeveer zo uit:
code:
1
2
3
4
5
# ip rule add fwmark 1 table alt.out
0:      from all lookup local 
32764:  from all fwmark        1 lookup alt.out 
32766:  from all lookup main 
32767:  from all lookup default


met dit als route:
code:
1
/sbin/ip route add default via 192.168.2.1 dev eth2 table alt.out

(192.168.2.1 moet de gateway van eth2 interface zijn)

Met het iproute2 deel heb ik echter weinig ervaring, dus kan het nog wat mis hebben :P
Pagina: 1