Debian 系统上 Docker 容器设置仅泛域名访问教程
在 Debian 系统上设置 Docker 容器仅通过泛域名访问的教程,涉及到使用 1panel 面板和 Debian 系统。由于自带映射限制和防火墙设置问题,需要手动配置 iptables 规则来实现局域网内访问和外网泛域名访问。以下是详细的步骤和配置方法。
前置条件
- 拥有域名
- 安装了 1panel 面板
- 使用 Debian 系统
教程步骤
第一步:查询当前 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 使用相同版本的 iptables,大多数 Debian 新版本默认使用 nft。
第二步:添加 IPv4 和 IPv6 规程
请根据实际局域网网段进行修改。
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)
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. 拒绝外网网卡的其他所有流量
iptables -A DOCKER-USER -i enp1s0 -j DROP
# 4. 默认返回
iptables -A DOCKER-USER -j RETURNIPv6 配置
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完成以上步骤后,再次测试即可确保设置生效。通过这些配置,您可以实现 Debian 系统上 Docker 容器仅通过泛域名访问,同时保护其他端口不受外网访问。
评论已关闭