![如何通过 IPSec 隧道路由流量?](https://linux22.com/image/740915/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20IPSec%20%E9%9A%A7%E9%81%93%E8%B7%AF%E7%94%B1%E6%B5%81%E9%87%8F%EF%BC%9F.png)
我有两个站点:MAIN(本地子网 192.168.0.0/24,外部 IP:MMMM)和 CLIENT(10.0.0.0/24,外部 IP:CCCC)。我在站点之间创建了 IPSec 隧道,两个站点都可以 ping 通两个子网中的计算机。到目前为止一切顺利。
# ipsec status
Security Associations (1 up, 0 connecting):
tunnel[1]: ESTABLISHED 7 minutes ago, 10.0.0.15[C.C.C.C]...M.M.M.M[M.M.M.M]
tunnel{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c7e6cd30_i ca170c58_o
tunnel{1}: 10.0.0.0/24 === 192.168.0.0/24
MAIN 的外部 IP 地址被互联网上的一些资源列入白名单(只能从 MAIN 的地址访问)。我想配置路由,以便 CLIENT 的站点通过该隧道和 MAIN 的网关访问这些资源。
我通常会尝试通过配置静态路由和 NAT 来实现这一点。这里的问题是,我没有可用于定义路由的接口。如果我在 MAIN 站点和 VPN 客户端以及 CLIENT 站点上有一个 VPN 服务器,那么 VPN 客户端就会有一些 tun 接口,我可以使用它们来配置我需要的内容。
我可以通过在两个站点之间建立 IPSec 隧道来实现相同的目的吗?
编辑
更多详细信息如下:
因此连接看起来是这样的:
192.168.0.0/24 --- 192.168.0.1/M.M.M.M --- C.C.C.C/10.0.0.1 --- 10.0.0.0/24
(Main subnet) (Main router) (Client router) (Client subnet)
192.168.0.1/M.M.M.M
- 无处不在的路由器
C.C.C.C/10.0.0.1
- 简单的路由器,一些端口转发到 10.0.0.15
10.0.0.15
- 客户端子网中的 Ubuntu 计算机通过 IPSec 隧道连接至 192.168.0.1
隧道已通。两个站点都可以 ping 通对方的网关和网络中的其他机器。
我现在想要实现的是将数据包路由到特定的外部 IP10.0.0.15
地址192.168.0.1
。
答案1
因此,考虑到拓扑结构,我会选择第一个选项,只需在客户端计算机中添加一条静态路由到 10.0.0.0/24。如果远程资源不在同一 IP 范围内,则需要为每个资源添加一条路由。
例如在 Windows 计算机上:资源 1(例如 10.11.12.13):
route add 10.11.12.13 mask 255.255.255.255 10.0.0.15 -p
资源 2(例如 24.25.26.27):
route add 24.25.26.27 mask 255.255.255.255 10.0.0.15 -p
然后在 10.0.0.15 中重复同样的事情,但这次的目标是 192.168.0.1。
看这里用于在 Linux(ubuntu)中添加持久路由。
我知道这种方法非常细致,不适合大规模网络,但对于小型家庭/办公室使用来说应该很好用。
作为替代方案,考虑一个专门的NAT 网关如果您想代理所有流量,效果会更好。不仅仅是将资源列入白名单。
据我所知,最后一个替代方案是在 192.168.0.0/24 中构建一个 OpenVPN 服务器(而不是 IPSec),默认情况下它将代理所有流量。 很棒的教程这里。
如果您有任何疑问请告诉我。
答案2
我发布了这篇有趣的帖子。我遇到了类似的问题。通常,ipsec 通过文件 ipsec.conf 和指令 leftsubnet=10.0.0.0/8 和 rightsubnet=192.168.0.0/16 管理主路由。因此,对于主路由来说很简单。不要忘记使用 sysctl 将 Linux 内核设置为路由器 (ipforward),并进行 SNAT 以决定是否应该这样做(用于服务和 wan 访问)其次,实际上,此主路由不会通过“ip route”命令出现,因为 ipsec 不会启动任何接口,如 eth0 或 enp1s0 等。但路由确实存在。使用此命令查看路由表:“ip route list table all”路由表 n° 220 将显示简单的“ip route”命令不会显示的 ipsec 路由
答案3
我绝不是网络专家,但这听起来像是企业希望通过代理控制托管远程客户端上的互联网用户流量的强制隧道方案。在一般方法中,您可以为客户端路由器上的所有互联网绑定流量添加静态/默认路由,以便通过隧道转发到主路由器,这意味着站点到站点 VPN 隧道。在您的点到站点 VPN 案例中,除了将特定路由添加到本地客户端路由表并以公共 IP 作为目的地,下一跳是主路由器的内部 IP 之外,我看不到其他方法。
答案4
因此,听起来剩下的就是进行源 NAT 转换,因为您可以控制您这边的网络接口,而不是对方的接口。但是,有一个新的扩展,我到现在才真正了解,称为 NETMAP,我认为它更适合您的需求:
以供参考: https://netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html#ss6.1是 SNAT https://netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-4.html#ss4.4- 是 NETMAP 扩展
109569是可以理解的。