-
Notifications
You must be signed in to change notification settings - Fork 149
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Natter 在 v2.0 版本中新增了 iptables / nftables 转发功能,通过 -m 选项可指定转发的方法。
可以考虑在 NATMap 添加同样的功能。
考虑设计此功能的原因是:
- 省去手动设置防火墙端口转发的步骤。虽然不同发行版的防火墙各不相同,但都以 iptables / nftables 作为后端。由 NATMap 设置可一步到位;
- BT 类程序打洞需要保持内外部端口号一致,需要 NATMap 动态调整端口转发规则;
- 虽然通过通知脚本能达到类似目的,但是在 NATMap 退出时会有规则残留。
对于 NATMap :
- 可以考虑使用 libiptc (iptables (legacy))、libnftl (nftables) 提供的 API,这样比直接调用命令行再解析文本更科学;
- 可以考虑使用宏隔离,不编译不支持的平台,如 FreeBSD / macOS
放弃了使用 libiptc 的想法,首先是 NATMap 使用静态编译,加入依赖会使得体积膨胀;其次是 libiptc 也没有提供静态链接的方法;最后是根据 netfilter FAQ §4.5,官方不推荐。
实现方式与 Natter 相同,直接调用 iptables 二进制。
Natter 参考:
一些经验:
几乎所有 Linux 发行版包括 OpenWRT、CentOS、Debian、Alpine Linux 还有一些 NAS 专用系统例如威联通的 QTS、QuTS 都可以顺利自动设置转发。这些都通过了测试。
部分系统会存在一些问题,例如群晖 DSM,还有跑在光猫里的嵌入式定制Linux。它们的 iptables 内核模块是修剪过的,不认识规则的 --comment 备注。但是去除后也能正常转发。
所以考虑仅设置最简单的 NAT 转发规则即可。因为经过裁剪的系统也会保留最基本的 NAT 功能,系统本身会用到。
这个坑有点大,先提出来看看可行性。
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request