NAT 公有 IP 到本地 IP | IPv6

NAT 公有 IP 到本地 IP | IPv6

我正在尝试为家庭项目创建一个小型网关。我有一个 NODE、GATEWAY 和 EXTERNAL 机器,它们在公共 IPv6 网络上运行。虽然 NODE 不是通过以太网连接的,但我的目标是使用网关将其连接到 IPv6 网络。它通过无线电(也是 IP,但使用 64 位地址)与网关通信,该无线电有自己的接口。

使用 ip 路由,我能够使用网关从我的节点 ping 外部。现在我的问题是:我可以使用 NAT 将我的节点暴露给世界吗?我有一个用于节点的公共 IP,所以我所做的就是将其添加到网关:(当然,所有 IP 都是假的)

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 123.222.23.2  netmask 255.255.255.0  broadcast 123.222.255.255
    inet6 2003:6g8:140:200:6a39:5021:83c4:fgbb  prefixlen 128  scopeid 0x0<global>
    inet6 fe80::c229:5c97:8b23:a3e5  prefixlen 64  scopeid 0x20<link>
    inet6 2003:6g8:140:200:1acc:42fd:1946:e2c1  prefixlen 64  scopeid 0x0<global>

经过测试,我可以从 EXTERNAL ping 两个 IP,最后到达网关。现在我想将任何进入 IP 的流量重定向到我的无线接口,并更改目标 IP。

由于我对 iptables 还不太熟悉,所以我只是尝试了一下。设置 DNAT

sudo ip6tables -t nat -A PREROUTING -i eth0 -d 2003:6g8:140:200:6a39:5021:83c4:fgbb -j DNAT --to-destination fe80::160c:25ee:1de6:a52c

其中最后一个 IP 是 NODE 的本地地址。如果我理解正确的话,那么所有以该特定 IP 为目的地的数据包都将获得本地 IP。

然后我允许转发

sudo ip6tables -A FORWARD -i  eth1 -j ACCEPT
sudo ip6tables -A FORWARD -o  radio0 -j ACCEPT

然后我创建静态路由

sudo ip -6 route add fe80::160c:25ee:1de6:a52c dev radio0

但这似乎不起作用。当我尝试 ping 2003:6g8:140:200:6a39:5021:83c4:fgbb 时,它们只能到达网关,而不会转发到另一个接口。

我究竟做错了什么?

此致

答案1

首先记住,目标设备上需要有一条路由将答复带回 NAT 盒。

其次,链路本地地址很特殊。我不知道围绕链路本地地址的特殊规则是否会破坏这样的设置。一般来说,如果数据包要穿过路由器,它们应该使用常规(全局或唯一本地)地址。

相关内容