我想根据时间而不是 URL 更改我的 IP 地址。以下是我的 iptable 规则,用于修改我拥有的 IP:
sudo iptables -t nat -A POSTROUTING -o em1 -p tcp --dport 80 -j SNAT \
--to x.x.x.118-y.y.y.128
问题是每次我检查 ipflag.com 时,我都只能得到一个特定的 IP,我不希望这样,我想在 iptables 中制定一条规则,这样它会根据时间更改我的 IP,比如每 5 分钟一次。
可以这样做吗?
答案1
时间模块将提供接近您想要的内容;以下内容涵盖每天凌晨 2:00 至早上 6:00(阅读此模块以获取更多信息,因为它也允许按一周中的每一天进行定位):
-m time --timestart 02:00 --timestop 06:00
但您需要创建许多规则才能实现“每 5 分钟”的要求。
还要注意,由于连接跟踪模块的工作方式,一旦建立连接,它就会被跟踪(将条目添加到 conntrack 表中),并且它将保持这种状态,无论您为此制定了什么 iptables“时间匹配”规则,直到它过期(对于 UDP)或被拆除(TCP 连接关闭/重置等)。因此,即使您每 5 分钟轮换一次不同的 IP 地址,如果您有一个与对等方保持打开的持久连接,它也不会自动终止和重置 - 它将使用它首先匹配的 IP 地址(通过您的 iptables“时间匹配”规则)保持不间断的建立状态。要强制重置连接,将其移动到新 IP,您还必须开始使用conntrack
(conntrack-tools
RPM 包的一部分)主动重置您希望移动到新 IP 地址的所有或部分连接。您可以执行 crontab 条目来实现此目的,每 5 分钟运行一次类似这样的操作:
/usr/sbin/conntrack -D -s 192.168.0.128
重置来自主机 192.168.0.128 的所有正在跟踪的连接(仅使用 -D 运行即可对所有跟踪的连接执行完整的全面重置)。