Vous n'êtes pas identifié.
Hello!
je viens de recevoir am 2e ligne internet... j'ai joué un peu avec les configs de mes cartes réseaux (eth1, eth2) de manière à ce que le net marche sur les deux.
maintenant vient la partie qui m'est complètement inconnue : comment faire, par exemple, pour que les requêtes web du réseau local passent toutes par eth2 SI eth2 est UP, et que les requêtes faites _depuis_ certains ports du serveur passent par eth1 SI eth1 est UP (ou failover sur l'interface up, évidemment...)
en gros... 6667 -> eth1, 80->eth2, ..... etc
Je pensais passer par iptables, mais je suis en train de me dire que ça va vite être le bronxe pour gérer le coup du "if down, then...."
quelqu'un aurait un bout de tuto, explications ou autres ?
je suis sur gentoo 2007.0, si jamais.
merci d'avance.
Dernière modification par phoenix818 (03 Jul 2007 16:13:03)
Hors ligne
bueno... après avoir tenté via iptables, j'ai vu que c'était pas très efficace (ou alors j'ai mal implémenté le truc..)
Quoi qu'il en soit, je me dirige vers une solution plus conventionnelle : iproute2 + MARK de iptables.
Voici mon script pour ip route :
#!/bin/bash IP_DEV1=`/sbin/ifconfig eth1 | grep "inet addr:" | awk '{print $2}' | sed -e s/addr://` NM_DEV1=`/sbin/ifconfig eth1 | grep "Mask:" | awk '{print $4}' | sed -e s/Mask://` GW_DEV1="`echo "$IP_DEV1" | cut -d '.' -f 1,2,3`.1" IP_DEV2=`/sbin/ifconfig eth2 | grep "inet addr:" | awk '{print $2}' | sed -e s/addr://` NM_DEV2=`/sbin/ifconfig eth2 | grep "Mask:" | awk '{print $4}' | sed -e s/Mask://` GW_DEV2="`echo "$IP_DEV2" | cut -d '.' -f 1,2,3`.1" # remove old routes echo 'flushing table "1" and "2"' /sbin/ip route flush table 1 /sbin/ip route flush table 2 # flushing rules echo 'flushing rules'; ip rule flush echo "Creating table 1"; /sbin/ip route add $NM_DEV1 dev eth1 src $IP_DEV1 table downloads /sbin/ip route add default via $GW_DEV1 table downloads echo 'Creating table 2'; /sbin/ip route add $NM_DEV2 dev eth2 src $IP_DEV2 table others /sbin/ip route add default via $GW_DEV2 table others #echo 'Setting default gateway for other' #/sbin/route add default gw $GW_DEV2 eth2 echo 'Adding rules'; /sbin/ip rule add fwmark 1 table downloads /sbin/ip rule add fwmark 2 table others
à part exploser complètement le route... il fait pas des masses.
Il faut savoir que j'ai une ip dynamique dans le lot (sur eth1)... l'autre est "fixe" via le routeur bluewin.
Voici les 2-3 trucs iptables, au cas où :
echo 'Dual Connect -> MARK'; echo ' ->eth1'; ${IPTABLES} -t mangle -A PREROUTING -p tcp --dport 6890:6999 -j MARK --set-mark 1 ${IPTABLES} -t mangle -A PREROUTING -p udp --dport 6890:6999 -j MARK --set-mark 1 ${IPTABLES} -t mangle -A PREROUTING -p udp --dport 80 -j MARK --set-mark 1 ${IPTABLES} -t mangle -A PREROUTING -i eth0 -p tcp --dport 21 -j MARK --set-mark 1 echo ' ->eth2'; ${IPTABLES} -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 2 ${IPTABLES} -t mangle -A PREROUTING -i eth0 -p tcp --dport 6666:6668 -j MARK --set-mark 2 ${IPTABLES} -t mangle -A PREROUTING -i eth0 -p udp --dport 25 -j MARK --set-mark 2
normalement, ca devrait marche (selon la doc que j'ai lue). Par contre, le soucis vient de mes tables de routage. J'ai ajouté dans /etc/iproute2/rt_table les deux tables "downloads" et "others".. il semblertait que ce soit au niveau du flush des règles ip que ça foire. Pourtant, je dois bien les virer, non?
si quelqu'un a une idée/solution...
Merci d'avance.
++
Hors ligne
Salut,
Si tes serveurs "écoutent" sur les deux interfaces, est-ce que tu as besoin de configurer un firewall?
A+.
Hors ligne
mon réseau est ainsi :
|-------[bluewin]---------| [LAN]----[server] | internet |-------[cablecom]-------|
le serveur a un firewall, pour 2-3 raisons dont du port-knocking et autres trucs de ce genre.
lan->server pas de fw, server->internet pas de fw, par contre l'inverse si. un firewall normal en somme, qui n'influence pas les tables de routage, qui, je le rappelle, sont le problème principal que j'ai.
Dernière modification par phoenix818 (03 Jul 2007 11:10:26)
Hors ligne
Salut,
Je me suis mal exprimé. Pourquoi est-ce que tu tient à router ton trafic et pas simplement laisser les serveurs écouter aux deux "portes"? Pour apache, une rewriterule devrait suffire à rediriger vers la bonne IP.
A+.
Hors ligne
parce que je tiens à ce que _mon_ trafic sortant soit en loadbalancing; parce que je veux que mon trafic sortant soit séparé en fonction de règles que je veux définir.
j'ai deux connex... pourquoi ne pas profiter pour faire le trafic privé sur l'une, et le trafic pro sur l'autre ?
ça part un peu hs, là. je ne pense pas avoir besoin de justifier le fait que je veuille profiter de mes deux lignes comme je l'entends, si ? -.-'
Hors ligne
Hello,
On en a déja parlé, mais techniquement la seule solution propre c'est d'avoir ta propre plage d'adresses et d'avoir des peerings avec tes deux ISP. Pas quelque chose dans le budget d'un privé, donc.
Le problème, c'est que vu de l'extérieur des deux lignes sont deux systèmes différents, et il faut donc faire attention à ce que le tout le trafic d'une connexion donnée passe par la même route.
Si tu alloues a chaque machine dual-homed deux adresses IP, tu peux utiliser iproute2 pour faire du policy routing en filtrant sur les adresses source, et laisser le NAT faire son boulot comme il l'entend; ce qui t'évite la case netfilter.
Après, ca résoud pas le problème du failover si une des deux lignes pète. Je te recommande de jeter un oeil à GNU Zebra. En installant juste zebra (sans les protocoles de routage), tu peux configurer plusieurs routes statiques dans un ordre donné, le démon contrôlera les interfaces et insérera dans le kernel les règles appropriées a l'état du réseau.
Hors ligne
-.- je veux juste que les packets marqués "1" utilisent la table 1, et les packets marqués "2" la table 2... pour le coup de la ligne qui pète, j'ai de quoi réfléchir un peu, c'est pas bien dur, une fois que je saurai pourquoi mes table de routage plantent...
Hors ligne
bueno. je peux clore le sujet.
j'ai trouvé :->
voici le nouveau script dualconnect :
#!/bin/bash IP_DEV1=`/sbin/ifconfig eth1 | grep "inet addr:" | awk '{print $2}' | sed -e s/addr://` NM_DEV1=`/sbin/ifconfig eth1 | grep "Mask:" | awk '{print $4}' | sed -e s/Mask://` GW_DEV1="`echo "$IP_DEV1" | cut -d '.' -f 1,2,3`.1" IP_DEV2=`/sbin/ifconfig eth2 | grep "inet addr:" | awk '{print $2}' | sed -e s/addr://` NM_DEV2=`/sbin/ifconfig eth2 | grep "Mask:" | awk '{print $4}' | sed -e s/Mask://` GW_DEV2="`echo "$IP_DEV2" | cut -d '.' -f 1,2,3`.1" # remove old routes echo 'flushing table "others"...' /sbin/ip route flush table others # creating standard route echo 'Setting default gateway for other...' /sbin/route add default gw $GW_DEV2 eth2 # flushing rules echo 'flushing rules...'; ip rule flush # creating basic rules # 32766: from all lookup main # 32767: from all lookup default echo 'Creating basic route rules...'; /sbin/ip rule add from all table main /sbin/ip rule add from all table default # special route table echo 'Creating table others...'; /sbin/ip route add $NM_DEV1 dev eth1 src $IP_DEV1 table others /sbin/ip route add default via $GW_DEV2 table others # special rules echo 'Adding rules...'; /sbin/ip rule add fwmark 2 table others
Explications sur le bug que j'avais :
lors du flush des rules existantes, je virais aussi celles de base. Et évidemment, si on les remet pas, ça marche plus.
J'ai vu ça en comparant les rules avant/après le lancement de mon script.
A présent, j'ai bien les deux connexions employées (je passe présentement par mon eth2, alors que irc passe par eth1).
les règles de firewall sont correctes (j'ai, comme vous pouvez le voir, viré l'appel à la 2e table. autant employer celle par défaut, et ajouter uniquement la spécial [merci BOFH pour cette remarque!] )
bref. sujet clos. maintenant, j'ai à peu près pigé le truc :-> et suis capable de le refaire. yipiiiie !!
Hors ligne