例如,我在 servera.example.com 和 serverb.example.com 上运行着一台服务器。我想将所有端口 80 流量重定向到 servera.example.com 到 serverb.example.com,其他端口保持不变。困难在于 serverb.example.com 有一个动态 IP,因此无法将该 IP 直接放入 iptables 规则中。有什么办法可以做到这一点吗?
答案1
您可以使用一个简单的脚本来找出 serverb.example.com 的当前 IP,只需运行:
[root@user ~]# dig +short serverb.example.com | sed -e '1d'
这将返回服务器 b 的当前 IP 地址。但请注意,只有使用新 IP 更新 DNS 记录时,此操作才会起作用。
如何使用这个脚本由你决定,例如:
#!/bin/bash
SERVB=`dig +short serverb.example.com | sed -e '1d'`
iptables (your rule goes here) -d $SERVB
答案2
您无法直接使用 iptables/netfilter 执行此操作,因为只有在加载规则时才会查询 DNS。如果 serverb.example.com 在加载规则时指向 192.0.2.1,而它更改为 192.0.2.2,则 netfilter 不会知道,数据包将被发送到错误的地址。
也许反向代理会帮助你。
答案3
首先确保 server.example.com 的 DNS 记录将自动更新。
第二 - 如果服务器自动更新其 DNS 记录,请使用来自 @fallen 的脚本,但插入一个用于刷新 iptables 表的命令。
第三 - 设置 Cron 作业或系统单元以定期执行脚本。