| 
 | 
 本帖最后由 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地址在路由器或光猫上设置好白名单,即可在公网直接访问了。 
 
 
 
 |   
 
 
 
  
 |