上一次我实现了3个不同地方的VPS的组网,但是CloudCone的服务器是免费送3个IPV6地址的,单个主机要3个IPV6对我来说多了,但是我的3台VPS中只有一台有IPV6,而且还是3个IPV6,于是我想着怎么把这3个IPV6地址分配给3台VPS,使它们都拥有自己的“独立”的IPV6地址
VPS1和VPS2无公网IPV6,有公网IPV4
VPS3拥有3个公网IPV6,有一个公网IPV4
3个公网IPV6地址分别为:
IPV6_1
IPV6_2
IPV6_3
在前一篇文章中,我使用了Wireguard让3台VPS内网IPV4/6都互联了,他们的IPV6为:
VPS1: WG_IPV6_1
VPS2: WG_IPV6_2
VPS3: WG_IPV6_3
前提条件:
首先,VPS1,2,3用Wireguard成功互联,且VPS1,VPS2的所有IPV6流量都通过Wireguard转发到VPS3,wireguard的内网IPV6可以互相ping通
其次,我使用了ufw,所以要修改/etc/default/ufw的FORWARD DEFAULT调成ACCEPT才能允许FORWARD流量通过你的自定义iptables规则,不过最好在自定义规则的最后加入DROP规则确保安全,不符合你自定义规则的转发请求都丢弃掉
很简单,我们使用ip6tables进行BNAT(静态地址转换),让从WG_IPV6_1的数据包,修改地址为IPV6_1后从VPS3出,让VPS3接受到的IP为IPV6_1的数据包全部发往WG_IPV6_1,这样就实现了IPV6_1给WG_IPV6_1独立使用
ip6tables -t nat -A PREROUTING -d IPV6_1 -i eth0 -j DNAT --to-destination WG_IPV6_1
ip6tables -t nat -A POSTROUTING -s WG_IPV6_1 -o eth0 -j SNAT --to-source IPV6_1
这样就完成了,很简单,要记得开内核的ipv6_forward,不过前面配置wireguard的时候已经配置过开启内核包转发了