我有一个配置了服务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.43
并195.59.150.26
路由通过tun1
不过说实话,我发现 iptables 相当令人困惑。
这是正确的方法吗?如果是的话,有人可以给我一两个示例命令吗?
谢谢!
答案1
我知道路由表是一个“失败”表
并不真地。路由表按照从“最具体的路由”到“最不具体的路由”的顺序排列。您的默认路由是 via br0
,并且被定义为最后手段的路由,因为没有网络掩码(即genmask
是0.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.43
和195.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
或者您也可以从服务器端推送路由。