给每个容器分配独立的公网IPv6地址

发表于:2025-1-7 01:07:46 Docker 254
本帖最后由 loading_zhang 于 2025-1-7 01:12 编辑

开头叠个Buff
本文受众是有Linux使用经验的非小白用户。
本文不一定适用所有网络环境,本人时间有限,遇到问题无法提供支持。



为了让容器能在公网直接访问,通常做法是容器将端口 暴露到宿主机,或者直接使用host network,这两者本质都是通过宿主机IP将服务暴露到公网。
这种方式在暴露容器的同时也暴露了宿主机,存在一定的安全隐患。

现在的家庭网络已经普及了IPv6,拨号成功后会分配一段公网IPv6地址供内网设备使用。
通过在fnOS的系统中执行
  1. # ip a show dev ens18  # ens18替换成实际的网卡名
复制代码
看到inet6 2408:x global dynamic这段公网IPv6地址说明获取到了有效的地址。


下面开始正式介绍如何给容器分配公网IPv6地址:

首先需要使用apt升级fnOS自带的docker到最新版本,当前26的版本有bug会导致无法分配。

然后给docker增加一个ipvlan的网络,取名为my-ipvlan
  1. docker network create -d ipvlan \
  2. --subnet=192.168.1.0/24 \
  3. --gateway=192.168.1.1 \
  4. --ipv6 \
  5. -o "parent=ens18" \
  6. -o ipvlan_mode=l2 \
  7. my-ipvlan
复制代码
subnet\gateway\parent按照机器实际运行环境填写。

到这里docker就配置完成了,不需要改任何配置文件。
起个docker验证一下:
  1. # docker run -it --rm --network my-ipvlan busybox
复制代码

再次执行ip a可以看到docker给这个容器分配了192.168.1.2的内网v4地址和2408:8207:1916:1e90:bc24:1100:20f:9973的公网v6地址。
而且这个地址可以从内网其他设备中ping通。

最后把这个v6地址在路由器或光猫上设置好白名单,即可在公网直接访问了。



收藏
送赞
分享

发表回复

评论列表(3)

你这个跟开v6的macvlan有什么不一样吗?
2025-1-7 12:27:54 回复
macvlan容器之间没法关联,你这个能关联吗
2025-1-7 12:29:27 回复
你说的关联具体是想实现什么效果  详情 回复
2025-1-7 21:25
你说的关联具体是想实现什么效果
2025-1-7 21:25:26 回复