1

我必须编写一个 vpn 模块。首先,我编写了一个内核模块,用于修改所有传入和传出的 TCP 数据包。它使用 netfilter 钩子。对于传入的数据包,我修改了(struct sk_buff)->data(struct sk_buff)->tail指针之间的字节,将它们加一。对于传出的数据包,我修改了(struct sk_buff)->data(struct sk_buff)->tail指针之间的字节,将它们减一。

但是,我尝试在 localhost 和 localhost 之间建立 TCP 连接(通过 netcat),但没有成功。你能告诉我我做错了什么吗?我需要修改结构sk_buff结构中的其他一些字段吗?


是否可以仅从内核空间实现我的简单 vpn 模块?(因此不使用特殊的库,如 libnetfilter_queue)?

谢谢你。

4

1 回答 1

2

是的,您可以在不使用 libnetfilter 的情况下执行此操作。但鉴于您提供的有关项目的信息有限,很难就如何解决您的问题给出好的建议。这里有一些应该有帮助的参考资料。

1) 我建议您看一下TUN/TAP接口驱动程序 API。这将允许您在应用程序空间而不是内核中实现您的代码。有关此类 VPN 的一个很好的示例,请参阅openvpn 。

如果您有兴趣做更高级的内核空间挂钩...
2) 查看这篇关于挂钩 netfilter netfilter 内核挂钩的文章

于 2010-01-27T18:23:18.187 回答