![使用 iptables 的 TUN 接口进行 NAT 和路由的正确方法](https://linux22.com/image/782326/%E4%BD%BF%E7%94%A8%20iptables%20%E7%9A%84%20TUN%20%E6%8E%A5%E5%8F%A3%E8%BF%9B%E8%A1%8C%20NAT%20%E5%92%8C%E8%B7%AF%E7%94%B1%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95.png)
编辑:我是网络和发现新事物的新手:)
我以编程方式创建了一个 TUN 接口并能够与之交互。
我设置并运行
ifconfig myTun 10.10.1.1/24 up
并且它已启动并正在运行,我可以看到它正在ifconfig
ping10.10.1.1
为了 100% 确定我的 TUN 接口是否能够正常运行并解决我写的问题,我做了以下操作:
我 ping 了一下10.10.1.2
,发现我的程序收到了数据包,我将它写回 tun,然后在循环中再次收到它。
现在我确定所有数据包从或者到 10.10.1.x
正在被 TUN 接收并写入,没有任何问题。
当我写一个数据包时任何外部的目标 IP它10.10.1.x
已成功写入 TUN,但尚未收到 TUN 的答复。
在搜索和阅读了大量的文章后,我发现它被内核悄悄地删除了。
我在 serverfault.com 上阅读了大量关于 TUN 接口的问答,我发现我遗漏了逻辑中的一个重要部分,那就是路由。
我的最终理解是:数据包没有问题,并被Linux中的网络堆栈接收,但是由于数据包的目的地很奇怪,内核不知道如何处理它。然后我发现我必须在iptables并启用net.ipv4.ip_forward
,但不知道如何操作。
我的最终目标是:
当我将任何目的地在10.10.1.x
TUN 之外的数据包发送到 TUN 时,它必须被路由到我的主接口(可以访问互联网,并且是wlps020f3
),并且该数据包的任何结果都会被接收回我的 TUN 接口
如何配置NAT在iptables解决方法?
先谢谢了