Linux路由不处理域名

Linux路由不处理域名

我想知道我是否有一个具有 2 个网络接口(1.1.1.1 和 2.2.2.2)并且 1.1.1.1 设置为主网络接口的 VPS...

eth0 = 1.1.1.1
eth0:1 = 2.2.2.2

现在我想将 domain.com 的所有流量(我不知道该域名是否使用 Cloudflare)路由到 IP 2.2.2.2 eth0:1

示例1

如果运行,wget domain.com它将通过 2.2.2.2 eth0:1,
但如果运行,wget google.com它将通过 1.1.1.1 eth0

ex2

如果我访问“whatismyip.com”通过 eth0,它会显示我的 IP 是“1.1.1.1”,
但如果我访问“whatismyipaddress.com”,它会通过 eth0:1,所以它会显示我的 IP 是“2.2.2.2”

答案1

有几件事需要考虑:

Linux路由不处理域名

Linux 上有很多路由配置选项,但没有一个接受裸域名。毕竟,我们讨论的是 IP 路由。因此必须为 IP 地址定义规则,当域的 DNS 记录发生变化时,这些规则显然会“失效”。

界面偏好

在这种情况下,有 2 个接口提供到同一子网 (0.0.0.0/0,即 Internet) 的路由。为了告诉内核优先使用特定接口,我们需要应用基于策略的路由 (PBR)。

顾名思义,基于策略的路由通过定义策略(又称“规则”)来确定使用哪个接口。如果没有策略,内核将选择与目标网络匹配的第一个路由。

路线、规则、表格

内核使用路由来确定如何处理数据包。路由是一个简单的定义,其中包括目标地址和要使用的链接(接口)。

路线被分组在tables,使用哪个表取决于定义的策略。

规则policy告诉内核要检查哪个表来路由数据包。策略的定义包括要检查的数据包的源、目标和路由表。

显示当前路线和政策

要显示系统当前使用的路由,请执行 ip route

这将显示路由表中的所有条目main。可以通过运行 来访问其他表ip route show table <tablename>

要显示当前使用的策略,请执行 ip rule

这列出了内核使用的所有策略/规则。它们从上到下迭代,直到一条规则与正在处理的数据包匹配。

例子

echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1

这些命令将创建一个新的路由表out1并将其添加10.0.0.1为访问互联网的网关。前往的流量3.4.5.6(需要替换为目标域的实际解析 IP 地址)将通过表中定义的默认网关发送out1,使用指定的设备eth0和 IP 1.1.1.1

我建议阅读一些现有的教程和指南来熟悉术语。搜索iproute2linux advanced routing and traffic control

最后,但并非最不重要的一点:在将更改应用于实时系统之前,请先测试它们。错误确实会发生,我个人更喜欢使用虚拟机而不是远程服务器。

相关内容