以下 iptables 规则用于将从 eth1 进入的所有互联网流量重定向到 localhost(接口 lo 的 ip 为 127.0.0.1)的端口 3000:
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
但是,当我通过 eth1 发送一些互联网流量(端口 80)后,tcpdump 并未记录这些流量。
我不确定为什么会这样。有人能解释一下吗?谢谢。
答案1
当你将 IP 数据包目标重写为本地主机的某个地址时,不是通过地址所属的接口传递(lo
就您的情况而言),但只是由堆栈直接处理。因此,您无法通过监听环回接口来捕获它。如果您选择任何物理存在的接口地址,情况也不会有什么不同。
如果你需要捕捉对话,我建议使用适当的过滤表达式。类似于
tcpdump -i lo -i eth1 host 127.0.0.1 or port 3000
应该做你想做的事。