[Résolu en partie] Serveur avec plusieurs FAI

Serveur avec plusieurs FAI [Résolu en partie] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 02-04-2006 à 12:58:47    

Bonjour,
J'ai un petit soucis de réseau avec OpenBSD, j'ai écumé Google mais sans trouvé de réponse (ou plutôt en trouvant des réponses pas adaptées à mon cas).
 
J'expose mon cas :
 
J'ai deux fournisseur d'accès qui arrivent sur mon OpenBSD-3.8.


ISP1--(IPpub1)--RouteurNAT--\
             192.168.254.250 \      
                             OpenBSD  
ISP2---------------(IPpub2)--/      


Citation :


OpenBSD# route -n show
Routing tables
 
Internet:
Destination        Gateway            Flags    Refs      Use    Mtu  Interface
default            GW-ISP2            UGS         0  3042486      -   tun0
GW-ISP2            IPpub2             UH          0        0      -   tun0
127/8              127.0.0.1          UGRS        0        0  33224   lo0
127.0.0.1          127.0.0.1          UH          0    67404  33224   lo0
10.0.0/24          link#1             UC          0        0      -   sis0
192.168.0/24       link#2             UC          0        0      -   sis1
192.168.254/24     link#3             UC          0        0      -   sis2


 
Si je me loggue sur une machine chez un hébergeur :

Citation :


HBG# ping IPpub2
PING IPpub2 (IPpub2): 56 data bytes
64 bytes from IPpub2: icmp_seq=0 ttl=249 time=61.4 ms
64 bytes from IPpub2: icmp_seq=1 ttl=249 time=64.2 ms
64 bytes from IPpub2: icmp_seq=2 ttl=249 time=66.5 ms
 
HBG# ping IPpub1
PING IPpub1 (IPpub1): 56 data bytes
64 bytes from (192.168.254.250): icmp_seq=0 ttl=249 time=61.4 ms
64 bytes from (192.168.254.250): icmp_seq=1 ttl=249 time=64.2 ms
64 bytes from (192.168.254.250): icmp_seq=2 ttl=249 time=66.5 ms


 
Et :
 

Citation :


OpenBSD# tcpdump -i sis2
tcpdump: listening on sis2, link-type EN10MB
14:52:23.970138 HBG > 192.168.254.250: icmp: echo request (DF)
14:52:24.970083 HBG > 192.168.254.250: icmp: echo request (DF)
14:52:25.970100 HBG > 192.168.254.250: icmp: echo request (DF)
14:52:26.970643 HBG > 192.168.254.250: icmp: echo request (DF)
 
OpenBSD# tcpdump -i tun0
14:52:23.970138 192.168.254.250 > HBG: icmp: echo reply (DF)
14:52:24.970083 192.168.254.250 > HBG: icmp: echo reply (DF)
14:52:25.970100 192.168.254.250 > HBG: icmp: echo reply (DF)
14:52:26.970643 192.168.254.250 > HBG: icmp: echo reply (DF)


 
Dans mon pf.conf :

Citation :


set block-policy drop
scrub in all
block all
antispoof for {$if_isp1, $if_isp2}
pass quick on lo0 all
pass in on {$if_isp1, $if_isp2} proto icmp keep state
pass out on {$if_isp1, $if_isp2} keep state


 
Ma question : comment se fait-il que le système ne conserve pas l'état de la connexion et donc ne renvoie pas la réponse par l'interface qui-va-bien ?
(Ok, ya la route par défaut mais le système doit bien réussir à savoir que la requète arrive par $if_isp1 et devrait donc, en toute logique, repartir par $if_isp1)
 
Merci à celui ou ceux qui pourront m'indiquer une piste...
 
Première étape de la solution : http://forum.hardware.fr/hardwaref [...] tm#t805862


Message édité par BMenez le 30-04-2006 à 15:47:38
Reply

Marsh Posté le 02-04-2006 à 12:58:47   

Reply

Marsh Posté le 02-04-2006 à 16:28:55    

Essaye avec ca: http://lartc.org/howto/lartc.rpdb.multiple-links.html
 
Ca doit etre transposable a BSD  ;)


