0

在 linux 系统上,我构建了自己的隧道协议,通过非标准化但经过验证的介质中继数据包。我所做的是使用 iptables 和 NFQUEUE 捕获数据包,通过我的介质中继它们,然后在另一端使用原始套接字重新注入它们。进入隧道的数据包与出来的数据包完全相同,经过验证。问题是,如果 ping 的目的地与隧道端点相同,则这不适用于 ICMP Ping(回声请求)。如果目的地与隧道端点不同,则 ping 数据包将重新路由并按应有的方式到达接收方,然后 ping 回复将返回给发送方。有谁知道发生了什么事。是否可以将原始 icmp 发送给自己?如果没有,有人知道我应该做什么吗?

我所拥有的是:

R1 ---- T1 -----T2 ------ R2

R1 ping R2。

R1、R2、路由器 1 和路由器 2 T1、T2、隧道点 1 和 2。(R1 和 T1 位于同一路由器上,R2 和 T2 位于同一路由器上)。此设置不起作用。

这确实有效:

R1 ---- T1 -----T2 ------ R2 ----- R3

R1 ping R3,这行得通。

有任何想法吗?

/安迪

4

1 回答 1

1

我不知道这是否可能,但拦截和重新注入数据包的首选方法是使用tun/tap接口(另请参阅内核文档/目录)。我想如果你切换 ICMP 会起作用。

于 2011-02-21T16:51:12.460 回答