YamatoRyou
6 小时 32 分钟前
大致流程 (并不详尽):
宿主机部分 (通过以下步骤创建的接口默认不含 IPv4 地址):
- 创建一个网络接口, 父接口为宿主机的物理网卡;
```
ip link add <接口名称> link <父接口名称> type macvlan mode bridge
```
- 启动刚才创建的接口
```
ip link set <接口名称> up
```
- 添加路由条目, 主要用于宿主机本身与 Docker 容器的通信, 不影响来自其它机器的访问
```
ip -6 route add <地址块> dev <接口名称>
```
Docker 部分 (通过以下步骤创建的网络默认不含 IPv4 地址):
- 创建一个 macvlan 驱动的网络, 并为该网络分配一个合适大小的地址块;
```
docker network create \
-d macvlan \
--ipv6 \
--subnet=<地址块> \
--gateway=<位于地址块中的网关, 我的习惯是取该块中第 1 个地址> \
-o parent=<父接口> \
-o macvlanmode=bridge \
<网络名称>
```
- 有需求的容器连接到该网络, 并为每个容器分配一个在上述地址块范围内的地址;
docker network connect --ip6=<IPv6 地址, 必须位于地址块范围内, 我的习惯是最后 32 位随机生成> <网络名称> <容器名称>
用 docker inspect <容器名称> 获取容器的 IPv6 地址, 最后传递到 DDNS 相关脚本.
----
其它:
我自己的实例为网络分配了长度为 /96 的块.
在宿主机创建的接口于下次重启机器后消失.