Hulp bij routing met meerdere netwerken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Trolando
  • Registratie: April 2005
  • Laatst online: 25-08 13:47
Ik heb twee netwerken:
Op eth0: 172.19.3.2, 172.19.3.x/24 (mijn eigen internetverbinding)
Op tap0: 130.89.A.B, 130.89.104.x/21 (VPN van de universiteit, wisselend IP)

Ik heb dus internet via een router (172.19.3.1) met mijn server (172.19.3.2) als default.
En daarover een VPN verbinding met de universiteit, gateway 130.89.104.1.

Ik kan verbinden naar en vanaf 130.89.xx.xx adressen via de gateway 130.89.104.1.
Ik kan verbinden naar en vanaf andere adressen via de gateway 172.19.3.1

Als ik op het netwerk van de universiteit (130.89.xx.xx) verbind met de server via het IP-adres van mijn internetprovider (via de gateway 172.19.3.1), gaat het mis. Ik wil dit kunnen, omdat het 130.89.A.B adres van mijn server varieert, en omdat ik een website heb waarvan ik wil dat die bereikbaar is ook vanaf de universiteit met dezelfde URL.

Hoe los ik dit op??

Wat ik al geprobeerd heb:
Ik heb in de firewall regels (iptables) ingesteld dat nieuwe verbindingen een CONNMARK krijgen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
*mangle
# Restore evt bestaande mark
-A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
# Accepteer als al mark heeft (en verlaat chain)
-A PREROUTING -m mark --mark 0x1 -j ACCEPT
# Creeer mark voor nieuwe verbindingen (state NEW, mark 0x0) op eth0
-A PREROUTING -i eth0 -m state --state NEW -m mark --mark 0x0 -j MARK --set-xmark 0x1/0xffffffff
# Accepteer als al mark heeft (en verlaat chain)
-A PREROUTING -m mark --mark 0x3 -j ACCEPT
# Creeer mark voor nieuwe verbindingen (state NEW, mark 0x0) op tap0
-A PREROUTING -i tap0 -m state --state NEW -m mark --mark 0x0 -j MARK --set-xmark 0x3/0xffffffff
# Sla mark op
-A PREROUTING -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff


Ik test door vanaf de universiteit naar poort 80 van mijn server te verbinden (HTTP).
Als ik LOG targets toevoeg zie ik het volgende in /var/log/messages verschijnen (een 'trace' van het SYN packet van een TCP verbinding op poort 80):
code:
1
2
... MANGLE PREROUTING IN=eth0 OUT=   SRC=130.89.****** DST=172.19.3.2 LEN=48 TOS=0x00 PREC=0x00 TTL=122 ID=63189 DF PROTO=TCP SPT=2296 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0x1
... NAT PREROUTING IN=eth0 OUT=  SRC=130.89.****** DST=172.19.3.2 LEN=48 TOS=0x00 PREC=0x00 TTL=122 ID=63189 DF PROTO=TCP SPT=2296 DPT=80 WINDOW=65535 RES=0x00 SYN URGP=0 MARK=0x1


Wat mij opvalt is dat er geen logberichten verschijnen van mangle/input en mangle/forward (http://jengelh.medozas.de/images/nf-packet-flow.png ; na "routing decision" zou mijn packet naar input of forward chains moeten gaan). De packets hebben de correcte mark 0x1 gekregen; ze komen vanaf SRC=130.89.***** (universiteit), ze gaan naar 172.19.3.2 (server); dit klopt allemaal. Wat nu zou moeten gebeuren is dat ze bij de routing beslissing naar een locale poort gaan (immers dst=172.19.3.2)

Wellicht gaat er iets mis bij het routen?? Ik vind het merkwaardig. Ik kan ook nergens vinden waar ik netjes kan zien wat er gebeurt met een packet. Wat ik graag zou willen is een complete trace van een packet met alle beslissingen. (in iptables/netfilter en in iproute2)

De output van ip rule:
code:
1
2
3
4
5
6
7
0:      from all lookup local
1000:   from all fwmark 0x1 lookup eigen
1002:   from all fwmark 0x3 lookup vpn
2000:   from 172.19.3.1 lookup eigen
2002:   from 130.89.104.1 lookup vpn
32766:  from all lookup main
32767:  from all lookup default


Ik snap niet precies hoe dit werkt. Mijn vroegere configuratie had alleen regels 2000 en 2002. In een poging het probleem op te lossen heb ik regels 1000 en 1002 toegevoegd. Hoe het werkt (2000 en 2002) is voor mij altijd "magie" geweest (ik nam maar aan dat "from 172.19.3.1" betekent dat het om verbindingen gaat die ontstaan zijn via gateway "172.19.3.1" en dat die geroute worden via table "eigen"; wat is de betekenis eigenlijk?? Echt duidelijk wordt het niet als ik de documentatie lees), maar het werkte, ik kan verbinden vanaf de server naar adressen op beide netwerken en vanaf adressen op beide netwerken naar de server, als ik maar het goede adres gebruikte. Wat ik echter wil is dat ik ook goed kan verbinden vanaf de universiteit als ik het "verkeerde" IP adres gebruik (dus via het niet-vpn netwerk).

De output van ip route show table eigen:
code:
1
2
172.19.3.0/24 dev eth0  scope link
default via 172.19.3.1 dev eth0


De output van ip route show table vpn:
code:
1
2
130.89.104.0/21 dev tap0  scope link
default via 130.89.104.1 dev tap0


De output van ip route show table main:
code:
1
2
3
4
5
6
7
130.89.254.224/27 via 172.19.3.1 dev eth0
172.19.3.0/24 dev eth0  proto kernel  scope link  src 172.19.3.2
130.89.104.0/21 dev tap0  proto kernel  scope link  src 130.89.105.195
63.164.0.0/16 via 130.89.104.1 dev tap0
130.89.0.0/16 via 130.89.104.1 dev tap0
198.185.0.0/16 via 130.89.104.1 dev tap0
default via 172.19.3.1 dev eth0


De output van ip route show table local:
code:
1
2
3
4
5
6
7
8
9
10
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
local 130.89.A.B dev tap0  proto kernel  scope host  src 130.89.A.B
broadcast 172.19.3.255 dev eth0  proto kernel  scope link  src 172.19.3.2
local 172.19.3.2 dev eth0  proto kernel  scope host  src 172.19.3.2
broadcast 172.19.3.0 dev eth0  proto kernel  scope link  src 172.19.3.2
broadcast 130.89.104.0 dev tap0  proto kernel  scope link  src 130.89.A.B
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1
broadcast 130.89.111.255 dev tap0  proto kernel  scope link  src 130.89.A.B
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1


Goed, ik denk dat dat wel dekt qua informatie. Wie kan me helpen? En wat moet ik doen?