2024-03-17
学习资料
00

之前有用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