logo科技微讯

给树莓派添加无数个 IPv6 地址

作者:科技微讯
日期:2025-03-30
📝 笔记

添加一个 ip 路由,local 是目标地址,意思是把所有发往 2408:8256:94:96c::/64 的数据包交给 wlan0 本地处理,不转发到其他设备:

ip route add local 2408:8256:94:96c::/64 dev wlan0

允许程序绑定到未分配给本地网络接口的 IPv6 地址:

sysctl net.ipv6.ip_nonlocal_bind=1

安装 ndppd

apt install ndppd

修改 /etc/ndppd.conf 为以下内容,其中 <INTERFACE-NAME> <IP6_SUBNET> 替换为你的实际参数,可以通过 ip -6 a 确认,比如我的分别是 wlan02408:8256:94:96c::/64

route-ttl 30000

proxy <INTERFACE-NAME> {
    router no
    timeout 500
    ttl 30000

    rule <IP6_SUBNET> {
        static
    }
}

重启 ndppd 服务,使前面的配置文件生效:

service ndppd restart

测试是否成功,指定通过 2408:8256:94:96c::100 访问 ipv6.ip.sb,如果返回 2408:8256:94:96c::100 就说明成功,2408:8256:94:96c::100 是我的参数,需要改为你的实际参数。

curl -6 --interface 2408:8256:94:96c::100 ipv6.ip.sb

需要注意以下三点:

  • 重启树莓派后,前面添加的 ip 路由以及设置的 net.ipv6.ip_nonlocal_bind 会恢复到原来的值,此时需要重新设置。
  • 重启路由器之后,树莓派分配到的 IPv6 地址可能会发生变化,此时也需要重新设置。
  • 家里的宽带通常每隔 24 小时强制重新拨号一次,这也会导致树莓派的 IPv6 地址发生变化,此时也需要重新设置。

用 Node.js 写一个脚本,每 10s 请求一次网络,如无意外返回的地址和请求的地址是一样的。

const got = require("got");
async function checkIPv6() {
  try {
    const ip = `2408:8256:94:96c::${Math.floor(Math.random() * 999) + 2}`;
    const response = await got({
      url: "https://api-ipv6.ip.sb/ip",
      http2: false,
      localAddress: ip,
      timeout: { request: 5000 },
      retry: { limit: 0 },
    });
    console.log(`请求地址:${ip};返回地址:${response.body}`);
  } catch (error) {
    console.error("请求失败:", error.message);
  }
}
checkIPv6();
setInterval(checkIPv6, 10000);

参考资料:

donation赞赏
thumbsup0
thumbsdown0
暂无评论