Ce sont vraiment deux questions, et je ne suis pas sûr qu'elles soient liées.
1) Si les ordinateurs sont connectés par LAN Ethernet via un commutateur, et non par WLAN, tout le trafic sur le LAN est en principe visible pour tous les périphériques qui y sont connectés. Pas besoin de faire du masquerading / forwarding ou d'utiliser des règles iptables. Donc, lancez simplement Wireshark sur n’importe quel ordinateur, disons, l’ordinateur B, et vous devriez voir le trafic entre l’ordinateur A et le routeur.
Si cela ne fonctionne pas, envoyez une requête ping à l'ordinateur B à partir de l'ordinateur A. Envoyez ensuite une commande ping au routeur à partir de l'ordinateur A. Si les paquets de la première requête ping ne s'affichent pas, quelque chose de l'installation de Wireshark ne fonctionnera pas correctement. Si vous ne voyez que les paquets du premier ping, et non du second, l'interface supprime pour une raison quelconque les paquets qui ne sont pas destinés à cet ordinateur, ou si quelque chose filtre les paquets, vérifiez iptables sur l'ordinateur B, etc.
Edit : Ce qui peut également arriver, c'est que votre routeur ne joue pas le rôle de commutateur. J'ai testé un peu et j'ai constaté que j'avais en fait un routeur où les 4 ports LAN apparaissent comme des périphériques distincts et sont pontés (y compris le WLAN) à l'aide d'un pont de noyau Linux. Ce type de pont conserve une trace des adresses MAC qu’il a vues et ne le transmet qu’au port sur lequel il a vu l’adresse MAC de destination. Dans ce cas, les paquets des deux ordinateurs ne peuvent pas être vus sur l'autre machine.
Solutions: (a) Trouvez un autre commutateur Ethernet et connectez le tout, ou (b) utilisez la méthode de la passerelle.
2) Si vous souhaitez utiliser l'ordinateur B comme passerelle pour l'ordinateur A (il n'est pas nécessaire de simplement surveiller le trafic sur un réseau local Ethernet, mais peut être nécessaire, par exemple pour un réseau local sans fil), vous devez configurer l'ordinateur A pour qu'il utilise l'ordinateur B comme passerelle. . Très probablement, votre "Internet" dans votre configuration est un routeur domestique, qui agit en tant que serveur DHCP, attribue des adresses IP à l'ordinateur A et à l'ordinateur B, et leur dit d'utiliser le routeur en tant que passerelle. Donc, utilisez route
ou ip route
pour définir le bon chemin sur l'ordinateur A. Assurez-vous qu'il n'y a pas d'autres itinéraires.
Le script suivant me permet de configurer le transfert (même s’il n’est peut-être pas optimal):
#!/bin/bash
# forward traffic on the same $IF for one particular $ADDR, acting as gateway
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat
IF="eth0"
ADDR="192.168.178.25"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -A FORWARD -i $IF -o $IF -d $ADDR -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $IF -o $IF -s $ADDR -j ACCEPT
iptables -t nat -A POSTROUTING -s $ADDR -j MASQUERADE