买了自己一段IPv6 /48之后,总想给自己全部机都配上,实名上网嘛,但是呢,IP要好好规划.
首先有一台广播机,最好流量多一些,把自己IP通过BGP播出去,还要一段属于自己的IP,我的资源如下:
- 我自己的IPv6:2a0f:9400:770a::/48
- BGP Router:107.189.6.1
由于IPv4是32位长,如果想不冲突,最佳方法就是把V4带入到自己的IPv6段内,比如我的IPv4是23.94.26.137,拆成16进制是175E1A89,那么我拼到的IP段是2a0f:9400:770a:175e:1a89::/80,虽然小于64,ND是失效了,但是实测主要在BGP Router服务器上做点小动作,问题就解决了,这里不展开说.
PS:如果有一个方法能只占16B并且一定不冲突就更好了.
我写了两个小脚本,用于我自己的IPv6配置.
客户端(InstallClient.sh):
#!/bin/sh
ipv4=$(curl -4 -s ip.sb)
ipv4_prefix=$(printf '%02x' ${ipv4//./ })
ip_prefix=2a0f:9400:770a:${ipv4_prefix:0:4}:${ipv4_prefix:4:8}
if [ $(grep -c "interfaces.d" /etc/network/interfaces) -ne '0' ]; then
cat >/etc/network/interfaces.d/tun0 <<EOF
auto tun0
iface tun0 inet6 v4tunnel
address $ip_prefix:$(openssl rand -hex 2):$(openssl rand -hex 2):$(openssl rand -hex 2)
netmask 80
endpoint 107.189.6.1
local $ipv4
ttl 255
gateway $ip_prefix::1
mtu 1472
EOF
else
echo "其他方式的系统暂时不考虑支持."
fi
ifdown tun0 > /dev/null 2>&1
ifup tun0 > /dev/null 2>&1
echo '请在服务器上执行:bash InstallTunServer.sh' $ipv4 $ip_prefix
BGP Router(InstallTunServer.sh):
#!/bin/bash
# descr:TaterLi自创,用于配置自己的隧道的快捷工具,服务器部分,根据客户端参数来写.
for i in $(seq 0 10000); do
if [ ! -f /etc/network/interfaces.d/tun$i ]; then
cat >/etc/network/interfaces.d/tun$i <<EOF
auto tun$i
iface tun$i inet6 v4tunnel
address $2::1
netmask 80
endpoint $1
local 107.189.6.1
ttl 255
mtu 1472
EOF
ifup tun$i
echo '服务器上连接已创建.'
exit
fi
done
当然,服务器上记得开IPv6转发,测试结果.
最后我只需要用curl或者wget套娃一下,这样就每个服务器都有自动V6了,但是这样明显不够智能,如果可以客户端执行,服务器自动添加配置就更好了.
为了做到这一点,我开发一个Python脚本,获取请求过来的机器IP,当然添加一些简单的鉴权或者服务器上坐好端口封堵,以免违规.
自助配IPv6脚本(NAT机不能用,IPv6封禁明文邮件和种子,包括私有协议,接投诉后拉黑/80.):
curl -Lso- http://x.thekoziolfoundation.com/files/script/GetIPv6.sh | bash
获得的整段/80除了网关,都是你的,可用地址有281万亿4749亿7671万655个,给VPS的每个晶体管编个地址吧.