Message édité par Profil supprimé le 02-04-2006 à 16:29:18
Reply

Marsh Posté le 02-04-2006 à 17:40:41    

Oh, merci :)
Je regarde ça et je complète le topic.
 
EDIT: Ca ressemble à l'utilisation d'un "route-to" de PF. J'avais essayé mais sans succès, je vais retenter.


Message édité par BMenez le 02-04-2006 à 18:08:53
Reply

Marsh Posté le 02-04-2006 à 19:29:35    

Tu veux faire quoi exactement ?


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
Reply

Marsh Posté le 02-04-2006 à 21:08:02    

Exactement la même chose que la première section du lien de Canth : si une requète arrive par ISP1 que le réponse reparte par ISP1.
 
Alors qu'actuellement, peu importe qu'une requète arrive par ISP1 ou ISP2, ça repart par ISP2...

Reply

Marsh Posté le 02-04-2006 à 21:54:33    

C'est un problème de routage, tout bêtement [:spamafote]
 
Et c'est bien expliqué dans le lien de Canth :)


---------------
« Ce qui ne vous tue pas vous rend plus fort » F. Nietzsche | « Vise_ la Lune. Si tu rates, au pire, t'es dans la merde » Un poète disparu dans le cercle
Reply

Marsh Posté le 03-04-2006 à 16:07:38    

ça ne va pas poser pb au niveau IP que ça ne repparte pas depuis l'IP jointe ?
car IP ISP1 != IP IPS2


---------------
:: Light is Right ::
Reply

Marsh Posté le 22-04-2006 à 17:42:25    

Si ça pose problème. Enfin pas pour tout : par exemple sur un ping ça ne pose pas de problème. Mais dès que l'on a à faire à TCP ça ne marche plus :)

Reply

Marsh Posté le 22-04-2006 à 17:58:46    

oue normal ;)


---------------
:: Light is Right ::
Reply

Marsh Posté le 22-04-2006 à 19:34:46    

Sinon, tu peux aussi utiliser iptables: http://www.linux.com.lb/wiki/index [...] le%20Links
 
J'ai pas teste mais le principe est marrant et devrait etre efficace ;)

Reply

Marsh Posté le 22-04-2006 à 19:34:46   

Reply

Marsh Posté le 22-04-2006 à 19:42:27    

iptables sur un openbsd ça pourrait être tendu :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 23-04-2006 à 15:08:54    

Y'a moyen de faire l'equivalent sous BSD, non ? [:xx_xx]

Reply

Marsh Posté le 23-04-2006 à 15:47:48    

relis le sujet :o
 
et PF roxor


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 23-04-2006 à 19:35:51    

black_lord a écrit :

relis le sujet :o
 
et PF roxor


 
 :heink:  
 
pf a une table mangle et une table nat, non ? Ouskil est le probleme ?  :o

Reply

Marsh Posté le 23-04-2006 à 19:46:09    

Il faudrait que je relise la doc de PF pour être sûr mais il me semble qu'il n'existe pas d'équivalent à la table "mangle" d'iptable...

Reply

Marsh Posté le 28-04-2006 à 22:31:16    

Après avoir lu ce message : http://groups.google.fr/group/luck [...] b67efcc24e
J'ai pris le taureau par les cornes, j'ai remonté un OpenBSD minimal avec un pf.conf minimal aussi :
 

Code :
  1. ext_if1 = "tun0"
  2. ext_if2 = "sis2"
  3. ext_gw1 = "62.xxx.xxx.xxx"
  4. ext_gw2 = "192.168.254.254"
  5. pass in on $ext_if1
  6. pass in on $ext_if2
  7. pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
  8. pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any


 
Et comme par miracle ça marche... [:tuffgong]
 
Reste plus qu'à remonter un vrai pf.conf autour de ce squelette :)

Reply

Marsh Posté le 30-04-2006 à 16:10:42    

Zut! C'est le "block all" qui gène tout...
 
Voilà trois configurations.
 
Là, j'ai accès au Net mais je suis comme au début, les réponses ne partent pas par la bonne interface :

