我不久前在阅读论坛时发现了这些行,它们允许我在打开 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
Run Code Online (Sandbox Code Playgroud)
我知道这个问题有点老了,但我只是花了几个小时把它拼凑在一起,所以如果它能帮助其他人找到这里的路,我会尝试一个不太技术性的答案。
\n\n为了理解这些命令及其作用,您需要了解一些事情。
\n\n首先,如果您的计算机上运行着 VPN 客户端来捕获流量并通过 VPN 引导流量,那么您确实已经有了自定义路由规则。如果您连接到 VPN 服务,而不是您自己控制的 VPN 服务器,则远程服务通常会在您连接时通过 openvpn 将路由规则推送到您的计算机。您可以ip route show在连接 VPN 时通过发出命令来查看它们。其中包含的所有行tun0均指您的 VPN 连接。
这tun0是关键。从内核的角度来看,您的网卡(eth0或enp1s0其他任何东西)是一个网络接口,而 VPN 连接是第二个“虚拟”网络接口。如果您ip address在 VPN 启动时发出命令,您可以看到它们都定义了自己单独的 IP 地址。通过虚拟网络接口路由的任何流量都会tun0通过 VPN 发出,并且通过 VPN 路由的任何流量都会通过 VPN 发出。eth0接口路由的任何流量都会绕过 VPN 直接发出。
正如openvpn wiki中提到的,您的计算机上生成的流量将其“发件人”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 允许我们拥有多个路由表,并根据各种规则\xe2\x80\x94aka 策略\xe2\x80\x94 选择哪个路由表将应用于哪些流量,因此称为“基于策略的路由”。
现在我们来看看具体的ip现在,根据上面的上下文,
ip rule add table 128 from 192.168.10.123ip route add table 128 to 192.168.10.0/24 dev eth0eth0。ip route add table 128 default via 192.168.10.1现在,任何响应 上的连接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 之间的任何编号用于自定义表。
\n\n小智 5
为了ip rule add table 128 from 192.168.10.123:
操纵ip rule路由规则。它需要一个SELECTOR和一个ACTION。因此,在本例中,选择器是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。(这很可能是您的专用网络的默认网关。)
我希望这种解释方式对您更有帮助,而不是让您感到困惑。
| 归档时间: |
|
| 查看次数: |
4445 次 |
| 最近记录: |