将 ICMP 转发到 tun 接口

将 ICMP 转发到 tun 接口

我正在创建一个 ICMP over DNS 程序。

工作原理如下:我读取 tun0 接口,分段并将 ping(隧道)发送到服务器,在服务器上处理 ping,获取答案和隧道并将其发送回 tun0。问题是,我需要将我从 cmd 发出的所有 ping 请求重定向到 tun0,以便可以处理请求。

我查看了这里的几个主题,但 IP 转发的 IP 表规则似乎不起作用。因此,我了解数据包的工作原理,但我不明白它们在用户和接口之间的行为方式。

我发现的唯一部分解决方案是添加一条静态路由,例如将 192.168.1.0/24 重定向到 tun0,这样我就可以在 tun0 上看到该子网的 ping,但答案不会返回到终端。

你有主意吗?

感谢您的帮助

答案1

我认为您根本不应该将这些数据包转发到隧道接口。您的 tun0 仅应是内部数据包进入和退出隧道的“前端”。

隧道的“后端”应直接从真实网络接口获取数据包。对于 ICMP,您可以使用“IP 原始套接字”来执行此操作:

sock = socket(AF_INET, SOCK_RAW, 1 /* ICMP */);

相关内容