1
lengrongec 52 天前
容器网络配置应该选择 bridge 模式,不是 host 模式
|
2
FawkesV 52 天前
反向代理
|
4
z7356995 52 天前 via Android
我是这样部署的,因为 443 和 80 端口被封,所以 nas 里其实不同服务是通过端口来区分的,群晖里外网不同的端口进来可以只向不同的服务,开放一下不同的端口进好了,我是用 ddns-go 用 cloudflare 来自动 ipv6 地址的 ddns,, 一些程序如 transmisson 不支技 ipv6 就用群晖代理转发
|
5
z7356995 52 天前 via Android
只要一个域名就好,这样不要配制那么多证书
|
6
coderZoe 52 天前
这样不好吧,把 docker 容器也配公网 ip 是不是不安全?最好还是主机对外暴露一个 nginx 端口,nginx 通过域名转发到主机相应的服务上。
|
7
YamatoRyou 52 天前
大致流程 (并不详尽):
宿主机部分 (通过以下步骤创建的接口默认不含 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 的块. 在宿主机创建的接口于下次重启机器后消失. |
8
edk24 52 天前
我自己的方案:
软路由 openwrt 拨号,用 lucky 插件 ddns 更新 ipv6 域名绑定。 以及子域名反向代理。 以及端口转发等 |
9
TimPeake 52 天前
我曾经也想这样。但是想想太复杂了 还是端口区分吧
|
10
idrunk 52 天前
直接配置解析就行了,不过被禁的典型端口搞不定的,除非在客户端配置转发,如果你的服务是面向自己在外使用的,可以带端口使用
|
11
idrunk 52 天前
哦,你是想用域名路由到指定服务,那可以用 nginx 等重定向请求到对应的容器啊
|
12
tsanie 51 天前
我的方案是 docker 容器不获取 ipv6 ,群晖 ddns ,然后利用群晖自带 nginx 的反向代理,给不同 hostname 设置 proxy_pass 到不同容器服务开放的端口。
群晖 web 上操作反向代理有点啰嗦,可以在文件存储上写好.conf ,然后 ln 到/usr/local/etc/nginx/sites-enabled/,最后 synosystemctl reload nginx 一下就 ok 了 顺便 include /usr/syno/etc/www/certificate/system_default/cert.conf;还可以使用系统默认的证书配置,很方便。 |
13
f165af34d4830eeb 51 天前
其实 ipv6 地址用一个就够了,靠 nginx 之类的反代通过子域名区分再转发到容器监听的端口上。
主域名绑定 ddns ,子域名再 CNAME 到主域名上就行,这样对外只需要一个 ipv6 地址。 |
14
Kaiyuan 51 天前 via iPhone
脚本用前缀加容器 MAC 组合成 IP ,然后改 DNS ,我在路由器上是这样子做的,给设备加域名。
|
15
Yadomin 51 天前 via Android 1
跑一个 traefik 做反代就完了
|
16
JensenQian 51 天前
直接搞个 wireguard 连回去完事了
|
17
Blabber9125 51 天前
容器怎么获取到的 ipv6 呢,是 macvlan 吗
|
18
WizardLeo 51 天前
不一定要容器 ipv6 访问的情况,使用宿主机 ipv6+反向代理实现 ipv6 连接宿主机再用内网 ipv4 转发到容器。
必须直连 ipv6 的情况(比如 bt 的 p2p 端口),直接用反掩码在防火墙里固定后 64 位地址,一般来说是不会变的。 |
19
axiauk 51 天前
最好的方法是将需要的服务从 docker 更换成 VB 或者 KVM 虚拟机
|
20
keengrass 51 天前
用 lucky 就可以搞定你的需求,我也是这么做的。
|
21
vicv 51 天前 via iPhone
你的网络连接方案和我的是一样的。我的做法是另外起一个容器运行 ddns ,这个 ddns 容器直接使用 emby 容器的网络命名空间就可以了,这样 ddns 容中的网络就是 emby 容器中的网络,其实这就是 K8s 里面的 Sidecar 容器模式。在 docker-compose 中可通过 network_mode 配置 ddns 容器连接到 emby 容器。贴上我的 docker-compose 文件作为参考:
services: emby: container_name: emby image: lovechen/embyserver:latest cap_add: - NET_ADMIN - SYS_ADMIN - SYS_MODULE networks: dmacvlan: ipv4_address: 192.168.2.2 priority: 1000 dbridge: ipv4_address: 172.16.2.2 priority: 100 volumes: - ./emby/config:/config - ./acme/ssl:/ssl - /volume/media:/Media devices: - /dev/dri:/dev/dri environment: - TZ=Asia/Shanghai - UID=0 - GID=0 - GIDLIST=0 - NVIDIA_VISIBLE_DEVICES=all restart: always emby-ddns: container_name: emby-ddns image: jeessy/ddns-go:latest network_mode: "service:emby" volumes: - ./emby/.ddns_go_config.yaml:/root/.ddns_go_config.yaml environment: - TZ=Asia/Shanghai depends_on: emby: condition: service_started restart: always networks: dmacvlan: name: dmacvlan enable_ipv6: true driver: macvlan driver_opts: parent: ovs_eth0 ipam: config: - subnet: 192.168.2.0/24 gateway: 192.168.2.1 - subnet: fc00:21:2::/64 gateway: fc00:21:2::1 dbridge: name: dbridge ipam: driver: default config: - subnet: 172.16.2.0/24 gateway: 172.16.2.1 |
22
tsvico 51 天前
建议最外边是 NAS 的 ipv6 ,指向 nginx
然后泛域名解析 *.XXX.XXX 到 nginx 在 nginx 中添加 emby.XXX.XXX 指向 emby 的 docker 内部地址,例如 http://emby:9063 添加 immich.XXX.XXX 指向 immich 的内部地址 http://immich:3000 |
24
Biiddd 51 天前
直接对外一个 v6, 全部用反代
|
25
epiloguess 51 天前
traefik 是正解,根据容器标签自动代理
|
26
TossPig 50 天前
我的方案,一台叫 tsnet 的 debian 虚拟机,上部署 caddy ,反代内网的所有 web 服务
tsnet 上跑 ddns-go,读取网卡的第一个 ipv6 地址 |