Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
Une interrogation IPTABLES et IP RULE
Envoyé par: zoummuoz

Bonjour à tous,
Comme toujours dans mon cas, au bout du bout je me tourne vers vous ...
MON PERIMETRE :
Une debian stable 3.1R2 noyau 2.6.8-2-386
Trois cartes reseau.
LAN : 89.0.7.0 (oui je sais mais bon c'est comme ca !)
WAN1 : 192.168.100.0 -> routeur0 192.168.100.1
WAN2 : 192.168.101.0 -> routeur1 192.168.101.1
-> routeur2 192.168.101.2

MA PROBLEMATIQUE :
Le LAN sort sur le net via le routeur par defaut routeur0 : 192.168.100.1.
Si la liaison routeur0 tombe je veux basculer mon trafic sur routeur1 et routeur2 en séparant les flux ...
Jusque là tout va bien. J'ai donc :

INTERFACES :
auto eth0
iface eth0 inet static
address 89.0.7.7
netmask 255.255.255.0
network 89.0.7.0
broadcast 89.0.7.255

auto eth1
iface eth1 inet static
address 192.168.100.254
netmask 255.255.255.0
broadcast 192.168.100.255
gateway 192.168.100.1

auto eth2
iface eth2 inet static
address 192.168.101.254
netmask 255.255.255.0
broadcast 192.168.101.255

auto eth2:1
iface eth2:1 inet static
address 192.168.101.101
netmask 255.255.255.0
broadcast 192.168.101.255

IPRULES :
#*************************
# Debut des definitions.
#-------------------------

#clear
ip route flush cache

ip rule del fwmark 1
ip rule del fwmark 2
ip rule del fwmark 3
ip route del table 1
ip route del table 2
ip route del table 3

# Regle de transmission aux bonnes tables de routages
# Regle bouygues
ip rule add fwmark 1 table 1
# Regle orange1
ip rule add fwmark 2 table 2
# Regle orange2
ip rule add fwmark 3 table 3

# Creation des tables de routages pour les differentes lignes XDSL
# Vers bouygues
ip route add default via 192.168.100.1 dev eth1 table 1
# Autres flux
ip route add default via 192.168.101.1 dev eth2 table 2
# Backup
ip route add default via 192.168.101.2 dev eth2 table 3

ip route flush cache

Puis IPTABLES :
#*************************
# Debut des definitions.
#-------------------------

clear
IPTABLES="iptables"

FILTERPOLICYDEFAULT_INPUT="ACCEPT"
FILTERPOLICYDEFAULT_OUTPUT="ACCEPT"
FILTERPOLICYDEFAULT_FORWARD="ACCEPT"
NATPOLICYDEFAULT_PREROUTING="ACCEPT"
NATPOLICYDEFAULT_POSTROUTING="ACCEPT"
PORTS_UN="1024:65535"

# Passerelles

# On flush la table de FORWARD, INPUT et OUTPUT
$IPTABLES -F
$IPTABLES -X
$IPTABLES -F FORWARD
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT

# On flush la table de nat
$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X

#on flush log_and_drop
$IPTABLES -X log_and_drop
$IPTABLES -N log_and_drop


echo "#--------------------------------"
echo "# Regles par defaut"

echo "Regle FILTER INPUT : $FILTERPOLICYDEFAULT_INPUT"
$IPTABLES -t filter -P INPUT $FILTERPOLICYDEFAULT_INPUT

echo "Regle FILTER OUTPUT : $FILTERPOLICYDEFAULT_OUTPUT"
$IPTABLES -t filter -P OUTPUT $FILTERPOLICYDEFAULT_OUTPUT

echo "Regle FILTER FORWARD : $FILTERPOLICYDEFAULT_FORWARD"
$IPTABLES -t filter -P FORWARD $FILTERPOLICYDEFAULT_FORWARD

echo "#--------------------------------"
echo "# Translation d adresse"
echo "Regle PREROUTING : $NATPOLICYDEFAULT_PREROUTING"
$IPTABLES -t nat -P PREROUTING $NATPOLICYDEFAULT_PREROUTING
echo "Regle POSTROUTING : $NATPOLICYDEFAULT_POSTROUTING"
$IPTABLES -t nat -P POSTROUTING $NATPOLICYDEFAULT_POSTROUTING

#*************************
# Debut des commandes.
#-------------------------

# On active le routage
echo 1 > /proc/sys/net/ipv4/ip_forward

# Enregistrement dans syslog des paquets rejetes pas rp_filter
#echo 1 > /proc/sys/net/ipv4/conf/all/log_martians

# Un paquet revient par le meme chemin
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 0 > $f
done

# Definition de log_and_drop
#$IPTABLES -A log_and_drop -j LOG --log-level debug --log-prefix "filter drop "
#$IPTABLES -A log_and_drop -j ACCEPT

#*************************
# Debut des regles.
#-------------------------

$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/8 -d 89.31.147.47 -p all -j MARK --set-mark 1
$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/8 -d 62.97.236.181 -p all -j MARK --set-mark 1


Bon -> si vous êtes arrivé là c'est que mon post vous passionne !!!

J'ajoute un petit ip route list table main :
89.0.7.0/24 dev eth0 proto kernel scope link src 89.0.7.7
192.168.100.0/24 dev eth1 proto kernel scope link src 192.168.100.254
192.168.101.0/24 dev eth2 proto kernel scope link src 192.168.101.254
default via 192.168.100.1 dev eth1

Ben voila mon soucis :
POURQUOI J'AI PAS MES TABLES 1 ET 2 ... ??

Pourquoi mes preroutings ne fonctionnent pas ?

MAIS par moment cela fonctionne ...?????

Merci de vos avis.

Poste le Thursday 23 June 2011 21:59:00
Répondre     Citer    
Re: Une interrogation IPTABLES et IP RULE
Envoyé par: zoummuoz

Erreur dans mon post :

#*************************
# Debut des regles.
#-------------------------

$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/8 -d 89.31.147.47 -p all -j MARK --set-mark 2
$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/8 -d 62.97.236.181 -p all -j MARK --set-mark 2

Ce qui ne marche pas est que ces deux adresses passent toujours par la route par default et non pas par le router1

Poste le Friday 24 June 2011 00:55:20
Répondre     Citer    
Re: Une interrogation IPTABLES et IP RULE
Envoyé par: zoummuoz

Des corrections faites :
#*************************
# Debut des regles.
#-------------------------

$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/24 -d 89.31.147.47 -p all -j MARK --set-mark 2
$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/24 -d 62.97.236.181 -p all -j MARK --set-mark 2

Mais j'obtiens le même résultat en appliquant le script ...

Détermination de l'itinéraire vers agriculture.gouv.fr [89.31.147.47]
avec un maximum de 30 sauts :

1 <1 ms <1 ms <1 ms 89.0.7.7
2 <1 ms <1 ms <1 ms 192.168.100.1

Merci de vos commentaires.

Poste le Friday 24 June 2011 09:30:34
Répondre     Citer    
Re: Une interrogation IPTABLES et IP RULE
Envoyé par: zoummuoz

Des corrections faites :
#*************************
# Debut des regles.
#-------------------------

$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/24 -d 89.31.147.47 -p all -j MARK --set-mark 2
$IPTABLES -A PREROUTING -t mangle -s 89.0.7.0/24 -d 62.97.236.181 -p all -j MARK --set-mark 2

Mais j'obtiens le même résultat en appliquant le script ...

Détermination de l'itinéraire vers 89.31.147.47
avec un maximum de 30 sauts :

1 <1 ms <1 ms <1 ms 89.0.7.7
2 <1 ms <1 ms <1 ms 192.168.100.1

Merci de vos commentaires.

Poste le Friday 24 June 2011 09:38:29
Répondre     Citer    
Re: Une interrogation IPTABLES et IP RULE
Envoyé par: zoummuoz

De plus : c'est a n'y rien comprendre ...

passerelle:/etc/init.d# iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 7526K packets, 6276M bytes)
pkts bytes target prot opt in out source destination
0 0 MARK all -- eth0 * 0.0.0.0/0 89.104.200.99 MARK set 0x2
0 0 MARK all -- eth0 * 0.0.0.0/0 89.31.147.47 MARK set 0x2
0 0 MARK all -- eth0 * 0.0.0.0/0 89.161.214.217 MARK set 0x2
0 0 MARK all -- eth0 * 0.0.0.0/0 62.97.236.181 MARK set 0x2
8 722 MARK all -- * * 89.0.7.0/24 192.168.101.0/24 MARK set 0x2

Chain INPUT (policy ACCEPT 129K packets, 15M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 7396K packets, 6261M bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 168K packets, 15M bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 7565K packets, 6276M bytes)
pkts bytes target prot opt in out source destination

passerelle:/etc/init.d# traceroute agriculture.gouv.fr
traceroute to agriculture.gouv.fr (89.31.147.47), 30 hops max, 38 byte packets
1 192.168.100.1 (192.168.100.1) 0.781 ms 0.735 ms 0.716 ms
2 *

Poste le Friday 24 June 2011 10:33:28
Répondre     Citer    
Re: Une interrogation IPTABLES et IP RULE
Envoyé par: Ogdoade

Quel joli monologue winking smiley

Je viens de mettre ça en place dans notre académie (en test pour le moment).
Nous utilisons les pare-feux AMON (développé à Dijon par EOLE) :

Le principe repose sur un shéma :

ROUTEUR 1 - SWITCH1----- INTERFACE PHYSIQUE ETH0 PAREFEU
ROUTEUR 2 - SWITCH1----- INTERFACE PHYSIQUE ETHO PAREFEU

Et on gère un alias de l'interface eth0 configurée sur le réseau d'interco du routeur 2 (que ça soit un adresse public ou privé d'ailleurs).

[eole.orion.education.fr]

Voici le script utilisé :
agregation.sh

Il se base sur un fichier de conf de ce type :

# Delai entre les tests d'etat
PAUSE=%%ag_pause

# Timout de la requete DNS
TIMEOUT=%%ag_timeout

# Adresse DNS testee
# Adresse(s) DNS testee
MIRE[0]=%%ag_testdns
MIRE[1]=%%ag_testdns2

# Nombre de succes ou d'echecs avant changement d'etat
NBSUCCES=%%ag_nbsucces
NBECHECS=%%ag_nbechecs

# Interface 1
# Adresse IP
WAN1=%%adresse_ip_eth0
# Adresse reseau
NET1=%%adresse_network_eth0
# Adresse de la passerelle
GW1=%%adresse_ip_gw
# Poid de la ligne (entier)
W1=%%ag_weight_eth0
# Adresse du(des) serveur(s) dns
%for %%ag_dns_eth0_ip in %%ag_dns_eth0
DNS1[%%ag_dns_eth0_ip.index]=%%ag_dns_eth0_ip
%end for
# Adresse(s) forcees sur le lien 1
%for %%ag_force_eth0_ip in %%ag_force_eth0
FORCE1[%%ag_force_eth0_ip.index]=%%ag_force_eth0_ip
%end for

# Interface 2
# Adresse IP
WAN2=%%alias_ip_eth0[0]
# Adresse reseau
NET2=%%alias_ip_eth0[0].alias_network_eth0
# Adresse de la passerelle
GW2=%%alias_ip_eth0[0].alias_gw_eth0
# Poid de la ligne (entier)
W2=%%ag_weight_eth0_0
# Adresse du(des) serveur(s) dns (separes par un espace)
%for %%ag_dns_eth0_0_ip in %%ag_dns_eth0_0
DNS2[%%ag_dns_eth0_0_ip.index]=%%ag_dns_eth0_0_ip
%end for
# Adresse(s) forcees sur le lien 2
%for %%ag_force_eth0_0_ip in %%ag_force_eth0_0
FORCE2[%%ag_force_eth0_0_ip.index]=%%ag_force_eth0_0_ip
%end for

Cela me permet de :

- définir des routes statiques sur un lien (pour le vpn par exemple)
- d'utiliser les deux liens simultanément avec définition d'un poids de lien
- basculer toutes les connexions sur le lien restant quand un des deux tombe.

Ca fonctionne impec. Par contre, ce n'est pas moi qui l'ai fait mais je peux t'expliquer un peu plus le script au cas où.

Bon courage.

Og.

Poste le Sunday 26 February 2012 11:39:09
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
Une interrogation IPTABLES et IP RULE
Un problème avec une commande du shell ? Comment utiliser la crontab ? Vous avez des soucis pour la gestion réseau sous Linux ? Pour vous la gestion des utilisateurs/groupes est du chinois ? Etc... Posez donc vos questions ici.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons