Следующее правило iptables используется для перенаправления всего интернет-трафика, поступающего с eth1, на порт 3000 на локальном хосте (интерфейс lo с ip 127.0.0.1):
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3000
Затем tcpdump настраивается для записи всего трафика на интерфейсе lo:
tcpdump -i lo -w output.dump
Однако после того, как я отправил некоторый интернет-трафик (порт 80) через eth1, этот трафик не записывается tcpdump.
Я не уверен, почему это так. Кто-нибудь может пролить свет? Спасибо.
Поскольку вы переписываете место назначения IP-пакета на один из адресов локального хоста, это не передается через интерфейс, которому принадлежит адрес (lo
в вашем случае), но просто обрабатывается стеком напрямую. Таким образом, вы не можете захватить его, прослушивая интерфейс обратной связи. Это не изменилось бы, если бы вы выбрали адрес любого физически присутствующего интерфейса.
Если вам нужно записать разговор, я бы предложил использовать соответствующее выражение фильтра. Что-то вроде
tcpdump -i lo -i eth1 host 127.0.0.1 or port 3000
должен делать то, что хочешь.