Serveur pour router des protocoles sur des wan différents

Bonjour !
Voila j’ai un réseau d’ordi que je souhaiterais router vers une connexion internet pour le surf, et vers une autre connexion internet pour le vpn et le trafic des mails (smtp et pop).
J’ai bien evidemment deja les deux connexion internet.
Y a t’il un moyen de faire cela avec une debian ? et si oui comment ?
Ou y a t’il deja une distribution qui ferait cela ?

Merci pour vos conseils

Personne ??? :115

Ben, ca doit être faisable avec iptables et quelques règles NAT qui répartiront le traffic sur l’une ou l’autre des interfaces réseau du serveur reliées aux 2 lignes internet :006

merci pour ce début d’eclaircissement.
donc un serveur avec 3 cartes réseaux
-une pour le wan 1
-une pour le wan 2
-une pour le lan

iptables et le routage nat c’est de base dans une debian ou il faut installer des paquets spécifiques ?

C’est de base (à ma connaissance), il faut juste activer le nat avec la commande :
echo 1 > /proc/sys/net/ipv4/ip_forward
(que tu peux mettre dans ton script de configuration histoire de l’activer à coup sur)
Sinon, il forwardera rien du tout ton serveur :005
APres, faut écrire des règles…

Pour être au plus juste, la commande active le partage de connexion. C’est iptables qui se charge de faire le NAT (voir cibles DNAT, SNAT et MASQUERADE).

Un peu de lecture :
olivieraj.free.fr/fr/linux/information/firewall
frozentux.net/documents/iptables-tutorial

ok merci pour vos conseils je vais m’instruire… :wink:

:006

bon me revoila !!
alors c’est pas tout clair dans ma tête… :119
j’ai un serveur qui a 3 cartes réseaux eth0, eth1 et eth2
eth2 est en ip fixe 192.168.200.254, et est branché sur un routeur netgear (192.168.200.1) qui est relié à une freebox (modem ip fixe)
eth1 est en ip fixe 192.168.1.254, et est branché sur un routeur netgear (192.168.1.1) qui est relié à un modem (ip fixe)
eth0 est en ip fixe 192.168.0.254, et est branché sur un switch. eth0 distribue du dhcp sur le switch.

j’ai réussi a faire que chaque ordi derrière chaque réseau ping entre eux.
Maintenant, je voudrais que les ordis du réseau eth0 envoient des mails via la connexion internet de eth1, mais surf via eth2.
Avec iptables je pige pas trop… :017
Je pensais faire un: iptables -A FORwARD -p tcp --dports smtp -i eth0 -o eth2 -s 192.168.1.254 -j ACCEPT
Cela ne fonctionne pas :075 , mais comme j’ai pas bien pigé, j’ai surement fait une boulette.

Si quelqu’un a une idée :007

En plus la ligne que tu écris, en admettant qu’elle soit syntaxiquement juste, elle ne correspond pas à ce que tu veux faire, elle laisserait sortir le trafic smtp par eth2 alors que plus haut, tu veux que ca sorte par eth1 :108

De plus, sauf erreur de ma part, le -s 192.168.1.254, c’est pas bon non plus, ca voudrait dire que tu autorise ce trafic uniquement pour les paquets dont la source est 192.168.1.254, qui est l’interface de sortie eth1, or toi si j’ai bien compris tu veux autoriser le trafic venant du réseau “eth0” 192.168.0.0.

Edit : j’ai suppprimé de mon post les règles que j’avais proposées car trop incomplètes et probablement en partie fausses. Je vais réfléchir un peu plus sur le sujet.

:006

tout d’abord chalut !!( rapport a ton avatar :038 ) et merci de te pencher sur mon soucis.
je veux que tout les ordinateurs du réseau en 192.168.0.0 surf via la connexion en eth2 et que pour l’envoi et la réception de mails, ça passe par la connexion en eth1.
Et cela quelque soit le smtp/pop de paramétré dans le client de messagerie des ordis du réseau 192.168.0.0

De plus ta réflexion sur la ligne de code que j’ai mis montre bien que j’ai rien pané alors :blush: :017

