依稀记得几年前学校还会给每个人分配一个前缀是 /64 的ipv6地址,时不时还能拿到一个公网的ipv4地址,但是这几天需要用到纯v6 pt站的时候发现现在居然只能通过dhcpv6的方式拿到前缀为 /128 的ipv6了,而我是通过路由器上网的,也就是说只有这个路由器才能分配到ipv6地址,折腾了很久总算才让宿舍里面的几台设备都能用上ipv6并兼容之前的一些服务。
我这的网络环境有一点点复杂,我的路由器是下面还接了一个nuc,然后在nuc中跑了一个openwrt作为旁路网关,然后路由器的dhcp设置分发的默认网关与dns是nuc中的openwrt容器的地址,所以为了让他们都兼容v6,需要修改不少地方。
路由器开启ipv6 nat
我的路由器固件为 padavan(俗称"老毛子") ,内置了ipv6 nat的支持,只需要去系统服务中开启 启用napt66 就好了。
除此之外,还需要让路由器先拿到一个/128的ipv6地址,我的设置如下:
注意我这里没有开内网的dhcpv6, 因为我并不想让每台设备都使用v6,除此之外我也没打开 启用 LAN 路由器通告 选项,另外还要注意内网地址的选择(用fe80的话,是无法连接到其他网络的)
fe80::/10 是 link local 地址段, 只在同一链路上有效, 不能跨网段通信, 类似于 IPv4 下的169.254.0.0/16.
fd00::/8 就是通常意义上的内网地址段了, 等价于 IPv4 的10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 这三个段. 如果要组建 IPv6 内网, 通常都是在这个大段里随机挑选一个 /64、/56、或者 /48 的子网来用. 比如可以挑选 fd12:3456:789a:bcde::/64 作为局域网 IP 段.
fc00::/8 也是一个预留的内网地址段.
设置好WAN之后再重新连接网络,正常情况便能得到一个ipv6地址了
docker相关的设置
这里涉及到docker的两种网络,一个是默认的 bridge/host 模式,另一个是 macvlan,需要进行不同的设置。
bridge/host 模式支持v6
我们通常使用的是 bridge或者host模式,而docker中这两种模式默认是不支持ipv6的,所以我们需要修改一下,编辑 /etc/docker/daemon.json
|
|
并 systemctl restart docker
重启docker,这里使用的是nat模式,只给容器分配了内网的ip。
macvlan的设置
我使用docker来运行openwrt,用到的就是macvlan的模式,在外部看来,macvlan虚拟出了一张新的网卡,因此会有不同的ip,这时我们需要删除原有的 macvlan 网络并建一个新的,在重新将原有的容器连接到网络中。
|
|
电脑相关的设置
由于我给电脑分配ipv6只是想要访问一些ipv6 only的网站,但我又不想优先使用ipv6——因为现有的透明代理等服务会失效,所以我得将ipv4的优先级设置的比ipv6优先级更高,参考 Prioritising IPv4 over IPv6 on Windows 10 and 11 ,在win10/11下以管理员权限执行下面的命令,将ipv4的优先级设置的更高.
|
|
于是我们的系统便会在同时解析出v4与v6地址的时候优先走v4,除非只有v6才走v6了。