我正在使用混合 VPN 执行一些自定义路由,这需要我将每个 Google Gmail SMTP 服务器 IP 添加到路由表中,以便它们通过 VPN 默认网关以外的其他网关。
按照这,我可以确定 Google 的一般地址范围,但是我似乎无法直接隔离 SMTP 服务器。奇怪的是,我曾向一家 VPN 公司询问过,他们回复了所有特定的 Gmail SMTP 服务器,但没有解释如何确定这些 IP 地址。
如何通过 shell 指令隔离这些 IP 地址?标准 GNU Linux 或 OS X 方法就可以了。
答案1
请测试一下很多因为它只是一个 Q&D WAG,但我相信这可以满足您的要求:
dig @8.8.8.8 +short _spf.google.com TXT \
|awk '
BEGIN {RS=" " ; FS=":"} ;
$1="include" {print $2}
' \
|sed -e '/^\s*$/d' \
|while read NETBLOCK ; do
dig @8.8.8.8 +short "${NETBLOCK}" TXT \
|awk '
BEGIN {RS=" " ; FS=":"} ;
$1 ~ /^ip4/ {print $2} ;
$1 ~ /^ip6/ {s = ""; for (i = 2; i <= NF; i++) s = s":"$i; print s }
' \
|sed -e 's/^://' ;
done
请注意,Google 将大部分公共分配都放入了 SPF 记录中。这是有道理的,因为它允许他们灵活地添加/删除/移动/更改其出站邮件网关,但可能不如问题作者想要的那么细致。
答案2
您需要做的就是通过 DNS 查找 MX 记录。这会为您提供(当时)Gmail 用于接收邮件的所有服务器的列表。
答案3
- 可以使用@DTK 的答案找到出站服务器
- 可以使用@Rex 的答案找到入站服务器
两个答案都是正确的,但不完整。每个答案都只提供特定时间点的服务器。即使一周后,服务器也可能完全不同,因为 Google 经常更换服务器。
真正的解决方案是完全不用担心 Google 的服务器。让邮件服务器为您完成这项工作。(这就是它们的目的。)在“此”网络中放置一个智能主机来中继邮件。通过隧道将 Google 的邮件(*@gmail.com、*@googlemail.com 等)中继到 VPN 后面“该”网络上的另一个智能主机。“该”智能主机完成其工作并解析 Google 域的 MX 并将邮件发送给 Google。
在该配置中,“此”智能主机只需知道 Google 的所有邮件应首先发送到“该”智能主机。两台服务器之间的网络流量均通过隧道传输(可能还通过防火墙),并且是端口 25 上的唯一连接。(由于两台服务器都是“您的”服务器,因此它们甚至可以通过您想要的任何端口进行通信)。
因此,您只需配置任何客户端即可使用“此”智能主机来传递邮件。
使用 Postfix 可以轻松完成此操作(请参阅relay_domains 和 transport_maps 作为开始)。我可以为您提供一个工作配置(VPN 内容除外)。