将具有 IPv4 地址的接口上的数据包的 NAT 转换为具有 IPv6 地址的接口,反之亦然

网络工程 IPv4 纳特 IPv6 linux
2022-02-24 21:14:11

我的 linux 机器上有两个接口,比如说 eth0 和 eth1。eth0 是具有 IPv6 地址的公共 IP,而 eth1 具有私有 IPv4 地址。如果我尝试将在 eth1 接口上接收到的数据包转换为 IPv6 地址,Linux 内核中的 NAT 模块需要在发送之前将 IPv4 数据包转换为 IPv6 数据包。一旦从另一端收到响应,它会将 IPv6 数据包转换回 IPv4,然后再提供给 eth1 接口。我想了解这种转换机制。示例:您有一部具有 LTE 移动数据连接的手机,并且您想通过在手机中创建热点来与他人共享互联网。现在,大多数 LTE 提供商都提供 IPv6 地址。连接到热点的手机将获得 IPv4 地址。但是,手机连接的热点能够浏览互联网。来自移动热点客户端的所有请求都是 IPv4 数据包,LTE 从互联网收到的响应都是 IPv6 数据包。这意味着,在移动 linux 堆栈中会发生从 ipv4 到 ipv6 的转换,反之亦然。

如果有人可以向我指出 linux 代码或解释为此所需的转换,那就太好了。提前致谢。

2个回答

可以进行从 IPv6 到 IPv4 的 NAT,因为您可以将 IPv4 地址嵌入到 IPv6 地址中。这通常使用 DNS64 完成。

从 IPv4 到 IPv6 的 NAT 要困难得多,因为您不能在 IPv4 地址中嵌入 IPv6 地址。那不合适。仍然可以使用 Matt,但您必须静态配置 IPv4 和 IPv6 地址之间的映射。

我不知道Linux内核是否可以做到这一点,但无论如何这是一个坏主意。由于不同的标头长度,您会遇到碎片和 MTU 大小的问题。使用代理将是一个更好的主意。

IPv4 和 IPv6不是一回事您不能在它们之间进行NAT没有多少“地址重写”可以在它们之间转换。你能改写 IPX 数据包的地址使其成为 Appletalk 吗?不。

两个系统之间有大量的PROXY产品,但它们几乎完全依赖于协议。(因为协议有在其中携带地址信息的坏习惯。) v4 与 v4 对话;v6 与 v6 对话。就是这样。