debian 系统 docker 容器设置仅泛域名访问
使用前提:
有域名,1panel 面板,debian 系统
我是小主机安装的 debian,想实现局域网内访问和外网使用泛域名访问
因为自带的映射一次只能设置一个 ip,而且 1panel 自带的防火墙和 DOCKER-USER 链平级,无法直接在 1panel 里设置防火墙影响容器端口的开放
教程开始:
前置 配置泛域名的方法
这两天在更新
第一步 查询当前 docker 使用 iptables 版本
echo "------ 账本 A: iptables-legacy (旧版) ------"
iptables-legacy -t nat -S DOCKER 2>/dev/null || echo "Legacy 中没有 DOCKER 链" echo "" echo "------ 账本 B: iptables-nft (新版/默认) ------"
iptables-nft -t nat -S DOCKER 2>/dev/null || echo "NFT 中没有 DOCKER 链" 需要 debian 系统和 docker 使用同一版本,debian 新版基本上是 nft
第二步 添加 ipv6 和 ipv4 规程
局域网网段请自行更改
1panel 面板自带的反向代理是容器运行,所以需要额外开放 80 和 443
ipv4:
# 清空现有规则,重新排列
iptables -F DOCKER-USER
# 1. 基础规则:允许已建立连接、本机、局域网
iptables -A DOCKER-USER -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A DOCKER-USER -i lo -j ACCEPT
iptables -A DOCKER-USER -s 192.168.5.0/24 -j ACCEPT
# 2. 【新增】特赦反向代理端口 (允许外网访问 Docker 的 80 和 443)
# 只有这样,外网流量才能到达你的 Nginx 容器
iptables -A DOCKER-USER -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -p tcp -m tcp --dport 443 -j ACCEPT
# 3. 拒绝外网网卡的其他所有流量
# (把 enp1s0 换成你的实际网卡名,如果不确定就用 ! -i lo 表示非回环)
iptables -A DOCKER-USER -i enp1s0 -j DROP
# 4. 默认返回
iptables -A DOCKER-USER -j RETURN
ipv6:
ip6tables -F DOCKER-USER
# 1. 基础规则
ip6tables -A DOCKER-USER -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A DOCKER-USER -i lo -j ACCEPT
ip6tables -A DOCKER-USER -s fe80::/10 -j ACCEPT
# 2. 【新增】特赦 IPv6 下的 80 和 443
ip6tables -A DOCKER-USER -p tcp -m tcp --dport 80 -j ACCEPT
ip6tables -A DOCKER-USER -p tcp -m tcp --dport 443 -j ACCEPT
# 3. 拒绝外网网卡的其他 IPv6 流量
ip6tables -A DOCKER-USER -i enp1s0 -j DROP
# 4. 默认返回
ip6tables -A DOCKER-USER -j RETURN 完成后再次测试即可