Bon, je pensais pouvoir me débrouiller à simuler ton infrastructure avec mon portable et ses cartes ethernet, wifi et clef 3g, mais la clef 3g me fait des siennes donc je ne parviens pas à avoir 3 interfaces simultanément :075
J’ai un nat qui fonctionne de eth à wlan, mais je me rends compte en lisant des docs et tutos que c’est un peu plus compliqué pour router des paquets sur 2 interfaces de sorties suivant certains critères, notamment de ports dans ton cas (je crois comprendre qu’il faut utiliser la directive prerouting avec le marquage de paquets et une table de routage alternative :017 )
Je vais donc essayer de monter un pc fixe avec 3 cartes réseaux, mais ca risque de prendre un peu plus de temps que prévu, donc je t’invite quand même à commencer à potasser les docs que t’a donné kna :mrgreen:
:006

Ton histoire n’est pas simple. En fait avec netfilter, tu vas marquer les paquets, par exemple

iptables -A PREROUTING -i eth0 -p tcp --dport 25 -j MARK --set-mark 25

va mettre la marque 25 sur les paquets à destination du port 25.

Puis avec ip (paquet iproute2), tu spécifies la route pour les paquets marqués:

Il te faut créer une table smtp dans les tables de routages puis dire d’utiliser cette table pour les paquets marqués 25:

Je te suggère de lire http://www.linux-france.org/prj/inetdoc/guides/Advanced-routing-Howto/ particulièrement le chapitre 9 et le 11.

Les règles NAT ne peuvent pas changer la passerelle en fonction du protocole donc c’est insuffisant, c’est du routage avancé…

[quote=“fran.b”]Ton histoire n’est pas simple. En fait avec netfilter, tu vas marquer les paquets, par exemple

iptables -A PREROUTING -i eth0 -p tcp --dport 25 -j MARK --set-mark 25

va mettre la marque 25 sur les paquets à destination du port 25.

Puis avec ip (paquet iproute2), tu spécifies la route pour les paquets marqués:

Il te faut créer une table smtp dans les tables de routages puis dire d’utiliser cette table pour les paquets marqués 25:

ip rule add fwmark 25 table smtp

Je te suggère de lire http://www.linux-france.org/prj/inetdoc/guides/Advanced-routing-Howto/ particulièrement le chapitre 9 et le 11.

Les règles NAT ne peuvent pas changer la passerelle en fonction du protocole donc c’est insuffisant, c’est du routage avancé…[/quote]

Voila, c’est ce que je voulais dire :mrgreen:

Merci !!!
bon et bien je vais encore m’arracher les cheveux… :013

merci pour l’instant…je reviens vers vous pour vous dire si cela fonctionne.
:118

Alors, tu t’en sors ?
De mon côté, j’ai pu me monter une machine avec 3 interfaces et 2 accès wan, et je te propose le script suivant :

#!/bin/bash

# Prérequis :
# les interfaces eth0, eth1 et eth2 sont correctement configurées (ip, masque et passerelle) dans le fichier /etc/network/interfaces
# les accès internet sont OK sur les réseaux 192.168.1.0 et 192.168.200.0
# je suis parti du postulat que ton dns était hébergé à l'extérieur (ex:opendns)

#activation du partage de connexion
echo 1 > /proc/sys/net/ipv4/ip_forward

# Initialisation de la table FILTER
iptables -t filter -F
iptables -t filter -X
iptables -t filter -P INPUT   DROP
iptables -t filter -P OUTPUT  DROP
iptables -t filter -P FORWARD DROP

# Initialisation de la table NAT
iptables -t nat -F
iptables -t nat -X 
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT

# Initialisation de la table MANGLE
iptables -t mangle -F
iptables -t mangle -X 
iptables -t mangle -P PREROUTING  ACCEPT
iptables -t mangle -P INPUT       ACCEPT
iptables -t mangle -P OUTPUT      ACCEPT
iptables -t mangle -P FORWARD     ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

