9 votes

Réponse sur la même interface que celle d'où provient la requête

Tout d'abord, je sais que ce n'est pas l'objectif de la propriété intellectuelle. Mais comme d'habitude, c'est ainsi que je dois le faire fonctionner.

Je travaille pour une société de sécurité. Il y a au moins 2 interfaces réseau. Les deux interfaces doivent avoir une passerelle par défaut. Une interface est une interface Ethernet par défaut, la seconde est une interface 3g. Les deux se connectent à l'Internet. Différentes configurations sont possibles, par exemple une interface est la principale et l'autre est la sauvegarde. Ou l'interface Ethernet est le LAN local (avec différents sous-réseaux, passerelle) et le modem 3G est la connexion Internet.

Ma question principale est la suivante : comment puis-je faire en sorte que la pile TCP/IP de Linux réponde sur la même interface que celle d'où provient la demande ?

La deuxième question est la suivante : comment puis-je établir une connexion via l'interface de mon choix, sans jouer avec différents sous-réseaux sur différentes interfaces.

12voto

EddyR Points 173

Vous pouvez définir des routes sous Linux en vous basant sur l'adresse IP source. Bien qu'il soit possible sous Linux de se lier à une interface spécifique, c'est très rare. Le routage basé sur l'IP source vous permettra de créer une passerelle par défaut par interface sortante. Puisque le socket du serveur qui traite les requêtes peut être lié à une IP, cela permet de s'assurer que les réponses sont envoyées depuis la même interface que celle par laquelle elles sont arrivées. (Si le serveur écoute sur l'adresse générique ( 0.0.0.0 ), et qui n'est pas lié à une interface spécifique, vous ne pourrez pas utiliser cette méthode. Il devrait toujours être possible d'utiliser le module conntrack, et les marques iptables, mais je n'en parlerai pas ici).

Pour ce faire, vous pouvez créer une autre table de routage en utilisant le ip commande. Le '10' est ici arbitraire.

# 10.0.0.1 = gateway for the secondary interface
# 10.0.0.10 = ip address for the secondary interface eth1

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.10 table 10

Si vous vous liez à plusieurs adresses, ou si vous disposez de dhcp, vous pouvez créer une règle basée sur le sous-réseau.

ip route add default via 10.0.0.1 dev eth1 table 10
ip rule add from 10.0.0.0/8 table 10

Si vous êtes certain que le serveur est lié à un périphérique, une autre passerelle par défaut avec une métrique plus élevée suffira.

ip route add default via 10.0.0.1 dev eth1 metric 2

1voto

RyanBrady Points 1903

Je ne suis pas sûr que cela soit possible dans le sens général que vous souhaitez. Vous pouvez certainement contrôler l'interface réseau qu'un programme exécuté sur votre machine utilise en le liant à une adresse particulière.

Cependant, en général, je ne pense pas qu'il y ait un moyen de connecter les paquets réseau entrants aux paquets sortants. Le mieux que vous puissiez faire est de fournir des instructions au système du type "si vous essayez de vous connecter à ce réseau, utilisez toujours cette interface". Cela peut être fait de différentes manières via la table de routage du système ( iproute ) ou avec iptables règles de pare-feu.

Si c'est pour des raisons de sécurité, avez-vous pensé à utiliser des machines virtuelles fonctionnant sur votre serveur physique ? Vous pourriez configurer une VM pour qu'elle n'ait accès qu'à une interface, et l'autre VM pour qu'elle n'ait accès qu'à l'autre. Comme la machine virtuelle ne peut pas du tout voir l'autre interface, elle ne peut en aucun cas répondre aux paquets provenant du mauvais réseau.

Vous devriez probablement aussi regarder cette question de défaut de serveur qui explique comment contrôler l'interface sur laquelle les requêtes arp sont envoyées. Vous devriez également consulter le sysctl rp_filter, qui peut être configuré pour ignorer les paquets qui apparaissent sur la mauvaise interface.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X