web-dev-qa-db-fra.com

Plusieurs interfaces physiques avec IPS sur le même sous-réseau

J'ai une boîte Linux avec 9 niques dessus et je veux huit d'entre eux d'avoir des adresses uniques sur le même sous-réseau, par exemple .:

ifconfig eth1 192.168.123.1 netmask 255.255.0.0
ifconfig eth2 192.168.123.2 netmask 255.255.0.0
ifconfig eth3 192.168.123.3 netmask 255.255.0.0
...
ifconfig eth8 192.168.123.8 netmask 255.255.0.0

Le comportement de l'ARP par défaut est extrêmement contre-productif dans ce cas, car il en résulte tout le trafic de tous les IP qui passe exclusivement par eth1, qui est à peu près exactement le contraire de ce que je veux.

Je suis donc fouillé et j'ai fini par apporter des modifications à la SYSCTL telles que ceci:

net.ipv4.conf.all.arp_filter=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Cela a prévenu eth1 d'emmener tous les autres, mais je ne peux toujours pas ping autre chose que eth1 l'adresse de la réussite avec succès. (par exemple, d'un deuxième ordinateur sur le même commutateur, seul 192.168.123.1 répond à Ping)

Je suppose que j'ai besoin de faire quelque chose avec des arpables ou de l'IPRoute ou quelque chose, mais je suis perdu en mer dans ce domaine.

Points bonus: La solution doit être compatible avec Linux 2.6.27.27. (Plus spécifiquement, SLAX 6.1.2)

13
frustrated_tester

Vous avez besoin d'un modèle de système final fort . Linux est fondamentalement construit autour d'un modèle de système d'envoi faible, ce n'est donc vraiment pas un bon choix de système d'exploitation pour cette application.

Vous devrez simuler chaque morceau du comportement dont vous avez besoin, d'ARP à l'acheminement des stratégies vers la sélection d'adresses source. Vous aurez également besoin de filtres pour empêcher les paquets d'être acceptés s'ils arrivent sur la mauvaise interface.

Les étapes définitivement nécessaires sont:

  1. Configurez ARP_FILTER = 1 et ARP_IGNORE = 2 sur toutes les interfaces.

  2. Ajouter une interface par interface, routage à la source pour le trafic sortant. (L'interface de destination doit être choisie en fonction de l'adresse source.)

  3. Ajoutez un filtrage par entrée par interface aux paquets de goutte silencieusement reçus sur la mauvaise interface. (Paquets avec une adresse de destination attribuée à une autre interface.)

Malheureusement, il n'y a pas de consensus sur la question de savoir si ces trois étapes sont tout ce qui est nécessaire. Le modèle de système final faible est intégré à l'ensemble de la pile TCP/IP de Linux, et il n'est pas clair ce qui pourrait mal tourner avec des problèmes subtils tels que la multidiffusion.

Ce n'est pas clair comment vous choisiriez l'interface de sortie pour les émissions, par exemple. Devrait-il sortir tous? Peut-être. Quel est le bon comportement si la pile reçoit une émission sortante avec une adresse source non attribuée à l'une des interfaces?

Encore une fois, vous avez choisi le mauvais outil pour le travail.

17
David Schwartz

Vous souhaitiez plus probablement créer un pont avec les interfaces 8/9 et attribuer une adresse IP à ce pont (paquet de pont-utils, commande 'BRCTL Add').

De cette façon, le pont agira comme un commutateur et peut avoir une adresse IP dans votre sous-réseau.

7
Be2eB

Je recommanderais de lier les interfaces physiques, puis configurez toutes les adresses de l'interface unique.

Vous aurez également besoin d'une assistance sur le commutateur.

Voici un mini-tutoriel que vous pouvez utiliser pour commencer.

4
bahamat

Il semble que vous souhaitiez un environnement de test équivalent à 9 machines distinctes et croyait que 9 interfaces sur une machine pouvaient imiter cela. Sous Linux, il ne peut tout simplement pas faire cela à travers une seule pile pour des raisons David Schwartz décrites. BTDT et avoir les cicatrices. C'était assez mauvais avec 2 interfaces.

Une meilleure solution peut être de gérer 8 ou 9 machines virtuelles discrètes dans votre hôte et des interfaces de pont 8 ou 9 à ces machines virtuelles.

4
Skaperen

Oui, il est possible de suivre la suggestion David Schwartz:

echo -ne 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
echo -ne 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter

// Pour une fonctionnalité appropriée, I.E. ARP répond d'ETH1 à être générées lorsque l'ETH0 et l'ETH1 sont dans le même sous-réseau

echo -ne 0 > /proc/sys/net/ipv4/conf/all/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth0/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo -ne 0 > /proc/sys/net/ipv4/conf/eth1/arp_filter
echo -ne 2 > /proc/sys/net/ipv4/conf/eth1/arp_ignore

//Create a table called "new_rt_table" and create a routing rule that says any packet with a mark equal to '1' gets routed according to the "new_rt_table"(can name it whatever you want) table. The file /etc/iproute2/rt_tables is the only source of table names on the system. Internally, routing tables have integer identifiers.

echo 1 new_rt_table >> /etc/iproute2/rt_tables
ip rule add from all fwmark 1 table new_rt_table

// Configurez la table "NEW_RT_TABLE" pour acheminer les paquets via Eth1

ip route add default dev eth1 table new_rt_table
ip route show table new_rt_table

// marque les paquets de sorte que "iP iP" puisse l'acheminer via Eth1

iptables -F -t mangle
iptables -t mangle -I OUTPUT -s <ip addr of eth1> -o eth0 -j MARK --set-mark 1

// Activer la prise en charge des tables de routage multiples dans la configuration du noyau.

Configuration du noyau

→ Support de réseau → Options de réseautage

[*] IP: Routeur avancé

[*] IP: routage des politiques

Config_IP_Advanced_Router

Config_ip_multiple_tables

// Les étapes ci-dessus redirigent les paquets destinés à être émis d'ETH0 pour sortir correctement de l'ETH1.

Veuillez suggérer toute autre méthode si quelqu'un le fait fonctionner.

0
noel av