Featured image of post 宿舍ipv6网络建设

宿舍ipv6网络建设

记录一下宿舍中的网络设置。

依稀记得几年前学校还会给每个人分配一个前缀是 /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地址,我的设置如下:

WAN-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地址了

分配到v6

docker相关的设置

这里涉及到docker的两种网络,一个是默认的 bridge/host 模式,另一个是 macvlan,需要进行不同的设置。

bridge/host 模式支持v6

我们通常使用的是 bridge或者host模式,而docker中这两种模式默认是不支持ipv6的,所以我们需要修改一下,编辑 /etc/docker/daemon.json

1
2
3
4
5
6
{
  "ipv6": true,
  "fixed-cidr-v6": "fd00::/80",
  "experimental": true,
  "ip6tables": true
}

systemctl restart docker 重启docker,这里使用的是nat模式,只给容器分配了内网的ip。

macvlan的设置

我使用docker来运行openwrt,用到的就是macvlan的模式,在外部看来,macvlan虚拟出了一张新的网卡,因此会有不同的ip,这时我们需要删除原有的 macvlan 网络并建一个新的,在重新将原有的容器连接到网络中。

1
docker network create -d macvlan --subnet=10.0.2.0/24 --gateway=10.0.2.1 --ipv6 --subnet=fc00:101:101::/64 --gateway=fc00:101:101::1 -o parent=enp3s0 macnet

电脑相关的设置

由于我给电脑分配ipv6只是想要访问一些ipv6 only的网站,但我又不想优先使用ipv6——因为现有的透明代理等服务会失效,所以我得将ipv4的优先级设置的比ipv6优先级更高,参考 Prioritising IPv4 over IPv6 on Windows 10 and 11 ,在win10/11下以管理员权限执行下面的命令,将ipv4的优先级设置的更高.

1
2
netsh interface ipv6 show prefixpolicies
netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 60 0

网络优先级

于是我们的系统便会在同时解析出v4与v6地址的时候优先走v4,除非只有v6才走v6了。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
本站访客数:
Built with Hugo
主题 StackJimmy 设计