主机商不提供IPv6 Routed Prefix就算了,有些还会屏蔽NDP请求,比如WebHosting24,但是这就难得倒了嘛?不会的.
之前介绍过第一个方法是Routed Prefix,这是个最推荐方法,然后第二个方法是NDP Proxy,这是无奈之举,.而这个,就什么都能干,哪怕像Hostmem这种,只提供两个IP的也没问题.
首先我的网络环境有公网IPv6段2a0c:8fc0:7612::/48,他不是Routed Prefix,主机商也不允许NDP,我自己规划的内网段 2a0c:8fc0:7612:1000::/64,我说他是内网只是他不能路由,IP太多奢侈一把,首先配置Docker允许用一个内网段.
root@debian:/boot# cat /etc/docker/daemon.json
{
"ipv6": true,
"fixed-cidr-v6": "2a0c:8fc0:7612:1000::/64"
}
重启Docker服务之后,Docker就会自动为网段创建一个网关,不过这些都不是什么,先配置好ip6tables的NAT表.
ip addr add 2a0c:8fc0:7612::2 dev eth0
ip6tables -t nat -I POSTROUTING -s 2a0c:8fc0:7612:1000::2 -j SNAT --to-source 2a0c:8fc0:7612::2
ip6tables -t nat -I PREROUTING -d 2a0c:8fc0:7612::2 -j DNAT --to-destination fd00:2a0c:8fc0:7612:1000::2
这几句的意思是,创建一个 2a0c:8fc0:7620::2 地址并绑定在eth0,然后通过NAT方式重写某个IP全部数据到特定地址,出入方向都重写.
然后创建一个容器:
docker run --rm --ip6="2a0c:8fc0:7612:1000::2/64" -dt nginx
去浏览器试着访问一下.
PS:有些版本Docker没法固定地址,那么就只能人工来了,用docker inspect查看地址后再设置iptables.