我使用以下命令创建了一个 tap 设备:
sudo ip tuntap add mode tap tap7
sudo ip link set tap7 up
sudo ip addr add 77.0.0.1/24 dev tap7
现在,我正在使用 c++ 套接字编程来写入数据包,tap7
并且能够在 wireshark 监听tap7
接口时捕获它们。
我需要创建一个规则,任何写入的数据包tap7
都应重定向到 ip 127.0.0.1
。
我尝试了以下命令:
sudo iptables -A PREROUTING -t nat -i tap7 -j DNAT --to 127.0.0.1
sudo iptables -A INPUT -i tap7 -j ACCEPT
但是,当我在 wireshark 上监听时,我仍然看到数据包是在设备上捕获的tap7
,而不是从lo
设备上捕获的。有人知道为什么吗?
答案1
您需要route_localnet
为tap7
接口启用 sysctl 选项。您应该能够使用命令完成此sysctl -w net.ipv4.conf.tap7.route_localnet=1
操作,具体取决于您的发行版。
route_localnet - BOOLEAN
Do not consider loopback addresses as martian source or destination
while routing. This enables the use of 127/8 for local routing purposes.
default FALSE
有关安全影响的更多(简要)信息,route_localnet
请参阅此主题
希望这可以帮助