情景复现:

A鸡只有IPV4的访问,连IPV6的访问都没有,更别说IPV6的公网访问了。
B鸡,公网IPV4,有无IPV6也可以。
但这篇文章只写B鸡无IPV6的情况(就算有V6,也可以再获取HE-IPV6后再转发过去)下通过HE的IPV6隧道获得v6后,经过wireguard异地组网(或许其他的也可以,zerotier什么的,tailsacle什么的)转发HE-IPV6其中一个地址去A鸡,从而达到可以公网访问A鸡的效果。
搞HE-IPV6我习惯用netplan,同时记得你B鸡开启转发IPv6数据转发,/etc/sysctl.conf下要添加

net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding=1

然后重启sysctl

sysctl -p

那么我们正式开始。

B鸡debian下一把梭

apt install netplan.io iptables jq netfilter-persistent -y

然后wireguard服务端得装在B鸡上,以及获得HE-IPV6这些不用我说了吧(我还是怕你们不会搞wireguard,我还找了个脚本,项目地址

wget https://git.io/wireguard -O wireguard-install.sh && bash wireguard-install.sh

装好wireguard后并且创建了Client后,用你的A鸡连接下看看(可能有些地方qos严重,推荐看我以前写的[教程]没有IPV6的宽带利用支持IPV6的VPS获得IPV6访问来同等利用TCP over UDP来规避qos)
装HE的话,看我之前写的[HE-IPV6隧道]Vir JP TYC33节点的V6挂掉,套用HE的V6隧道应急备忘录或者直接用HE官方提供的netplan<0.103的模板(你用了/48的话)记得自己换一下,建议添加多一个IPV6用来转发进A鸡!!!毕竟HE的V6是整个路由段给你的,你想怎么折腾就怎么折腾。

记得你A鸡的防火墙!!!!

这里说一下 /etc/netplan/he-ipv6.yaml的一些注意事项

network:
  version: 2
  tunnels:
    he-ipv6:
      mode: sit
      remote: 默认就好
      local: 你的IPV4
      addresses:
        - "默认给的V6地址/64"
        - "默认给的V6地址去掉后缀,建议换成12/64"
      gateway6: "HE给的V6网关"

"默认给的V6地址/64"通常是2001:xxx:xx:xx::2/64是吧
"默认给的V6地址去掉后缀,建议换成12/64"就写成2001:xxx:xx:xx::12/64

勘误,netplan的he-ipv6.yaml可以不写2001:xxx:xx:xx::12/64,直接用iptbles来转发过去。

就相当于he的2001:xxx:xx:xx::12/64没有用iptables来转发的时候,你的B鸡收到了2001:xxx:xx:xx::12/64的数据,但你的B鸡蒙了,这个2001:xxx:xx:xx::12/64我要干嘛?我要去哪?而用了iptbles的转发后就算A鸡挂壁了,B鸡也知道要转发去wireguard的内网IP,就算不通,B鸡也说我转发了嗷,有啥问题别找我。

那么

netplan try

没问题就按多次回车,此时你应该就有了两个IPV6在你的B鸡上了,那么假设你前面的所有东西都没问题了,你在B鸡ping一下A鸡的Wireguard内网IP,默认是10.7.0.2和fddd:2c4:2c4:2c4::2,能ping通的话,那就开始下一步,利用ip6tables转发 2001:xxx:xx:xx::12 这个IPV6地址去A鸡。

看好了嗷。

ip6tables -t nat -A PREROUTING -d 2001:xxx:xx:xx::12 -j DNAT --to-destination fddd:2c4:2c4:2c4::2
sudo sh -c "ip6tables-save > /etc/iptables/rules.v6"
systemctl enable netfilter-persistent
service netfilter-persistent restart

好了,此时此刻你可以试试访问2001:xxx:xx:xx::12这个地址去了,没啥问题的话,你的A鸡已经可以被公网IPV6进行访问了有问题也别找我

btw,B鸡重启后要应用iptables规则

sudo ip6tables-restore /etc/iptables/rules.v6
sudo systemctl restart netfilter-persistent

总结下:

wireguard进行组网然后利用iptables来进行转发公网IPV6去A鸡达到类似的效果。

其实这也是我前段时间开卢森堡小鸡,独立IPV6的一个变相玩法了。