在Linux上用C实现简单NAT的指针

我想实现一个用于转发UDP数据包的简单NAT。我想静态维护一个具有IP地址和端口的NAT映射池。一个简单的例子:

  192.168.1.12:12001   - >  publicAddress1:23001 
  192.168.1.12:12002   - >  publicAddress1:23002
  ...

当数据包到达publicAddress1:23001时,我想在表中查找并将数据包转发到192.168.1.12:120001,在此必须知道该数据包确实来自publicAddress1:23001。同样,当发送的源地址为192.168.1.12:120001的数据包时,我希望在查看映射表后使用publicAddress1:230001出去。

以上内容可能措词不准确,但希望能传达出意图。当然,有很多问题要处理,但是这个问题与UDP数据包转发有关。

所以,我的问题是:哪一种是实现此目标的最佳方法: 我的阅读指向以下内容:

  1. 简单的iptables静态NAT规则。这可能是通过简单的shell脚本最容易实现,但效率不高。
  2. 使用原始套接字,并根据需要更改源/目标地址/端口。
  3. 使用netfilter钩子(nf_register_hook?)
  4. 已将UDP套接字绑定到端口,并相应地对数据包进行读/写(转发)。当然效率低下。假定该应用程序知道绑定。
  5. 使用eBPF。对于这项任务来说看起来很复杂,但如果值得努力的话,我愿意深入研究。

应用程序无需使用TURN或STUN即可知道其NAT绑定。那可以单独实现,但是给定表,它比使用外部STUN服务器更简单。

我只要求提供指针,以便我可以进一步阅读...

youbaio 回答:在Linux上用C实现简单NAT的指针

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2682071.html

大家都在问