本帖最后由 loading_zhang 于 2025-1-7 01:12 编辑
开头叠个Buff
本文受众是有Linux使用经验的非小白用户。
本文不一定适用所有网络环境,本人时间有限,遇到问题无法提供支持。
为了让容器能在公网直接访问,通常做法是容器将端口 暴露到宿主机,或者直接使用host network,这两者本质都是通过宿主机IP将服务暴露到公网。
这种方式在暴露容器的同时也暴露了宿主机,存在一定的安全隐患。
现在的家庭网络已经普及了IPv6,拨号成功后会分配一段公网IPv6地址供内网设备使用。
通过在fnOS的系统中执行
- # ip a show dev ens18 # ens18替换成实际的网卡名
复制代码 看到inet6 2408:x global dynamic这段公网IPv6地址说明获取到了有效的地址。
下面开始正式介绍如何给容器分配公网IPv6地址:
首先需要使用apt升级fnOS自带的docker到最新版本,当前26的版本有bug会导致无法分配。
然后给docker增加一个ipvlan的网络,取名为my-ipvlan
- docker network create -d ipvlan \
- --subnet=192.168.1.0/24 \
- --gateway=192.168.1.1 \
- --ipv6 \
- -o "parent=ens18" \
- -o ipvlan_mode=l2 \
- my-ipvlan
复制代码 subnet\gateway\parent按照机器实际运行环境填写。
到这里docker就配置完成了,不需要改任何配置文件。
起个docker验证一下:
- # 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地址在路由器或光猫上设置好白名单,即可在公网直接访问了。
|