Code :
  1. if_nerim = "tun0"
  2. if_wanadoo = "sis2"
  3. gw_nerim = "xxxx"
  4. gw_wanadoo = "192.168.254.254"
  5. ip_nerim = "xxxx"
  6. if_net = "sis0"
  7. if_lan = "sis1"
  8. if_wifi = "sis2"
  9. local = "{ 192.168.0.10, 192.168.0.11, 192.168.0.12, 192.168.0.13 }"
  10. soekris = "{ 10.0.0.1, 192.168.0.1, 192.168.254.250 }"
  11. set block-policy drop
  12. scrub in all
  13. nat on $if_nerim from $local to any -> $if_nerim
  14. block all
  15. antispoof for { $if_net $if_lan $if_wifi }
  16. pass quick on lo0 all
  17. pass in on $if_lan from $local keep state
  18. pass out on $if_net from $local to any keep state
  19. pass out on $if_nerim keep state
  20. pass in on $if_nerim
  21. pass in on $if_wanadoo
  22. pass out on $if_nerim route-to ($if_wanadoo $gw_wanadoo) from $if_wanadoo to any
  23. pass out on $if_wanadoo route-to ($if_nerim $gw_nerim) from $if_nerim to any


(j'ai essayé en modifiant l'ordre des règles, en mettant des keep state, etc...)
 
 
Là, je n'ai plus accès au Net (normal le "block all" bloque tout) :

Code :
  1. if_nerim = "tun0"
  2. if_wanadoo = "sis2"
  3. gw_nerim = "xxxx"
  4. gw_wanadoo = "192.168.254.254"
  5. ip_nerim = "xxxx"
  6. if_net = "sis0"
  7. if_lan = "sis1"
  8. if_wifi = "sis2"
  9. local = "{ 192.168.0.10, 192.168.0.11, 192.168.0.12, 192.168.0.13 }"
  10. soekris = "{ 10.0.0.1, 192.168.0.1, 192.168.254.250 }"
  11. set block-policy drop
  12. scrub in all
  13. nat on $if_nerim from $local to any -> $if_nerim
  14. block all
  15. antispoof for { $if_net $if_lan $if_wifi }
  16. pass quick on lo0 all
  17. pass in on $if_lan from $local keep state
  18. pass out on $if_net from $local to any keep state
  19. pass in on $if_nerim
  20. pass in on $if_wanadoo
  21. pass out on $if_nerim route-to ($if_wanadoo $gw_wanadoo) from $if_wanadoo to any
  22. pass out on $if_wanadoo route-to ($if_nerim $gw_nerim) from $if_nerim to any


 
Là, tout fonctionne comme je veux mais tout est ouvert...

Code :
  1. if_nerim = "tun0"
  2. if_wanadoo = "sis2"
  3. gw_nerim = "xxxx"
  4. gw_wanadoo = "192.168.254.254"
  5. ip_nerim = "xxxx"
  6. if_net = "sis0"
  7. if_lan = "sis1"
  8. if_wifi = "sis2"
  9. local = "{ 192.168.0.10, 192.168.0.11, 192.168.0.12, 192.168.0.13 }"
  10. soekris = "{ 10.0.0.1, 192.168.0.1, 192.168.254.250 }"
  11. set block-policy drop
  12. scrub in all
  13. nat on $if_nerim from $local to any -> $if_nerim
  14. #block all
  15. antispoof for { $if_net $if_lan $if_wifi }
  16. pass quick on lo0 all
  17. pass in on $if_lan from $local keep state
  18. pass out on $if_net from $local to any keep state
  19. pass in on $if_nerim
  20. pass in on $if_wanadoo
  21. pass out on $if_nerim route-to ($if_wanadoo $gw_wanadoo) from $if_wanadoo to any
  22. pass out on $if_wanadoo route-to ($if_nerim $gw_nerim) from $if_nerim to any


(je pourrais virer d'autres lignes pour n'avoir que le nat et les pass out... route-to...)
 
A votre avis, qu'est-ce qu'il pourrait manquer à mes règles pour être le plus restrictif possible (mais que ça marche quand même hein... ;) )


Message édité par BMenez le 30-04-2006 à 16:14:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed