1.
场景概述与需求分析
- 场景:香港VPS公网IP可能因重启或提供商策略发生变化,业务需要将当前公网IP加入访问白名单。
- 需求:实时监控公网IP变化并在变化时自动更新CDN/WAF或防火墙白名单,保证远程管理和API访问不中断。
- 涉及组件:服务器/VPS、域名解析、CDN(如Cloudflare)、DDoS防御设备与软件防火墙(iptables/ufw/csf)。
- 风险点:IP变化导致SSH/API被阻断、误触发DDoS防御封禁、频繁更新导致API配额耗尽。
- 成功指标:检测延迟小于5分钟,自动更新成功率>99%,并在失败时发送告警(邮件/企业微信/Slack)。
2.
技术路线与常用工具
- 外网IP获取:调用公网IP接口(如 https://api.ipify.org 或 https://ifconfig.me)获取当前IP。
- 比对机制:保存上次IP(/var/lib/current_ip),通过字符串比较决定是否更新。
- 更新目标:本地防火墙(iptables/ufw/csf)、云提供商EIP绑定API、Cloudflare/阿里云/腾讯云WAF白名单API。
- 调度方式:使用cron或systemd timer做定时检查;推荐每5分钟一次(*/5 * * * *)。
- 告警与日志:将事件写入/var/log/ip_watch.log,并在更新失败或IP变化时触发邮件或Webhook告警。
3.
示例脚本(Bash)与部署步骤
- 环境:Ubuntu 20.04,bash,curl,jq已安装。示例服务器配置:2 vCPU、4GB RAM、磁盘40GB、带宽100Mbps。
- 脚本逻辑:获取公网IP -> 与历史IP比较 -> 更新防火墙/调用API -> 记录日志并告警。
- 样例脚本(保存为 /usr/local/bin/check_ip.sh):
#!/bin/bash
IP_FILE=/var/lib/current_ip
CURR=$(curl -s https://api.ipify.org)
[ -z "$CURR" ] && exit 1
LAST=$(cat $IP_FILE 2>/dev/null || echo "")
if [ "$CURR" != "$LAST" ]; then
echo "$(date '+%F %T') IP changed $LAST -> $CURR" >> /var/log/ip_watch.log
# 本地更新示例:允许新IP通过SSH端口22(使用ufw)
ufw allow from $CURR to any port 22 proto tcp
echo $CURR > $IP_FILE
# 可在此处调用Cloudflare/API更新白名单
fi
- 部署:chmod +x /usr/local/bin/check_ip.sh,加入crontab(*/5 * * * * /usr/local/bin/check_ip.sh)。
4.
将IP更新到本地与云端白名单的实操
- 本地防火墙:使用ufw示例命令 ufw allow from 203.88.12.34 to any port 22 proto tcp;若使用iptables则用 iptables -I INPUT -s x.x.x.x -p tcp --dport 22 -j ACCEPT。
- CSF示例:csf -a 203.88.12.34 # 添加到allow列表。
- Cloudflare API示例(更新Access Rule):
curl -X POST "https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules" \
-H "X-Auth-Email: your@example.com" \
-H "X-Auth-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{"mode":"whitelist","configuration":{"target":"ip","value":"203.88.12.34"},"notes":"auto-add from hk-vps"}'
- 阿里云/腾讯云WAF:使用各自SDK或API,注意API速率限制与鉴权。
- 回滚策略:记录旧IP并在需要时删除新规则(定期清理历史白名单条目)。
5.
真实案例:香港VPS自动白名单系统
- 背景:某SaaS公司在香港机房部署管理节点,公网IP频繁在重启后变化,导致远程部署与监控通道断开。
- 服务器配置示例:香港VPS ID hk-002, Ubuntu 20.04, 2vCPU, 4GB, 公网IP动态分配(示例初始IP 203.88.12.34)。
- 解决方案:部署上文脚本并对接Cloudflare与本地ufw,监测间隔5分钟,更新同时写入日志并触发企业微信告警。
- 运行效果:60天内IP变化次数为7次,自动更新成功7次,平均恢复时间3分钟,人工干预0次。
- 教训:在一次IP频繁切换事件中,发现API密钥配额接近上限,后续改为先本地放行再异步批量更新云端白名单。
6.
IP变更日志示例(表格展示)
- 下表为自动监控脚本在示例项目中的IP变更记录(表格居中、边框1px、文字居中):
| 时间 | 旧IP | 新IP | 触发源 |
| 2026-03-01 03:12 | 203.88.12.34 | 203.88.45.21 | VPS重启 |
| 2026-03-18 11:05 | 203.88.45.21 | 203.88.45.22 | 提供商网络调整 |
| 2026-04-05 22:40 | 203.88.45.22 | 203.88.12.55 | 机房迁移 |
- 注:表中为示例IP,请在生产环境使用脚本读取真实接口返回值。
- 日志保留策略:建议至少保留90天,便于审计与回滚。
- 配额管理:对接云API时务必处理速率限制和错误重试。
7.
防护建议与运维注意事项
- 防御与最小权限:仅将必要端口与可信IP加入白名单,避免长期开放敏感端口。
- 多重验证:结合密钥登录/证书,避免仅依赖IP白名单作为唯一认证手段。
- 频率控制:避免过于频繁地向第三方API提交更新,建议合并变更或使用节流策略。
- 审计与报警:每次IP变更必须写入审计日志并配置告警;异常(如短时间内多次变更)应触发人工介入。
- 灾难恢复:准备备用管理通道(如跳板机/手机VPN),以防自动更新失败导致无法远程访问。
来源:实战指南 教你监控香港服务器动态ip 并自动更新白名单