作者小头像 Lv.1
18 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
15
3
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

他的回复:
先给结论:传统 LXC 没有“在 config 里配网卡代理”这种一键端口映射(那是 LXD 的 proxy device 才有的),所以入向暴露只能用 nftables/iptables 写 DNAT;Debian 12 默认就是 nftables,直接用 nft 命令写最稳。重启不丢的做法是规则固化到 /etc/nftables.conf 并启用 nftables 开机自启。 一、先给容器固定 IP(不做这步,规则迟早失效) DHCP 分配的 10.0.3.x 重启后可能变化,DNAT 规则里写的是 IP,地址一变就指空了。在 /var/lib/lxc/容器名>/config 里写死: lxc.net.0.type = vethlxc.net.0.link = lxcbr0lxc.net.0.flags = uplxc.net.0.ipv4.address = 10.0.3.101/24lxc.net.0.ipv4.gateway = 10.0.3.1 然后 lxc-stop -n 容器名> && lxc-start -n 容器名>,用 lxc-ls -f 确认拿到 10.0.3.101。 二、开转发,写 DNAT(宿主机 8080 → 容器 80) echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-lxc.conf && sysctl --system nft add table ip lxc_natnft add chain ip lxc_nat prerouting '{ type nat hook prerouting priority dstnat; }'nft add chain ip lxc_nat postrouting '{ type nat hook postrouting priority srcnat; }'nft add rule ip lxc_nat prerouting tcp dport 8080 dnat to 10.0.3.101:80nft add rule ip lxc_nat postrouting ip daddr 10.0.3.101 tcp dport 80 masqueradenft add rule ip filter FORWARD ip daddr 10.0.3.101 tcp dport 80 acceptnft add rule ip filter FORWARD ct state established,related accept 重点说下 FORWARD 这两条:Debian 12 上如果装过 Docker,FORWARD 链默认是 DROP,光有 DNAT 包照样被丢,这是“规则都在但就是不通”最常见的原因。 三、重启不丢:固化 + 开机自启 nft list ruleset > /etc/nftables.confsystemctl enable --now nftables 以后每次改完规则都重新保存一遍。注意 Debian 12 上别把 iptables-persistent 和 nft 混着用,统一用 nft 这一套最省心。 四、华为云安全组别漏 ECS 控制台 → 安全组 → 入方向加一条 TCP 8080(源地址按需收紧),实时生效不用重启。如果子网还绑了自定义网络 ACL,ACL 是无状态的,出入两个方向都要放行。 五、分段验证(按顺序,一步一定位) 1. lxc-attach -n 容器名> -- ss -lntp:确认服务监听的是 0.0.0.0:80。如果只绑了 127.0.0.1,DNAT 过去也是 connection refused,必须改应用配置。2. 宿主机上 curl http://10.0.3.101:80:不通查容器和网桥。3. 宿主机上 curl http://宿主机内网IP>:8080:不通查 DNAT/FORWARD,用 nft list chain ip lxc_nat prerouting 看计数涨不涨。4. 外网 curl http://:8080:不通查安全组/ACL。 一个易错点:在宿主机本机执行 curl 127.0.0.1:8080 不通不代表配错了,本机流量不走 prerouting 链,别被这个误导;自测用宿主机内网 IP 或 EIP。 补充回答你第二个问题:config 里的 lxc.net.0.ipv4.nat 只管容器出网的 SNAT,做不了“宿主机端口 → 容器端口”的入向映射,别在这上面花时间;真想要一键映射就换 LXD,用 lxc config device add 容器名> web proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80 一条命令搞定。
他的回复:
先说结论:你这个场景(只备到华为云 OBS、每天一个包、只留 7 天),选 obsutil 还是 rclone 差别不大,真正决定省不省钱的是三件事:走内网 endpoint、把分片调大、让 OBS 生命周期自己删旧包。下面给一套能直接跑的配置。 一、obsutil 还是 rclone? 只在华为云内用、图省心 → obsutil。官方工具,对 OBS 的分片、断点续传、增量 sync 都有优化,配置一条命令搞定:obsutil config -i=AK -k=SK -e=内网endpoint。 以后可能同步到别的云/NAS → rclone。走 S3 兼容协议,provider 选 HuaweiOBS,通用性强。代价是每次 sync 都要 LIST 对比,请求数略多,参数要自己调。 二、省流量:同区域走内网 endpoint ECS 和 OBS 桶在同一区域时,用内网 endpoint 访问,上传流量走内网,不占公网带宽。rclone 的 S3 endpoint 填内网域名(控制台桶概览里有),obsutil 的 -e 参数同理。这是省流量最大的一笔,优先级最高。 三、省请求费:分片调大 + 对象数压到最少 OBS 请求费的大头在 PUT 次数,而分片上传每个分片都是一次 PUT:rclone 默认 --s3-chunk-size 只有 5MiB,一个 1GB 的包会被切成约 205 次 PUT;改成 128MiB 只要约 8 次 PUT。 另外两点:别传一堆碎文件,先在本地 tar.gz 打成一个包,一天只产生 1 个对象;用 copy 不用 sync——文件名带日期天然唯一,不需要同步语义,copy 还省掉了 LIST 目标端。 rclone copy /data/backup obs:mybucket/backup/$(date +%F) --s3-chunk-size 128M --s3-upload-concurrency 4 --s3-no-check-bucket --size-only 四、SQLite 一致性:别直接 tar 正在写的库 WAL 模式下直接打包 db 文件会拿到撕裂的页,恢复时报 malformed。先做在线热备,再打包: sqlite3 /data/app.db ".backup '/backup/app-$(date +%F).db'"tar -czf /backup/backup-$(date +%F).tar.gz -C /data app-$(date +%F).db docker-volumes docker-compose.yml 五、7 天自动清理:生命周期规则(0 请求) 控制台进桶 → 生命周期 → 新建两条规则,前缀都填 backup/:1)对象创建 7 天后过期删除;2)未完成的分段上传 3 天后清理(否则中断的分片会一直占容量计费)。服务端删除不消耗任何请求,比脚本里每天跑 delete 省。 注意三点:规则只支持前缀匹配,所以备份必须放独立前缀;时间粒度是天,实际删除会晚几小时,容量按 8 份估;别选低频/归档存储——低频最短 30 天、归档 90 天,7 天删会被补收最短存储费,标准存储最便宜。 六、定时脚本示例 #!/bin/bashset -eD=$(date +%F)sqlite3 /data/app.db ".backup '/backup/app-$D.db'"tar -czf /backup/backup-$D.tar.gz -C /data app-$D.db docker-volumes docker-compose.ymlrclone copy /backup/backup-$D.tar.gz obs:mybucket/backup/ --s3-chunk-size 128M --s3-no-check-bucket --size-onlyrm -f /backup/backup-$D.tar.gz /backup/app-$D.db cron 加 flock 防重入,避免某天备份超时导致两个进程叠加:17 3 * * * /usr/bin/flock -n /tmp/backup.lock /root/backup-obs.sh >> /var/log/backup.log 2>&1 上线前先 rclone copy --dry-run 核对一遍传输范围。按这套配下来:每天 1 个对象、约 8 次 PUT、同区域内网流量免费、7 天自动滚动清理,请求费基本可以忽略,存储包也只占 7~8 份的容量。