[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
PF et plusieurs fournisseur d'accès Internet
Bonjour,
Je ne sais pas trop comment introduire mon problÃme, donc rentrons
directement dans le vif du sujet...
J'ai un couple de soekris (NET5501), avec OpenBSD 4.5 dessus. Ces
boitiers me servent à filtrer le flux IP de mon entreprise, et à crÃer
des tunnels IPSec entre le rÃseau du siÃge et nos sites de production
(qui possÃdent eux aussi leurs couples soekris) .
Au siÃge, nous avons deux connexions vers internet :
- une SDSL avec 4 IPs (FAIa, IPa1=>IPa4, GWa);
- une ADSL (FAIb, IPb, GWa).
La connectique est la suivante :
FAIa----|
|switch|----|vr0 SOEKRIS vr2|----|LAN/DMZ
FAIb----|
J'espÃre que le schÃma restera comprÃhensible. Voici quelques
explication supplÃmentaires : les deux arrivÃes des FAI sont branchÃes
sur un switch. Ce mÃme switch est à son tour relià sur la patte vr0 du
boitier soekris. L'interface vr2 du soekris est reliÃe au LAN.
Comme dit plus haut, ce sont des couples de soekris. Ils fonctionnent
donc avec pfsync, et CARP (et sasyncd, mais ce n'est pas le problÃme
ici).
Voici la sortie d'un ifconfig lÃgÃrement retouchà niveau IP :
=======================
OpenBSD-4.5 anubisA ~ # ifconfig -A
lo0: flags=8149<UP,LOOPBACK,RUNNING,PROMISC,MULTICAST> mtu 33204
priority: 0
groups: lo
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
vr0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:24:cb:58:dc
priority: 0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::200:24ff:fecb:58dc%vr0 prefixlen 64 scopeid 0x1
vr1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:24:cb:58:dd
priority: 0
media: Ethernet autoselect (none)
status: no carrier
inet6 fe80::200:24ff:fecb:58dd%vr1 prefixlen 64 scopeid 0x2
vr2: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:24:cb:58:de
priority: 0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 10.149.0.2 netmask 0xffffc000 broadcast 10.149.63.255
inet6 fe80::200:24ff:fecb:58de%vr2 prefixlen 64 scopeid 0x3
vr3: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:24:cb:58:df
priority: 0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 172.16.0.1 netmask 0xffffff00 broadcast 172.16.0.255
inet6 fe80::200:24ff:fecb:58df%vr3 prefixlen 64 scopeid 0x4
enc0: flags=0<> mtu 1536
priority: 0
pfsync0: flags=41<UP,RUNNING> mtu 1500
priority: 0
pfsync: syncdev: vr3 maxupd: 128
groups: carp pfsync
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33204
priority: 0
groups: pflog
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
priority: 0
groups: tun
inet 10.149.8.1 --> 10.149.8.2 netmask 0xffffffff
carp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:01
priority: 0
carp: MASTER carpdev vr0 vhid 1 advbase 1 advskew 10
groups: carp egress
inet6 fe80::200:5eff:fe00:101%carp1 prefixlen 64 scopeid 0x7
inet 89.132.88.54 netmask 0xffffff00 broadcast 89.132.88.255
carp2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:02
priority: 0
carp: MASTER carpdev vr2 vhid 2 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:102%carp2 prefixlen 64 scopeid 0x8
inet 10.149.0.1 netmask 0xffffc000 broadcast 10.149.63.255
carp3: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:03
priority: 0
carp: MASTER carpdev vr2 vhid 3 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:103%carp3 prefixlen 64 scopeid 0x9
inet 192.168.6.20 netmask 0xffffff00 broadcast 192.168.6.255
carp4: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:04
priority: 0
carp: MASTER carpdev vr0 vhid 4 advbase 1 advskew 10
groups: carp egress
inet6 fe80::200:5eff:fe00:104%carp4 prefixlen 64 scopeid 0xa
inet 142.18.76.90 netmask 0xfffffff8 broadcast 142.18.76.95
carp5: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:05
priority: 0
carp: MASTER carpdev vr0 vhid 5 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:105%carp5 prefixlen 64 scopeid 0xb
inet 142.18.76.91 netmask 0xfffffff8 broadcast 142.18.76.95
carp6: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:06
priority: 0
carp: MASTER carpdev vr0 vhid 6 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:106%carp6 prefixlen 64 scopeid 0xc
inet 142.18.76.92 netmask 0xfffffff8 broadcast 142.18.76.95
carp7: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:07
priority: 0
carp: MASTER carpdev vr0 vhid 7 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:107%carp7 prefixlen 64 scopeid 0xd
inet 142.18.76.93 netmask 0xfffffff8 broadcast 142.18.76.95
carp8: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:08
priority: 0
carp: MASTER carpdev vr0 vhid 8 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:108%carp8 prefixlen 64 scopeid 0xe
inet 142.18.76.94 netmask 0xfffffff8 broadcast 142.18.76.95
carp9: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:00:5e:00:01:09
priority: 0
carp: MASTER carpdev vr2 vhid 9 advbase 1 advskew 10
groups: carp
inet6 fe80::200:5eff:fe00:109%carp9 prefixlen 64 scopeid 0xf
inet 192.168.6.1 netmask 0xffffff00 broadcast 192.168.6.255
OpenBSD-4.5 anubisA ~ # route -n show
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 142.18.76.89 UGSP 8 2262901 - 8 carp4
default 89.132.88.254 UGSP 2 582476 - 8 carp1
10.149.0/18 link#3 UC 2 0 - 4 vr2
10.149.0.1 10.149.0.1 UH 1 7815 - 4 carp2
10.149.0.6 00:1e:c9:ec:34:e7 UHLc 2 1164 - 4 vr2
10.149.2.3 00:1e:37:cc:c1:60 UHLc 1 454 - 4 vr2
10.149.8/24 10.149.8.2 UGS 0 42610 - 8 tun0
10.149.8.2 10.149.8.1 UH 1 0 - 4 tun0
89.132.88/24 link#7 UC 0 0 - 4 carp1
81.57.32.254 00:07:cb:97:ac:57 UHLc 1 0 - 4 carp1
127/8 127.0.0.1 UGRS 0 0 33204 8 lo0
127.0.0.1 127.0.0.1 UH 1 302 33204 4 lo0
172.16.0/24 link#4 UC 0 0 - 4 vr3
192.168.6/24 link#9 UC 5 0 - 4 carp3
192.168.6.1 192.168.6.1 UH 1 20 - 4 carp9
192.168.6.2 00:06:5b:ef:3d:06 UHLc 1 1 - 4 carp3
192.168.6.167 00:e0:29:9a:84:c9 UHLc 0 2 - 4 carp3
192.168.6.203 00:0c:29:46:e3:c7 UHLc 0 1 - 4 carp3
192.168.6.212 00:50:56:9a:14:f7 UHLc 0 1 - 4 carp3
192.168.6.223 08:00:27:65:3f:69 UHLc 0 1 - 4 carp3
142.18.76.88/29 link#10 UC 1 0 - 4 carp4
142.18.76.89 00:1d:a2:c2:ce:60 UHLc 0 0 - 4 carp4
142.18.76.91 142.18.76.91 UH 0 0 - 4 carp5
142.18.76.92 142.18.76.92 UH 0 0 - 4 carp6
142.18.76.93 142.18.76.93 UH 0 0 - 4 carp7
142.18.76.94 142.18.76.94 UH 0 0 - 4 carp8
224/4 127.0.0.1 URS 0 0 33204 8 lo0
Internet6:
Destination Gateway
[...]
Encap:
Source Port Destination Port Proto SA(Address/Proto/Type/Direction)
[...]
OpenBSD-4.5 anubisA ~ #
=====================
Comme on peut le voir ci dessus, cotà internet (vr0), nous avons 4+1
IPs :
- 142.18.76.90: FAIa, CARP4, GW=142.18.76.89 MAC_GW=00:1d:a2:c2:ce:60;
- 142.18.76.91: FAIa, CARP5, ";
- 142.18.76.92: FAIa, CARP6, ";
- 142.18.76.93: FAIa, CARP7, ";
- 142.18.76.94: FAIa, CARP8, ";
- 89.132.88.54: FAIb, CARP1, GW=89.132.88.254 MAC_GW=00:07:cb:97:ac:57.
Cotà LAN, nous avons deux subnets (pour des raisons historiques) :
10.149.0.0/18 et 192.168.6.0/24, avec les IPs suivantes pour les
atteindre :
- 10.149.0.1 : IP CARP2 partagÃe;
- 10.149.0.2 : IP propre au soekris (principal);
- 192.168.6.1 : IP CARP9 partagÃe;
- 192.168.6.20 : IP CARP3 partagÃe, prÃsente pour des raisons
historiques. Je pourrai la supprimer.
Le but d'avoir ces deus FAI est de redirigà le flux internet et autre
flux trÃs consommateur sur la ligne ADSL, et faire transiter les flux
prioritaires sur la SDSL. Ceci fonctionne plutÃt trÃs bien du LAN vers
internet : les flux HTTP, et FTP sont redirigÃs vers la ligne ADSL. Je
ne constate pas de problÃme de fonctionnement.
Voici un rÃsumà des rÃgles que j'utilise pour effectuer ceci :
==================
# HTTP, FTP : On route le HTTP et le FTP vers l'ADSL
nat log on $WAN_IF from $LAN_NETWORK to any port { http, ftp } \
-> ($WAN_FAIb_CARP_IF)
# Default on route tout le traffic non definie ci-dessus en sur les
interface ci-dessous
nat log on $WAN_IF from $LAN_NETWORK to any \
-> ($WAN_FAIa90_CARP_IF)
[...]
# HTTP(S) : on autorise les gens à faire du HTTP(s)
pass in quick log on $LAN_IF route-to ($WAN_FAIb_CARP_IF 89.132.88.254)\
inet proto tcp from $LAN_NETWORK to any port { http, ftp }
pass in quick log on $LAN_IF route-to ($WAN_FAIa_CARP_IF 142.18.76.89)\
inet proto tcp from $LAN_NETWORK to any port { https }
==================
Bon, c'est vraiment du rÃsumÃ, mais Ãa marche bien.
Le problÃme que je rencontre est le suivant :
j'hÃberge en interne quelques serveurs accessibles de l'extÃrieur. Je
fait donc de la redirection :
==================
rdr pass log on $WAN_IF from any to $FAIa_IP_3 -> $DEMO_IP
==================
Le paquet arrivent bien jusqu'au serveur en interne, en repartent bien,
arrive jusqu'au soekris, et parte bien sur soekris... mais vers la
mauvaise GW.
En gros le paquet arrivent sur l'interface publique CARP7 sur l'IP
142.18.76.93, et ceux-ci sont redirigÃs vers l'IP interne 10.149.0.200 :
==================
Nov 16 01:32:49.725523 rule 14/(match) rdr in on vr0: 88.191.98.203.45002 > 10.149.0.200.80: S 1746522046:1746522046(0) win 5840 <mss 1460,sackOK,timestamp 3856999604[|tcp]> (DF)
Nov 16 01:32:49.725595 rule 15/(match) pass out on vr2: 88.191.98.203.45002 > 10.149.0.200.80: S 1746522046:1746522046(0) win 5840 <mss 1460,sackOK,timestamp 3856999604[|tcp]> (DF)
==================
Pour le reste des capture, j'ai Ãtà obligà de passà non plus sur
l'interface pflog, mais sur les interfaces physiques directement :
==================
OpenBSD-4.5 anubisA ~ # tcpdump -nettti vr2 host 88.191.98.203
tcpdump: listening on vr2, link-type EN10MB
Nov 16 01:33:35.873434 00:00:24:cb:58:de 00:0c:29:3f:11:6f 0800 74: 88.191.98.203.45003 > 10.149.0.200.80: S 2463407432:2463407432(0) win 5840 <mss 1460,sackOK,timestamp 3857013449 0,nop,wscale 7> (DF)
Nov 16 01:33:35.873790 00:0c:29:3f:11:6f 00:00:5e:00:01:02 0800 74: 10.149.0.200.80 > 88.191.98.203.45003: S 1499725615:1499725615(0) ack 2463407433 win 5792 <mss 1460,sackOK,timestamp 117353858 3857013449,nop,wscale 7> (DF)
==================
Le serveur internet renvoit donc bien sa rÃponse sur sa passerelle par
dÃfaut (10.149.0.1) correspondant au soekris.
Ceux-ci sont bien rÃcupÃrÃs par le soekris, qui tente de les renvoyer :
==================
OpenBSD-4.5 anubisA ~ # tcpdump -nettti vr0 host 88.191.98.203
tcpdump: listening on vr0, link-type EN10MB
Nov 16 01:34:10.464233 00:1d:a2:c2:ce:60 00:00:5e:00:01:07 0800 74: 88.191.98.203.45004 > 142.18.76.93.80: S 3006163274:3006163274(0) win 5840 <mss 1460,sackOK,timestamp 3857023832 0,nop,wscale 7> (DF)
Nov 16 01:34:10.465029 00:00:24:cb:58:dc 00:07:cb:97:ac:57 0800 74: 142.18.76.93.80 > 88.191.98.203.45004: S 1518031858:1518031858(0) ack 3006163275 win 5792 <mss 1460,sackOK,timestamp 117362504 3857023832,nop,wscale 7> (DF)
==================
On voit bien ci-dessus le paquet arriver (SYN), et tenter de
repartir(SYN/ACK). Le problÃme se trouve sur la seconde ligne : le
paquet est Ãmis vers la GWb (du FAIb donc) avec l'IPa3 (du FAIa donc).
Ãvidement, le paquet est droppà au premier saut, la GWb n'acceptant pas
une autre IP source que IPb.
J'ai essayà d'ajouter la rÃgle suivante :
==================
pass in quick log on $LAN_IF route-to ($WAN_FAIa3_CARP_IF \
142.18.76.89) inet proto tcp from $DEMO_IP port 80 \
to any
==================
Et mÃme :
==================
pass in quick log on $LAN_IF route-to ($WAN_FAIa3_CARP_IF 142.18.76.89)\
inet proto tcp from $DEMO_IP to any
==================
Mais rien à faire, ma passerelle s'en-tÃte à vouloir envoyer les
rÃponses sur GWb avec comme IP source IPa3.
J'ai pas mal creusà et lu la doc de PF, mais je n'ai pas rÃussi Ã
pointer d'oà pouvait venir le problÃme, ni trouvà comment forcà l'envoi
de vers une GW pour un paquet en retour du rÃseau interne.
Auriez-vous une piste?
Bonne soirÃe,
--
Raph