例如,我有这样的规则
#iptables -A OUTPUT -d www.google.com -j ACCEPT
当我在终端中输入此规则时,它会解析为适当的 IP,这就是rules.v4
我保存时存储的内容。有没有办法存储www.google.com
在自动加载的文件中而不是IP?我尝试直接编辑文件,但是当我在其中输入名称时,规则无法加载。
答案1
不,内核对名称一无所知。内核规则仅具有 IP 地址。使用文本格式保存和恢复这些规则iptables-save
,iptables-restore
该文本格式是内核中内容的可逆精确表示,因此也不涉及名称。
您可以做的最接近您想要的事情可能是以 shell 脚本的形式保存您的规则,您手动维护该脚本,并包含一系列iptables
用于ip6tables
设置可以包含名称的规则的命令。但请继续阅读以了解为什么您可能不应该这样做。
您应该首先仔细考虑为什么需要使用名称。您使用名称是否是因为您事先不知道该名称将指向哪个 IP 地址,还是因为该名称映射到的 IP 地址可能会不时发生变化?考虑一下,当您使用名称时,iptables
orip6tables
命令会立即解析该名称,然后无限期地存在于内核中的是 IP 地址。当名称和 IP 地址之间的映射发生变化时会发生什么? DNS 名称具有 TTL,它表示您应该缓存名称与地址之间的映射的时间长度。但当映射发生变化时,内核中的 iptables 规则不会更新,从而导致规则中包含陈旧/过时的 IP 地址。