##### On laisse passer le trafic retour des connexions déjà établies sur les 2 interfaces de sortie
iptables -t filter -A FORWARD -i eth1 -o eth0 -s 0.0.0.0/0 -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -A FORWARD -i eth2 -o eth0 -s 0.0.0.0/0 -d 192.168.0.0/24 -m state --state ESTABLISHED,RELATED -j ACCEPT


##### Trafic vers ETH1 (Mails)

#smtp-25 et smpts-465
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 -j MARK --set-mark 25
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -p tcp --dport 25 -m state ! --state INVALID -j ACCEPT

iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 465 -j MARK --set-mark 465
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -p tcp --dport 465 -m state ! --state INVALID -j ACCEPT

#pop-110 et pops-995
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 110 -j MARK --set-mark 110
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -p tcp --dport 110 -m state ! --state INVALID -j ACCEPT

iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 995 -j MARK --set-mark 995
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -p tcp --dport 995 -m state ! --state INVALID -j ACCEPT


##### Trafic vers ETH2 (surf)

#web-80 et webs-443
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 -j MARK --set-mark 80
iptables -A FORWARD -i eth0 -o eth2 -s 192.168.0.0/24 -p tcp --dport 80 -m state ! --state INVALID -j ACCEPT

iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 443 -j MARK --set-mark 443
iptables -A FORWARD -i eth0 -o eth2 -s 192.168.0.0/24 -p tcp --dport 443 -m state ! --state INVALID -j ACCEPT

#dns-53udp
iptables -A PREROUTING -i eth0 -t mangle -p udp --dport 53 -j MARK --set-mark 53
iptables -t filter -A FORWARD -i eth0 -o eth2 -s 192.168.0.0/24 -p udp --dport 53 -m state ! --state INVALID -j ACCEPT


##### Masquerading (substitution de l'adresse source par l'adresse de l'interface de sortie)
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.0/24 -j MASQUERADE

Ensuite, y a des commandes à rentrer depuis un terminal en root :

Déclaration des tables de routage alternatives :

  echo 210 mail >> /etc/iproute2/rt_tables
  echo 220 surf >> /etc/iproute2/rt_tables

Mise en place des règles de routage des paquets pop/pops/smtp/smtps via la table “mail”

  debianfw:/home/ced# ip rule add fwmark 25 table mail
  debianfw:/home/ced# ip rule add fwmark 110 table mail
  debianfw:/home/ced# ip rule add fwmark 465 table mail
  debianfw:/home/ced# ip rule add fwmark 995 table mail

Mise en place des règles de routage des paquets http, https et dns via la table “surf” :

  debianfw:/home/ced# ip rule add fwmark 80 table surf
  debianfw:/home/ced# ip rule add fwmark 443 table surf
  debianfw:/home/ced# ip rule add fwmark 53 table surf

Création des tables “mail” et “surf” avec leurs routes par défaut respectives :

  debianfw:/home/ced# ip route add default via 192.168.1.1 dev eth1 table mail
  debianfw:/home/ced# ip route add default via 192.168.200.1 dev eth2 table surf

Je n’ai pas pu tout tester (infrastructure assez hermétique dans ma boite, pour l’un des 2 wan…) alors si des pro (fran.b ou pascalhambourg? :mrgreen:) y jettent un coup d’oeil et corrigent/critiquent, ca sera avec grand plaisir :041

Mes remarques :

  • en l’état, le serveur ne peut rien faire en terme de connexion (toutes les chaines de la table “filter” son à DROP), donc il ne fera que du routage (on pourra pas le pinguer, il ne pourra pas pinguer, il n’accèdera pas à internet,… bref RIEN :005 ) - il faudra rajouter des règles si tu veux pouvoir le pinguer, le contrôler via ssh par exemple (ca peut servir)

  • Je ne sais pas si la résolution dns va fonctionner pour le trafic mail (car elle se fait via l’autre chemin)

  • Je crois que je confond masquerade et snat… :090

tout d’abord merci pour ce script et conseils !! :041
sinon effectivement, le routeur ne fait que router…
le smtp ne fonctionne pas comme souhaité. :unamused:

J’ai eu une autre reflexion… :017
si je dis que mon eth1 est ma connexion principale, et que tout le monde passe par la pour internet et mail.
et que la je lui dis…mais non mais non je te bloque tout sauf le smtp.
Est il plus simple de lui dire alors le reste passe par ma connexion internet eth2

