我正在尝试为家庭项目创建一个小型网关。我有一个 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 盒。
其次,链路本地地址很特殊。我不知道围绕链路本地地址的特殊规则是否会破坏这样的设置。一般来说,如果数据包要穿过路由器,它们应该使用常规(全局或唯一本地)地址。