之前有用UFW版本放行IP,但是UFW无法和IPSET/IPTABLES良好相处,只好回归本源。
将下面脚本保存成mydomain.sh
,并添加运行权限,执行即可
需要定时运行检查IP更改可以crontab -e
打开计划任务
*/1 * * * * /root/ddns/mydomain.sh
脚本会读取mydomain.txt里的IP,并做比较。如果相同则不进行操作,如果不同,则会删除旧规则,添加新的规则。
shell#!/bin/bash
# 定义变量
file_name=$(basename "$0")
DOMAIN=${file_name%.*}
PORT="53207"
DATABASE_FILE="/root/ddns/$DOMAIN.txt"
# 获取当前域名的IP地址
CURRENT_IP=$(dig +short $DOMAIN)
# 检查是否存在数据库文件,如果不存在则创建
if [ ! -f $DATABASE_FILE ]; then
touch $DATABASE_FILE
fi
# 从数据库文件中获取上次记录的IP地址
OLD_IP=$(cat $DATABASE_FILE)
# 检查当前IP是否与上次记录的IP不同
if [ "$CURRENT_IP" != "$OLD_IP" ]; then
# 删除旧IP地址的iptables规则
sudo iptables -D INPUT -p tcp -s $OLD_IP --dport $PORT -j ACCEPT
# 添加新IP地址的iptables规则
sudo iptables -A INPUT -p tcp -s $CURRENT_IP --dport $PORT -j ACCEPT
# 更新数据库文件中的IP地址
echo $CURRENT_IP > $DATABASE_FILE
echo "IP地址已更新为: $CURRENT_IP"
else
echo "IP地址未发生变化"
fi