原始ICMP包给自己

时间:2011-02-21 14:44:11

标签: linux sockets iptables netfilter

在linux系统上,我已经建立了自己的隧道协议,我通过非标准化但经过验证的媒介中继数据包。我所做的是使用iptables和NFQUEUE捕获数据包,在我的媒体上传递它们,在另一端我使用原始套接字重新注入它们。进入隧道的数据包与出来的数据包完全相同,经过验证。 问题是如果ping的目的地与隧道端点相同,则这对ICMP Ping(Echo Request)不起作用。 如果目的地与隧道端点不同,则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,这可行。

有什么想法吗?

/安迪

1 个答案:

答案 0 :(得分:1)

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