Cloudflare DNS解析的Proxied模式与DNS Only模式的区别

2024年1月9日 1066点热度 1人点赞 0条评论

Cloudflare提供强大的免费DNS服务,是一款企业级权威性 DNS 服务,可以提供最快的响应时间、无与伦比的冗余以及采用了内置 DDoS 缓解和 DNSSEC 的高级安全保障。考虑到这些原因,我的个人博客域名(https://blog.yanghong.dev)一直放在Cloudflare进行免费的域名解析。

前几天在Cloudflare Dashboard里调整DNS设置的时候,看到DNS有两种不同的模式,一种是DNS Only(我一直设置成为这种模式),另外一种是Proxied,于是随手把本博客域名的DNS解析模式设置成了Proxied,用了一段时间,浏览器访问博客各种操作也没有任何问题。偶尔有一天想ssh远程登录博客服务器进行管理的时候,突然发现ssh连不上去了。开始以为是服务器挂掉了。登录VPS服务商的管理界面,发现工作正常。接着怀疑是不是端口没有放行或被不小心禁掉了,通过vnc的命令行终端看也没有问题。那问题到底在哪里呢?

firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: xxxx/tcp xxxx/udp yyyyy/tcp yyyyy/tcp yyyyy/udp #安全起见把端口号隐藏了。前两项是ssh端口
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

通过浏览器访问网站https://blog.yanghong.dev,访问正常。

然后测试ping博客服务器,得到如下结果:

ping blog.yanghong.dev

Pinging blog.yanghong.dev [104.21.48.108] with 32 bytes of data:
Reply from 104.21.48.108: bytes=32 time=250ms TTL=52
Reply from 104.21.48.108: bytes=32 time=251ms TTL=52
Reply from 104.21.48.108: bytes=32 time=249ms TTL=52
Reply from 104.21.48.108: bytes=32 time=250ms TTL=52

Ping statistics for 104.21.48.108:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 249ms, Maximum = 251ms, Average = 250ms

能够ping通,但是我发现ping的IP地址并不是我博客服务器的实际IP地址。这是怎么回事呢?难道跟DNS的Proxied模式有关?我把DNS设置回DNS Only,然后再尝试ping服务器,得到如下结果:

ping blog.yanghong.dev

Pinging blog.yanghong.dev [205.xxx.xxx.xxx] with 32 bytes of data: #安全起见隐藏了实际的IP
Reply from 205.xxx.xxx.xxx: bytes=32 time=200ms TTL=51
Reply from 205.xxx.xxx.xxx: bytes=32 time=198ms TTL=51
Reply from 205.xxx.xxx.xxx: bytes=32 time=181ms TTL=51
Reply from 205.xxx.xxx.xxx: bytes=32 time=188ms TTL=51

Ping statistics for 205.xxx.xxx.xxx:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 181ms, Maximum = 200ms, Average = 191ms

这次IP地址就是我服务器的实际地址了。然后ssh也能正常登录了。果然是因为Proxied模式。

又试图搜索了一下原因,发现Cloudflare社区原来就有过同样的讨论:

仔细读了一下,原来这两种模式的主要区别在于:

  • DNS Only模式下,所有的网络流量都会直接到服务器的实际IP。Cloudflare不会在这个过程中提供任何的安全防护。
  • Proxied模式下,所有的网络请求都会进入Cloudflare的IP而不是直接访问服务器的实际IP。Cloudflare会在前端提供安全防护如DDOS。但是在这种模式下,所有的非标准端口就不能工作了。

这样就完美解释了我碰到的问题:浏览器访问blog(80/443标准端口)能正常工作,但是ssh(非标准端口)就没法连接上了。

予人玫瑰,手有余香。如果您觉得本文对您有帮助,请点赞或打赏。

文章评论

您需要 登录 之后才可以评论