第一个版本,欢迎试用反馈!
Full Cone 即 Endpoint-Independent Mapping 加 Endpoint-Independent Filtering 的 NAT 行为
是的,你没看错,不只是 UDP 的 Full Cone ,还支持对 TCP 和 ICMP 的 Full Cone ,基本上 match 现在三大运营商 IPv4 CGNAT 的行为了,所以你可以在运营商 Full Cone CGNAT 后面无限套娃 einat 。。
而且这意味着你可以用类似 https://github.com/heiher/natmap 的工具开 TCP 服务。
之前一直在用 https://github.com/fullcone-nat-nftables (由 https://github.com/Chion82/netfilter-full-cone-nat 启发) 的 patch, 但是它不仅需要 patch kernel, 还要 patch nftables 的用户前端程序和依赖库,实在太难维护了。而且自我开发 einat 前就已经没有维护了,而且现在 repo 也归档了。
加上之前一直在各处看到 eBPF 的概念(我的第一印象是这东西怎么炒的这么厉害。。),再了解到确实可以在 TC hook 上实现 NAT ,索性从头写一个 NAT 顺便学习一下 eBPF ,前前后后完善了四个月终于完成了一个版本。
现在已经在我的 R2S 上运行了几个月替代 Netfilter 的 masquerade 。
在写 einat 的过程中我学到了很多,后续打算在我的博客发布几篇关于 einat 的文章和为什么 Netfilter masquerade 不是真的 Endpoint-Independent Mapping 。
einat 主要是便利了基于 STUN 的 P2P 应用,但对于 BT tracker 模式这种依赖 UPnP IGD/PCP 的没什么用。所以在这个项目完善之后,我计划写一个基于 STUN 在 Full Cone 网络下工作的 PCP/NAT-PMP/UPnP 端口映射服务,主要是为了支持 BT tracker 模式。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.