Это действительно два вопроса, и я не уверен, что они связаны между собой.
1) Если компьютеры подключены через локальную сеть Ethernet через коммутатор, а не через беспроводную локальную сеть, весь трафик в локальной сети в принципе виден всем подключенным к нему устройствам. Нет необходимости делать маскировку / пересылку или использовать какие-либо приемлемые правила. Так что просто запустите Wireshark на любом компьютере, скажем, компьютере B, и вы должны увидеть трафик от компьютера A к маршрутизатору.
Если это не сработает, отправьте эхо-запрос на компьютер B с компьютера A. Затем выполните эхо-запрос на маршрутизатор с компьютера A. Если вы не видите пакеты с первого эхо-запроса, что-то с настройкой Wireshark работает неправильно. Если вы видите пакеты только с первого пинга, а не со второго пинга, интерфейс отбрасывает пакеты, не предназначенные для этого компьютера по какой-либо причине, или что-то фильтрует пакеты, поэтому проверьте iptables на компьютере B и т.д.
Изменить: Что также может произойти, это то, что ваш маршрутизатор не действует как коммутатор. Я немного протестировал и обнаружил, что у меня действительно есть один маршрутизатор, в котором все 4 порта LAN отображаются как отдельные устройства и соединены мостом (включая WLAN) с использованием моста ядра Linux. Этот тип моста отслеживает MAC-адреса, которые он видел, и только перенаправляет на порт, где он видел MAC-адрес назначения. В этом случае пакеты с двух компьютеров не могут быть видны на другом компьютере.
Решения: (a) Найдите какой-нибудь другой коммутатор Ethernet и подключите все к нему, или (b) используйте метод шлюза.
2) Если вы хотите использовать компьютер B в качестве шлюза для компьютера A (который необязателен только для наблюдения за трафиком в локальной сети Ethernet, но может потребоваться, например, для WLAN), вам необходимо настроить компьютер A для использования компьютера B в качестве шлюза , Весьма вероятно, что ваш "интернет" в вашей настройке - это домашний маршрутизатор, который действует как DHCP-сервер, назначает IP-адреса компьютеру A и компьютеру B и говорит им использовать маршрутизатор в качестве шлюза. Поэтому используйте route
или ip route
чтобы установить правильный маршрут на компьютере A. Убедитесь, что других маршрутов нет.
Следующий скрипт работает для меня, чтобы настроить пересылку (хотя, возможно, это не оптимально):
#!/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