路由配置通过 VPN 发送一些流量

路由配置通过 VPN 发送一些流量

我有一个配置了服务DD-WRT的路由器OpenVPN。我想通过 VPN 连接仅发送某些源 IP。

我相信我当前的路由表(如图所示 netstat -rn)通过接口 上的 VPN 发送所有流量tun1。据我了解,路由表是一个“失败”表,因此在这种情况下,因为第一个条目是0.0.0.0所有流量都将通过tun1接口。

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.182.1.5      128.0.0.0       UG        0 0          0 tun1
0.0.0.0         10.0.1.1        0.0.0.0         UG        0 0          0 br0
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0
10.182.1.1      10.182.1.5      255.255.255.255 UGH       0 0          0 tun1
10.182.1.5      0.0.0.0         255.255.255.255 UH        0 0          0 tun1
46.23.68.178    10.0.1.1        255.255.255.255 UGH       0 0          0 br0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
128.0.0.0       10.182.1.5      128.0.0.0       UG        0 0          0 tun1
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 br0

我的目标是仅通过网站路由 1 或 2 个网站 - 具体来说a1505.g2.akamai.net是根据NSLookup以下 IP 的映射

  • 地址:195.59.150.43
  • 地址:195.59.150.26

我相信所需要的是3个步骤。

1) 发出某种iptables命令来删除第一个路由条目 - 这样做会停止通过 VPN 发送流量tun1 2) 发出两个命令来告知目的地195.59.150.43195.59.150.26路由通过tun1

不过说实话,我发现 iptables 相当令人困惑。

这是正确的方法吗?如果是的话,有人可以给我一两个示例命令吗?

谢谢!

答案1

我知道路由表是一个“失败”表

并不真地。路由表按照从“最具体的路由”到“最不具体的路由”的顺序排列。您的默认路由是 via br0,并且被定义为最后手段的路由,因为没有网络掩码(即genmask0.0.0.0)。

因为第一个条目是 0.0.0.0,所以所有流量都将通过 tun1 接口

虽然这是正确的结论,但不幸的是这是错误的推理。这是您的路由表,直观地排序以表示用于路由的顺序(顶部是最佳匹配):

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.182.1.1      10.182.1.5      255.255.255.255 UGH       0 0          0 tun1
10.182.1.5      0.0.0.0         255.255.255.255 UH        0 0          0 tun1
46.23.68.178    10.0.1.1        255.255.255.255 UGH       0 0          0 br0

10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 br0

169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 br0

127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo

0.0.0.0         10.182.1.5      128.0.0.0       UG        0 0          0 tun1
128.0.0.0       10.182.1.5      128.0.0.0       UG        0 0          0 tun1

0.0.0.0         10.0.1.1        0.0.0.0         UG        0 0          0 br0

默认路由仍然是 via br0。但是,有两个更具体的路由(网络掩码为128.0.0.0),每个路由都将匹配一半的可用 IPv4 地址空间,因此它们将匹配所有非本地流量。


我的目标是仅通过网站路由 1 或 2 个网站 - 特别是 a1505.g2.akamai.net,根据nslookup映射到以下 IP:195.59.150.43195.59.150.26

我不确定你所说的“网站”是什么意思;我假设tun1你想阻止所有的交通流向那条路。

route-gateway def1要使用 OpenVPN 执行此操作,您只需从其配置文件中删除该指令即可。 (如果您使用的是 NetworkManager 之类的东西,那么应该有一个选项需要取消选中,该选项将连接标记为默认路由。)

完成此操作后,您需要做的就是通过网关添加两条路由,每个主机一条路由tun1

route add -host 195.59.150.43 gw 10.182.1.5
route add -host 195.59.150.26 gw 10.182.1.5

这些是主机路由,因此网络掩码是隐式的/32(即255.255.255.255),因此它们优先于所有内容,并且在我的视觉排序表中,这三个条目将位于列表顶部。

实际上,您也应该能够在 OpenVPN 配置文件中执行此操作。这将允许 VPN 本身自动启动和删除路由。根据您的设置,配置要么位于服务器中,路由将被“推送”到客户端,要么作为客户端 OpenVPN 配置文件中的指令:

route 195.59.150.43
route 195.59.150.26

答案2

我认为你可以使用route命令而不是iptables

route 111.112.113.114 gw 10.182.1.5

openvpn或者您也可以从服务器端推送路由。

相关内容