我有2个openvpn客户端连接到2个不同的服务器,在tun0和tun1设备上。
我需要为相同的主机IP添加2条静态路由,并将它们映射到2个不同的网关和tun设备。
我跑了这两个命令:
route add -host 69.30.217.90 gw 10.197.2.1 dev tun0 route add -host 69.30.217.90 gw 10.197.14.1 dev tun1
当我做一个CURL请求,并指定要使用的设备,只有第二条路线工作。 一旦我删除它(通过停止openvpn实例)第一条路线的作品。
有什么办法可以使两条路线都能正常工作,具体取决于我使用哪种设备提出请求?
编辑:
我应该补充一点,这是一个简单的例子。
我实际上需要同时向上5个openvpn隧道,路由的生命周期是〜1s,只能做一个curl请求。
我这样做的目的是为了testingVPN服务器是否正常工作,正常情况下客户端可以通过连接到服务器,通过隧道发出请求,并与预期的响应进行比较。
运行testing守护进程的单个实例工作得很好,但是完整的testing套件需要花费大约20秒,而testing100个服务器需要很长时间。 我可以同时运行多个,但是他们最终会走上彼此的路线。
我遇到了与oif匹配的麻烦。 我怀疑(但不是很确定)这是因为输出接口的决定是在最初决定使用哪个路由条目之后做出的。
但是您可以匹配输出IP地址并进行策略路由。
例如:
echo "100 TUN" >> /etc/iproute2/rt_tables ip route add 10.197.2.0/24 dev tun0 table TUN ip route add 69.30.217.90 via 10.197.2.1 dev tun0 table TUN ip rule add from 10.197.2.8 table TUN
echo为路由表#100(以下简称TUN)创build一个别名,所以它可以在iproute2命令中通过名称引用。
第一个路由命令将tun0的基本在线networking添加到表TUN。 这应该设置为与默认表中预先存在的路由相同的networking。
第二个路由命令将与tun0关联的特定主机和网关添加到表TUN。
最后,规则匹配源IP的数据包。 这里的值应该改成tun0的本地接口地址,否则整个不重叠的networking也会工作。 它引导匹配这个规则的数据包使用表TUN,然后根据我们先前添加到这个表的路由来路由。
你可能想试试oif匹配规则。 这从来没有为我工作,但ymmv:
ip rule add oif tun0 table TUN