![这些ip线到底有什么作用呢?](https://linux22.com/image/129992/%E8%BF%99%E4%BA%9Bip%E7%BA%BF%E5%88%B0%E5%BA%95%E6%9C%89%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%E5%91%A2%EF%BC%9F.png)
我不久前在阅读论坛时发现了这些行,它们允许我在打开 VPN 时从内部访问 ssh。有人可以解释一下他们做了什么,以便我可以调整它以允许来自 VPN 外部的其他流量。我读过手册页,但对我来说没有意义。
ip rule add table 128 from 192.168.10.123
ip route add table 128 to 192.168.10.0/24 dev eth0
ip route add table 128 default via 192.168.10.1
答案1
我知道这个问题有点老了,但我只是花了几个小时把它拼凑在一起,所以如果它能帮助其他人找到这里的路,我会尝试一个不太技术性的答案。
为了理解这些命令及其作用,您需要了解一些事情。
首先,如果您的计算机上运行着 VPN 客户端来捕获流量并通过 VPN 引导流量,那么您做已经有自定义路由规则。如果您连接到 VPN 服务,而不是您自己控制的 VPN 服务器,则远程服务通常会在您连接时通过 openvpn 将路由规则推送到您的计算机。您可以ip route show
在连接 VPN 时通过发出命令来查看它们。其中包含的所有行tun0
均指您的 VPN 连接。
这tun0
是关键。从内核的角度来看,您的网卡(eth0
或enp1s0
其他任何东西)是一个网络接口,而 VPN 连接是第二个“虚拟”网络接口。如果您ip address
在 VPN 启动时发出命令,您可以看到它们都定义了自己单独的 IP 地址。通过虚拟网络接口路由的任何流量tun0
都会通过 VPN 发出,而通过该eth0
接口路由的任何流量都会绕过 VPN 直接发出。
正如在OpenVPN 维基,您的计算机上生成的流量将其“发件人”IP 地址设置为您默认将流量路由到的设备,这意味着 VPN,这意味着分配给 的 IP 地址tun0
。但!当常规物理网络设备上出现连接时(即不是通过 VPN),回复将有那设备的 IP 地址作为其“发件人”地址。现在,VPN 提供商推送给您的路由规则并不重要,他们只是看到传出流量并将其重定向到 VPN,tun0
仅此而已。因此,您尝试 ssh 进入该盒子,它会收到请求并回答它,但答案会通过 VPN 发出。然后你的 ssh 客户端会说“哇哦,这个回复来自与我尝试连接的 IP 地址完全不同的 IP 地址”并忽略它。因此,您无法建立到运行 VPN 客户端的计算机的入站连接,而这正是ip rule
和ip route
命令的用武之地。
这些命令的设置是基于策略的路由,这是一个复杂的话题。尽可能简单地,内核使用“路由表”来区分哪些流量停留在这台机器上(这是网络设备lo
,“环回”的缩写,其 IP 地址为 127.0.0.1)、哪些流量在同一台机器上LAN,因此无需经过路由器(也称为网关)即可直接发送到目的地,并且流量不会流向其他地方。为了访问互联网,您的计算机必须有一个“默认网关”路由条目,将所有“其他”流量引导到连接到外部世界的路由器。所有这一切都发生在默认路由表,通常是您唯一需要关心的。
但 VPN 路由设置重写了您的默认路由表,将 VPN 连接(设备tun0
)设置为所有发往“其他地方”的流量的默认路由。幸运的是,Linux 允许我们拥有多个路由表,并根据各种规则(也称为策略)选择哪个路由表将应用于哪些流量,因此称为“基于策略的路由”。
ip
现在,根据上面的上下文,让我们看看相关的具体命令:
ip rule add table 128 from 192.168.10.123
这将创建一个基于策略的路由规则,规定“来自”地址为 192.168.10.123 的任何流量都应根据路由表 128 而不是默认路由表进行路由。 [1]ip route add table 128 to 192.168.10.0/24 dev eth0
这会在表 128 中添加一条路由,将本地 192.168.10.* 子网中具有“目标”地址的所有流量定向到eth0
。ip route add table 128 default via 192.168.10.1
这会将表 128 中的默认路由设置为使用常规本地网关而不是 VPN 的网关。
现在,任何响应 上的连接eth0
(因此自动具有 的“发件人”地址192.168.10.123
)的流量将首先在表 128 中查找。表 128 表示,实际上,如果目的地位于 LAN 上,则直接通过 进行路由eth0
,否则通过普通非 VPN 网关进行路由192.168.10.1
。但是全面的源自该计算机的流量的默认设置是从中获取其“发件人”地址,tun0
因为这是默认路由表中的默认接口。所有的那流量与规则不匹配from 192.168.10.123
,因此表 128 不适用,它将进入“默认”表,该表表示通过 VPN 路由。
笔记:128 在这里没有什么特别的,您只是用任意选择的数字创建一个新的路由表。默认路由表的编号为 253,您可以将 1 到 252 之间的任何编号用于自定义表。
- 从技术上讲,它只是按照数字顺序根据每个表的策略规则检查数据包,并根据第一个匹配对它们进行路由,因此 128 在 252 之前被咨询,并且数据包被发送到自定义路由表并且与中的任何路由都不匹配。它将失败并根据后续规则进行检查,如果没有其他匹配,最终会找到通往默认路由表的路径,但由于表 128 中有一条默认路由,因此保证定向到该表的所有数据包都不会失败通过。
答案2
为了
ip rule add table 128 from 192.168.10.123
:操纵
ip rule
路由规则。它需要两个选择器和行动。所以在这种情况下选择器是from 192.168.10.123
(192.168.10.123 是前缀)和行动是table 128
。总的来说,它是在说:“为table 128
来自以下位置的流量添加路由规则:192.168.10.123
为了
ip route add table 128 to 192.168.10.0/24 dev eth0
:该
ip route
命令对路由表进行整体操作(在你的情况下,table 128
正在被操纵)。您正在add
制定一条规则:“所有注定要192.168.10.0/24
使用输出设备的流量eth0
”。为了
ip route add table 128 default via 192.168.10.1
和以前一样,该
ip route
命令正在操纵路线table 128
。但在这里,路线说:“路由所有流量(default
=IP0/0或者IPv6::/0)到 的下一跳路由器地址192.168.10.1
。(这很可能是您的专用网络的默认网关。)
我希望这种解释方式对您更有帮助,而不是让您感到困惑。