web-dev-qa-db-fra.com

Comment configurer deux itinéraires par défaut de Linux

Tl; dr

Comment configurer deux itinéraires par défaut sous Linux (correspondant à deux interfaces), telle que le trafic entrant des deux interfaces est accepté.

Scénario

J'ai un hôte ayant deux niques eth0 et eth1. Sa liaison à deux réseaux, disons:

  • Dev: eth0, IP: 1.1.1.4, Netmask: 255.255.255.0, Passerelle: 1.1.1.1

  • Dev: eth1, IP: 2.2.2.4, Netmask: 255.255.255.0, Passerelle: 2.2.2.1

(Les deux réseaux sont connectés à Internet.)

Les itinéraires sont (ip route show):

default via 1.1.1.1 dev eth0 metric 1
default via 2.2.2.1 dev eth1 metric 2
1.1.1.0/24 dev eth0 src 1.1.1.4
2.2.2.0/24 dev eth1 src 2.2.2.4

(Métrique inférieure signifie une priorité plus élevée.)


Maintenant quand quelqu'un pings 2.2.2.4 à partir d'un hôte externe (dire 4.4.4.4), il n'y a pas de réponse.

La sortie de tcpdump -i eth1 sur mon hôte est:

22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, length 64
22:41:28.439492 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 5, length 64
22:41:29.447666 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 6, length 64
22:41:30.455528 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 7, length 64

Après quelques recherches, il s'avère que lorsque la pile réseau Linux reçoit un paquet de 4.4.4.4, il vérifie sa table de routage pour voir quelle interface aurait dû être utilisée pour 4.4.4.4 (lequel est eth0 Dans la table de routage). Maintenant, comme le paquet est venu de eth1 Interface, Linux le défait tout simplement (cette stratégie est probablement d'empêcher l'usurpation IP).


Ce que je veux, c'est:

  • Le trafic sortant (à l'origine locale) devrait utiliser eth0 interface par défaut.

  • Le trafic entrant doit être accepté à partir des deux interfaces. (Donc 4.4.4.4 devrait être capable de ping à la fois 1.1.1.4 et 2.2.2.4)

6
Tanmay

Utiliser IProute2, vous pouvez faire quelque chose comme ceci:

echo "1 admin" >> /etc/iproute2/rt_tables
echo "2 users" >> /etc/iproute2/rt_tables

ip rule add from 192.168.122.40/32 dev eth0 table admin
ip rule add from 192.168.123.41/32 dev eth1 table users

ip route add default via 192.168.122.1 dev eth0 table admin
ip route add default via 192.168.123.1 dev eth1 table users

Maintenant, vous aurez deux tableaux de routage avec deux passerelles.

8
c4f4t0r

Ce phénomène s'appelle unicast RPF (transfert de trajet inverse) sous forme de filtre de chemin d'accès standard mais inversé sous Linux. Vous pouvez désactiver cela sans aucune conséquence négative importante (sauf si vous êtes un fournisseur de services Internet .. et un routeur).

echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter

Ensuite, votre exemple devrait fonctionner comme vous le souhaitez.

3
Jonas Bjork

Si votre application se lie à 0.0.0.0 Il est également nécessaire d'ajouter des règles telles que:

ip rule add from 0.0.0.0/32 to 192.168.122.0/24 dev eth0 table admin

ip rule add from 0.0.0.0/32 to 192.168.123.0/24 dev eth1 table users

1
hargut