Docker安装了IPTV 4GTV 没有TOKEN UFW指定IP规则不起作用,人人都能访问流量顶不住。直接改/etc/docker/daemon.json文件 Docker无法访问外网IPTV 4GTV无法观看。
- 配置 Docker 网络:为 Docker 配置网络以与 UFW 协同工作。Docker 配置文件(通常位于
/etc/docker/daemon.json),SSH命令一键添加内容:
cat <<EOF >/etc/docker/daemon.json
{
"iptables": false
}
EOF这将告诉 Docker 不要直接操作 iptables 规则,而是使用 UFW 管理规则。
当Docker配置中设置了"iptables": false时,容器无法访问外网的主要原因是IP伪装(MASQUERADE)功能被禁用,导致容器流量无法正确进行网络地址转换
手动添加MASQUERADE规:如果仍需禁用Docker的iptables管理,可手动添加规则:
# 添加 MASQUERADE 规则
sudo iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
# 确保 FORWARD 链允许 Docker 网络段的转发
sudo iptables -I FORWARD -s 172.17.0.0/16 -j ACCEPT
sudo iptables -I FORWARD -d 172.17.0.0/16 -j ACCEPTsudo mkdir -p /etc/iptables
sudo iptables-save > /etc/iptables/rules.v4由于手动添加的 iptables 规则在重启后会丢失,需要使用持久化工具。如果系统中同时启用了 UFW,可能会与 iptables-persistent 产生管理冲突,建议只使用其中一种工具。使用rc.local脚本
Debian 12默认关闭rc-local服务且没有rc.local文件,需要手动配置。SSH命令创建/etc/rc.local文件并添加执行权限:
sudo cat <<EOF >/etc/rc.local
#!/bin/sh -e
# 看Error错误再加 创建monitor_filter集合(如果不存在)
ipset create monitor_filter hash:ip 2>/dev/null || true
# 看Error错误再加 创建所有必要的 IP 集合
ipset create bt_ip_filter hash:ip 2>/dev/null || true
# 一般这一行就够了 iptables-restore命令
iptables-restore < /etc/iptables/rules.v4
exit 0
EOF确保文件具有执行权限
sudo chmod +x /etc/rc.local - 首先给rc.local文件添加可执行权限
sudo systemctl daemon-reload - 然后重新加载systemd守护进程配置
sudo systemctl enable rc-local.service - 启用rc-local服务使其开机自启
sudo systemctl start rc-local.service - 最后启动rc-local服务
systemctl status rc-local.service - 检查服务状态 查看Error错误如果上面没出错这步省略SSH命令创建rc.local 服务
cat <<EOF >/etc/systemd/system/rc-local.service
[Unit]
Description=/etc/rc.local
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload - 先重新加载systemd配置
sudo systemctl enable rc-local.service - 启用服务
sudo systemctl start rc-local.service - 启动服务
systemctl status rc-local.service - 检查服务状态
或者使用简化命令:
systemctl enable --now rc-local.service - 这个命令会同时启用并启动服务重新启动 Docker 和 UFW:在完成以上配置后,重新启动 Docker 和 UFW 服务以应用新的配置。
sudo systemctl restart docker
sudo systemctl restart ufw- 验证配置:使用
ufw status命令检查 UFW 的状态和规则,并确保 Docker 容器的流量能够正常通过 UFW。
允许特定的 IP段 访问特定的端口:ufw allow from 192.168.0.0/13 to any port 50007 proto tcp (proto tcp 是定义 tcp 协议,也可以省略)
192.168.0.0/13是你所在地区宽带的动态IP段,可以用IP计算器算一下。
按编号删除规则
先用 sudo ufw status numbered 查看编号
再执行:
sudo ufw delete <rule_number>
例如:sudo ufw delete 3
自动失效时手动:从保存的规则文件中恢复iptables配置sudo iptables-restore < /etc/iptables/rules.v4
如果您之前手动配置过iptables规则,可能与UFW管理的规则产生冲突。您可以使用 sudo iptables -F(清空规则)等命令谨慎操作,并记得重新启用UFW或保存规则。
检查rc-local.service服务配置
在某些系统中,需要手动创建rc-local.service文件。检查该服务是否已正确配置并启用:
systemctl daemon-reload
systemctl enable rc-local.service
systemctl start rc-local.serviceAI写的一键脚本保存root文件夹.sh文件,root权限运行脚本sudo ./qwesd.sh
#!/bin/bash
# IPTables服务一键安装脚本
# 功能:创建systemd服务单元,自动恢复iptables规则
set -e
echo "========================================"
echo " IPTables规则恢复服务安装程序"
echo "========================================"
# 检查root权限
if [ "$EUID" -ne 0 ]; then
echo "请使用root权限运行此脚本"
echo "命令: sudo bash $0"
exit 1
fi
# 创建iptables目录
echo "创建/etc/iptables目录..."
mkdir -p /etc/iptables
# 添加Docker网络相关的iptables规则
echo "配置Docker网络规则..."
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 2>/dev/null || true
iptables -I FORWARD -s 172.17.0.0/16 -j ACCEPT 2>/dev/null || true
iptables -I FORWARD -d 172.17.0.0/16 -j ACCEPT 2>/dev/null || true
# 保存当前iptables规则
echo "保存iptables规则到/etc/iptables/rules.v4..."
iptables-save > /etc/iptables/rules.v4
# 创建systemd服务文件
echo "创建iptables-restore.service..."
cat > /etc/systemd/system/iptables-restore.service << 'EOF'
[Unit]
Description=Restore iptables firewall rules
After=network.target
Wants=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
RemainAfterExit=yes
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# 重新加载systemd配置
echo "重新加载systemd配置..."
systemctl daemon-reload
# 启用并启动服务
echo "启用iptables-restore服务..."
systemctl enable iptables-restore.service
echo "启动iptables-restore服务..."
systemctl start iptables-restore.service
# 验证安装结果
echo "========================================"
echo "安装完成!验证结果如下:"
echo "========================================"
# 检查服务状态
echo "1. 检查服务状态:"
systemctl status iptables-restore.service --no-pager
echo ""
echo "2. 检查iptables规则:"
iptables -L -n | head -20
echo ""
echo "3. 检查NAT规则:"
iptables -t nat -L -n | head -20
echo ""
echo "服务文件位置: /etc/systemd/system/iptables-restore.service"
echo "规则文件位置: /etc/iptables/rules.v4"
echo "下次系统启动时将自动恢复iptables规则"
echo "========================================"
<code_end>
<code_start project_name=iptables_restore_service filename=check-status.sh title=状态检查脚本 entrypoint=false runnable=true project_final_file=true>
#!/bin/bash
# IPTables状态检查脚本
echo "=== IPTables服务状态检查 ==="
echo "服务状态:"
systemctl status iptables-restore.service --no-pager
echo ""
echo "=== 当前iptables规则 ==="
echo "FILTER表:"
iptables -L -n -v
echo ""
echo "NAT表:"
iptables -t nat -L -n -v
echo ""
echo "=== 系统信息 ==="
echo "系统版本: $(cat /etc/os-release | grep PRETTY_NAME | cut -d= -f2 | tr -d '"')"
echo "内核版本: $(uname -r)"
echo "当前时间: $(date)"
<code_end>AI写的另一个一键脚本
#!/bin/bash
# Docker网络配置一键脚本
# 功能:配置Docker的iptables设置和网络转发规则
set -e # 遇到错误立即退出
echo "开始配置Docker网络设置..."
# 检查是否以root权限运行
if [ "$EUID" -ne 0 ]; then
echo "错误:请使用sudo或以root用户运行此脚本"
exit 1
fi
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo "错误:Docker未安装,请先安装Docker"
exit 1
fi
# 创建Docker配置目录
echo "创建Docker配置目录..."
mkdir -p /etc/docker
# 配置daemon.json文件
echo "配置Docker daemon.json..."
cat <<EOF > /etc/docker/daemon.json
{
"iptables": false,
"bip": "172.17.0.1/16"
}
EOF
# 添加iptables规则
echo "配置iptables规则..."
# 清除可能存在的旧规则
iptables -t nat -D POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 2>/dev/null || true
iptables -D FORWARD -s 172.17.0.0/16 -j ACCEPT 2>/dev/null || true
iptables -D FORWARD -d 172.17.0.0/16 -j ACCEPT 2>/dev/null || true
# 添加MASQUERADE规则
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
# 配置FORWARD链规则
iptables -I FORWARD 1 -s 172.17.0.0/16 -j ACCEPT
iptables -I FORWARD 1 -d 172.17.0.0/16 -j ACCEPT
# 启用IP转发
echo "启用IP转发..."
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
# 创建systemd服务来持久化规则
echo "创建systemd服务持久化规则..."
cat <<EOF > /etc/systemd/system/docker-network-rules.service
[Unit]
Description=Docker Network Rules
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c '\
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE; \
iptables -I FORWARD -s 172.17.0.0/16 -j ACCEPT; \
iptables -I FORWARD -d 172.17.0.0/16 -j ACCEPT'
ExecStop=/bin/bash -c '\
iptables -t nat -D POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 2>/dev/null || true; \
iptables -D FORWARD -s 172.17.0.0/16 -j ACCEPT 2>/dev/null || true; \
iptables -D FORWARD -d 172.17.0.0/16 -j ACCEPT 2>/dev/null || true'
ExecReload=/bin/bash -c '\
iptables -t nat -D POSTROUTING -s 172.17.0.0/16 -j MASQUERADE 2>/dev/null || true; \
iptables -D FORWARD -s 172.17.0.0/16 -j ACCEPT 2>/dev/null || true; \
iptables -D FORWARD -d 172.17.0.0/16 -j ACCEPT 2>/dev/null || true; \
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE; \
iptables -I FORWARD -s 172.17.0.0/16 -j ACCEPT; \
iptables -I FORWARD -d 172.17.0.0/16 -j ACCEPT'
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动systemd服务
echo "启用systemd服务..."
systemctl daemon-reload
systemctl enable docker-network-rules.service
systemctl start docker-network-rules.service
# 重启Docker服务
echo "重启Docker服务..."
systemctl restart docker
# 创建规则检查脚本
echo "创建网络规则检查脚本..."
cat <<EOF > /usr/local/bin/check-docker-network.sh
#!/bin/bash
echo "=== Docker网络规则检查 ==="
echo "1. 检查NAT表规则:"
iptables -t nat -L POSTROUTING -n
echo ""
echo "2. 检查FORWARD链规则:"
iptables -L FORWARD -n
echo ""
echo "3. 检查Docker网络接口:"
ip addr show | grep docker
echo ""
echo "4. 检查IP转发状态:"
sysctl net.ipv4.ip_forward
EOF
chmod +x /usr/local/bin/check-docker-network.sh
echo ""
echo "=== 配置完成 ==="
echo "✓ Docker daemon.json 已配置"
echo "✓ iptables规则已添加"
echo "✓ IP转发已启用"
echo "✓ systemd服务已创建并启用"
echo "✓ 检查脚本已安装到 /usr/local/bin/check-docker-network.sh"
echo ""
echo "使用方法:"
echo "1. 运行 'check-docker-network.sh' 检查网络规则"
echo "2. 重启系统后规则会自动恢复"
echo "3. 如需重置规则,重启docker-network-rules服务"
echo ""
echo "注意:此配置将Docker默认网络设置为172.17.0.0/16,并禁用Docker自动管理iptables"ufw-docker 防火墙工具
参考:https://blog.lufei.de/p/434/
sudo iptables -I DOCKER-USER 1 -s 192.168.1.11 -p tcp --dport 5050 -j ACCEPT
sudo iptables -I DOCKER-USER 2 -p tcp --dport 5050 -j DROP
ufw route allow proto tcp from any to 172.17.0.7 port 5050
删除 sudo ufw route delete allow proto tcp from any to 172.17.0.7 port 5050
Docker 和 UFW 一起用可能会出现问题
参考:https://zhuanlan.zhihu.com/p/628899663
Q或CTEL+C退出 Ctrl+X Y 回车退出