我目前正在处理一个 VPN,其连接端点位于子网内,前缀应通过该特定 VPN 进行隧道传输。
因此,基本上问题归结为与(更大的)一组目标地址(/16 掩码)匹配,除了一个完全包含的(小)特定目标子集,不应以这种方式路由(而是通过默认路由) .
如果问题是关于过滤的,在 Linux 中使用它可以使用ipset
类似的设置来实现
ipset create MyVPN hash:net
ipset add MyVPN $MYVPNNET/$MYVPNMASK
ipset add MyVPN $MYVPNENDPOINT nomatch
然而,这样的 ipsets 只能在 netfilter 中使用。
现在我的问题是,如何使用 Linux 高级 IP 路由设置等效的东西,即ip route
命令系列?
路线是根据最具体的优先方法计算的。因此,如果您的小子网需要默认路由,请将其放在首位,然后添加其他路由:
本例中的默认网关是 10.0.0.1 VPN 是 10.0.0.2
将通过默认网关将流量路由到子网 (10.0.1.0),通过 10.0.0.2 路由 VPN,并通过默认网关将其他默认流量路由。
事实证明,在 Linux 中可以使用ipset匹配来选择路由表。额外的成分是使用 netfilter 规则,该规则将匹配传出数据包并对其应用fwmark,然后可用于选择专用路由表。然后,此专用路由表将仅包含一条通过 VPN 的默认路由。
这是脚本形式的总体思路,如何设置。
要拆掉所有东西,只需反向执行脚本,删除东西;ipset可以使用单个命令进行编辑
destroy
。