Vous voyez la démarche ?

Vaguement : tu changes juste la politique d’aiguillage, en fait… Si tu te bases stricto sensu sur le script que je t’ai mis, t’as juste 2 règles iptables et 2 règles de routage à changer. 0ù est ce que tu bloques ?
Tu peux aussi éventuellement changer les noms des tables secondaires qui du coup ne seront plus très explicites.

[quote=“dric64”]Vaguement : tu changes juste la politique d’aiguillage, en fait… Si tu te bases stricto sensu sur le script que je t’ai mis, t’as juste 2 règles iptables et 2 règles de routage à changer. 0ù est ce que tu bloques ?
Tu peux aussi éventuellement changer les noms des tables secondaires qui du coup ne seront plus très explicites.[/quote]

pour le vaguement…
au lieu de dire tout passe par eth2 sauf le smtp que je redirige vers le eth1, n’est il pas plus simple de dire: tout doit passer par eth1, mais je bloque tout sauf le smtp, comme ça je n’ai pas a le rediriger vu que c’est pas façile. Ce que je redirige c’est tout le reste vers le eth2.
:108 :119

c’est mieux expliqué ou pas du tout ? :slightly_smiling:

Ben je trouve que ca revient au même… Dans les 2 cas, t’as 2 sortes de trafic : smtp et le reste, donc 2 sorte de marques de paquets minimum, donc 2 routages alternatifs. Puis pour les règles iptables, pareil : smtp, et tout le reste (c-a-d tous les ports de destinations différents de 25) :

#smtp (25/tcp)
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 -j MARK --set-mark 25
iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -p tcp --dport 25 -m state ! --state INVALID -j ACCEPT

#le reste (tcp!=25 et udp)
iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 -j MARK --set-mark 999
iptables -A PREROUTING -i eth0 -t mangle -p udp -j MARK --set-mark 999
iptables -A FORWARD -i eth0 -o eth2 -s 192.168.0.0/24 -p tcp ! --dport 25 -m state ! --state INVALID -j ACCEPT
iptables -A FORWARD -i eth0 -o eth2 -s 192.168.0.0/24 -p udp -m state ! --state INVALID -j ACCEPT

Je pense que ca devrait marcher, mais je n’ai pas testé.

echo 210 smtp >> /etc/iproute2/rt_tables
echo 220 lereste >> /etc/iproute2/rt_tables
ip rule add fwmark 25 table smtp
ip rule add fwmark 999 table lereste
ip route add default via 192.168.1.1 dev eth1 table smtp
ip route add default via 192.168.200.1 dev eth2 table lereste

Mais je n’aime pas beaucoup cette règle poubelle “tout le reste”, je préfère même si c’est plus fastidieux, faire une règle bien spécifique pour chaque protocole histoire de savoir vraiment ce qui rentre et ce qui sort, d’autant plus que dans ces conditions, la règle par défaut DROP sur la chaine FORWARD ne sert plus à grand chose.
Mais ne prends pas tout ce que je dis pour argent comptant, teste bien et fait tes propres recherche de ton côté, je suis loin d’etre un spécialiste de netfilter, même si ca m’interesse beaucoup (c’est pour ca d’ailleurs que je saute sur tous les fils qui le concernent :blush: )

Coucou !
Me revoilà !!!
Bon j’ai de nouveau appliqué ton premier script dric64 et j’ai toujours le même soucis.
Mon wan1 est sur le eth2 (192.168.200.0) et le wan2 sur le eth1 (192.168.1.0).
Sur le wan1 j’ai une freebox et sur le wan2 une connexion sdsl nérim.
Depuis un ordi du réseau 192.168.0.0 (eth0 192.168.0.254 du serveur) quand j’envoie un mail et bien il ne part pas…erreur smtp.
Dans les paramètres du client messagerie en smtp j’ai smtp.free.fr .
Tout les ordis du réseaux sont déjà avec ce smtp et le but était de ne pas changer de smtp dans mon client de messagerie.

:017