在 iptables 中启用动态 DNS 更新

在 iptables 中启用动态 DNS 更新

我在 wifi 路由器后面有一台 Debian 机器。该机器正在运行一个 cron 脚本,以便在 ping 到预定义主机失败时恢复连接。我已设置 iptables,以便只打开所需的端口/地址。一切正常。

它变得有点复杂,因为我还需要警惕路由器外部 IP 地址的可能变化,这就是我使用动态 DNS 提供商的原因(www.noip.com)以保持机器可以从外部访问。每当断线后恢复连接时,我都会使用以下命令来更新机器的地址:

curl https://login:[email protected]/nic/update?hostname=user.domain.net&myip=11.22.33.44

为了确定 11.22.33.44 部分,我运行

dig +short myip.opendns.com  @resolver1.opendns.com 

现在,这部分也可以正常工作了。但只有在禁用 iptables 的情况下才有效。这就是我的问题所在——我不确定要在 iptables 中启用哪些端口/地址才能让上述请求通过。

我设置了 iptables 来记录请求。我可以看到有问题的机器和 wifi 路由器之间的 UDP 交换,两者都使用端口 53。那是 DNS,我能理解。但是,Debian 机器还从路由器接收到一个发往 224.0.0.1 的数据包(好吧,我找到了它的含义 - 它是多播,尽管我不确定它有多必要),并向德国的一个看起来像 NTP(端口 123)的服务器发送一个 UDP 请求。最后,它通过端口 443 联系 52.9.108.157,这显然是 noip 服务器。

这是我的问题:

1

假设端口 123 是 ntp,我该怎么办?它真的是挖掘/更新过程的一部分吗?如果是这样,为什么是那个特定的德国服务器,我应该将它列入白名单吗?

2

224.0.0.1——我应该启用它吗?

(不询问 dynupdate.no-ip.com 的 IP 地址的动态处理,因为该站点上已经有答案: 使用 iptables 将流量重定向到动态 DNS 名称而不是 IP 地址?

(由 David Go 添加,以提高评论中提供的 iptables 规则的可读性格式)

-P INPUT DROP
 .......... 
-A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT 
.......... 
-A INPUT -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT
.......... 
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
 .......... 
-A INPUT -i enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT

答案1

我认为您的 iptables 列表中缺少一些规则。我假设这些规则无关紧要。

我猜测是缺少相关规则或者以下规则是错误的:

  -A INPUT -p udp -m udp --sport 53 --dport 1024:65535 -j ACCEPT

上述规则假设请求反转源端口和目标端口 - 即当你正在运行挖掘时,目的地端口为53,源端口为1024-65535。

我指出了另一个陷阱——这是相关的,但不是当前的问题——你只处理 UDP 端口 53。DNS 同时使用 UDP 和(对于较长的查询)TCP 53,因此你需要像这样的规则

  -A INPUT -p udp --dport 53 -j ACCEPT
  -A INPUT -p tcp --dport 53 -j ACCEPT

(您可以另外添加源端口,但我不确定这会带来什么好处)

答案2

实际上,我联系了 noip 的支持人员,他们指出我需要解除 INPUT 链上对端口 80 和 443 的阻止,以便执行 curl 请求。他们还提到了端口 8245,但即使没有它,命令也能正常工作。

相关内容