使用 iptables 的 TUN 接口进行 NAT 和路由的正确方法

使用 iptables 的 TUN 接口进行 NAT 和路由的正确方法

编辑:我是网络和发现新事物的新手:)

我以编程方式创建了一个 TUN 接口并能够与之交互。

我设置并运行 ifconfig myTun 10.10.1.1/24 up

并且它已启动并正在运行,我可以看到它正在ifconfigping10.10.1.1

为了 100% 确定我的 TUN 接口是否能够正常运行并解决我写的问题,我做了以下操作:

我 ping 了一下10.10.1.2,发现我的程序收到了数据包,我将它写回 tun,然后在循环中再次收到它。

现在我确定所有数据包或者 10.10.1.x正在被 TUN 接收并写入,没有任何问题。

当我写一个数据包时任何外部的目标 IP10.10.1.x已成功写入 TUN,但尚未收到 TUN 的答复。

在搜索和阅读了大量的文章后,我发现它被内核悄悄地删除了。

我在 serverfault.com 上阅读了大量关于 TUN 接口的问答,我发现我遗漏了逻辑中的一个重要部分,那就是路由

我的最终理解是:数据包没有问题,并被Linux中的网络堆栈接收,但是由于数据包的目的地很奇怪,内核不知道如何处理它。然后我发现我必须在iptables并启用net.ipv4.ip_forward,但不知道如何操作。

我的最终目标是:

当我将任何目的地在10.10.1.xTUN 之外的数据包发送到 TUN 时,它必须被路由到我的主接口(可以访问互联网,并且是wlps020f3),并且该数据包的任何结果都会被接收回我的 TUN 接口

如何配置NATiptables解决方法?

先谢谢了

答案1

启用 IPv4 转发

sudo sysctl -w net.ipv4.ip_forward=1

NAT 流量从您的无线地址后面的隧道接口:

sudo iptables -t nat -A POSTROUTING -o wlps020f3 -j MASQUERADE

这些更改在重启后均不会保留。顶部链接和这个有更多关于这方面的信息。

相关内容