我已在 dyndns 域中注册了动态变化的公共 IP 地址,以便与 iptable 规则一起使用。在服务器上,我在 iptables 配置中允许此域的一些端口,如以下条目:
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -s mycompany.dyndns.com -p tcp -m tcp --dport 21 -j ACCEPT
但是每当我的调制解调器重新启动时,我都无法连接到这些允许的端口,因为公共 IP 会随着调制解调器重新启动而改变,并且不会在服务器上的 iptables 中更新。是否有任何选项可以自动更新服务器上的 iptable 规则。
答案1
简而言之:不,更新iptables
规则的唯一方法是替换它(iptales -R ...
)或删除它并使用更新的 IP 地址添加一个新规则(iptables -D ...
后跟iptables -A ...
)。
这篇博文讨论该问题并提出解决方案。
答案2
但是当我的调制解调器重新启动时,我无法连接到这些允许的端口,因为公共 IP 会随着调制解调器重新启动而改变,并且不会在服务器上的 iptables 中更新。
即使您正在使用域名应用规则,iptables 也会解析到给定域的公共 IP,并使用该公共 IP 应用规则。因此,每次调制解调器重启或 ISP IP 租约到期时,您都必须使用新分配的公共 IP 更新 iptables。
如果列出 iptables 规则,那么就会造成混淆,因为您会看到使用精确域名应用的规则。
iptables -L
为了更清楚起见,请将 iptables 规则保存到一个文件中并进行验证。您可以找到域名的解析 IP,而不是域名。
iptables-save > /tmp/iptables.rules
答案3
你可以用很多不同的方法来实现你想要的。例如,挖掘你的 Dyndns IP:
YOURIP="$(dig yourdomain.ddns.net +short A)"
然后使用 $YOURIP 变量定期检查你的 IP,并通过 cron 命令添加防火墙规则
Dig 是一款著名的查询 DNS 服务器实用程序,如果它不容易获得,您可以轻松地将其安装在您的 Linux 发行版中