怎么在Linux利用Iptables-T-Nat配置基于域名动态解析的规则(配合外部脚本)

轻磊君_9984

轻磊君_9984

2026-05-25

766人浏览

原创

iptables本身不支持实时域名解析,所有“基于域名”的规则实为脚本定期解析域名并更新静态ip规则;其核心是预解析+定时刷新,而非动态dns查询。

怎么在linux利用iptables-t-nat配置基于域名动态解析的规则(配合外部脚本)

iptables 本身不支持实时域名解析,也不能在规则运行时动态查 DNS。所谓“基于域名的 iptables 规则”,本质是用外部脚本定期将域名解析为 IP 地址,并更新 iptables 的 -d(目标 IP)或 --to-destination 参数。整个流程是“静态规则 + 定期刷新”,不是 iptables 自动做 DNS 查询。

下面分三部分说明:怎么实现、关键注意事项、一个可用的最小化脚本示例。

一、核心原理:iptables 只认 IP,域名需预解析

iptables 的 nat 表中 DNAT/REDIRECT/PREROUTING 规则不支持写域名(如 -d www.example.com 在多数内核版本中会报错或静默失败)。即使某些旧版内核允许,它也只在规则加载时做一次 DNS 解析(非动态),后续 IP 变更不会自动同步。

所以必须靠外部脚本完成:

  • 定时执行 dig +short www.example.com A 或 nslookup -type=A www.example.com | tail -1
  • 提取返回的 IPv4 地址(注意过滤 AAAA、CNAME、空行)
  • 用新 IP 替换旧 iptables 规则(先删再加,或用 -I 插入+-D 删除旧条目)
  • 保存规则并确保不干扰其他策略(如避免重复添加、漏删)

二、实用配置要点

以把访问 www.bad-site.com 的流量重定向到本地拦截页(127.0.0.1:8080)为例:

  • 必须用 PREROUTING 链:匹配进入本机的数据包(网关模式下对内网请求生效;本机直连需配合 OUTPUT 链)
  • 协议和端口要明确:HTTP 用 --dport 80,HTTPS 用 --dport 443(但注意:HTTPS 目标 IP 是服务器 IP,不是域名;SNI 域名在 TLS 层,iptables 看不到)
  • 避免循环和误杀:加 -s 127.0.0.1 -j RETURN 和 -d 127.0.0.1 -j RETURN 防代理自环
  • 推荐用 DNAT 而非 REDIRECT:DNAT 可指定完整目标 IP+端口,语义更清晰;REDIRECT 仅限本机端口重定向
  • 规则要带注释(--comment):方便脚本识别和清理,例如:--comment "domain-dnat-www.bad-site.com"

三、最小可行脚本示例(每5分钟更新)

保存为 /usr/local/bin/update-domain-dnat.sh,赋予可执行权限:

Obsidian (Linux)
Obsidian (Linux)

操作 Obsidian 库(纯 Markdown 笔记),并通过 notesmd-cli 实现自动化。

下载
#!/bin/bash
DOMAIN="www.bad-site.com"
TARGET_IP=$(dig +short "$DOMAIN" A | head -n1 | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$')
if [ -z "$TARGET_IP" ]; then
  echo "[$(date)] DNS lookup failed for $DOMAIN" >&2
  exit 1
fi
<h1>先删除旧规则(按 comment 匹配)</h1><p>iptables -t nat -D PREROUTING -d "$TARGET_IP" -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080 --comment "domain-dnat-$DOMAIN" 2>/dev/null</p><h1>添加新规则</h1><p>iptables -t nat -I PREROUTING -d "$TARGET_IP" -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080 --comment "domain-dnat-$DOMAIN"</p><h1>保存(适配 Debian/Ubuntu)</h1><p>iptables-save > /etc/iptables/rules.v4 2>/dev/null || true
</p>

加入定时任务(crontab -e):

*/5 * * * * /usr/local/bin/update-domain-dnat.sh >> /var/log/dnat-update.log 2>&1

注意:该脚本只处理 A 记录且仅 IPv4;若目标站使用 CDN 或多 IP 轮询,需扩展逻辑(如取全部 A 记录并逐条加规则)。

不复杂但容易忽略:DNS 解析结果可能有 TTL 缓存、CDN 返回不同地区 IP、域名无 A 记录只有 CNAME——这些都得在脚本里加判断和 fallback。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 网络安全
Java 网络安全

本专题聚焦 Java 在网络安全与加密通信中的应用,系统讲解常见加密算法(MD5、SHA、AES、RSA)、数字签名、HTTPS证书配置、令牌认证(JWT、OAuth2)及常见安全漏洞防护(XSS、SQL注入、CSRF)。通过实战项目(如安全登录系统、加密文件传输工具),帮助学习者掌握 Java 安全开发与加密技术的实战能力。

2025.10.13

4945

12

PHP 安全与防护
PHP 安全与防护

本专题聚焦于PHP开发中的安全问题与防御措施,详细讲解SQL注入、XSS攻击、CSRF攻击、文件包含漏洞等常见安全风险及其修复方法。通过结合实际案例,帮助开发者理解漏洞成因,掌握输入验证、会话安全、加密存储与安全编码规范,全面提升PHP网站的安全防护水平。

2025.11.04

415

21

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4210

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3553

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2793

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

6830

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6482

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3733

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3225

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习