如何将通用路由切换为源路由?

如何将通用路由切换为源路由?

我需要做源路由在进行更复杂的设置之前,我想通过将通用路由(由网络设置神奇地创建的路由)切换为源路由路由来了解这是如何工作的。

目标是创建一个特定的路由表,并设置一个ip rule通过此路由表路由来自我的 IP 的流量(据我所知,这就是该default表发生的情况)。这是在 Debian 8 上,有一个接口分配了 IP 192.168.1.107

问题是这种克隆不起作用。

我首先创建了一个新条目/etc/iproute2/rt_tables

200 NORMAL

然后我转储了当前的路由表 - 用于工作网络

root@debian-testing:~# ip route show table all
default via 192.168.1.1 dev eth0
169.254.0.0/16 dev eth0  scope link  metric 1000
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.107
broadcast 127.0.0.0 dev lo  table local  proto kernel  scope link  src 127.0.0.1
local 127.0.0.0/8 dev lo  table local  proto kernel  scope host  src 127.0.0.1
local 127.0.0.1 dev lo  table local  proto kernel  scope host  src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  proto kernel  scope link  src 127.0.0.1
broadcast 192.168.1.0 dev eth0  table local  proto kernel  scope link  src 192.168.1.107
local 192.168.1.107 dev eth0  table local  proto kernel  scope host  src 192.168.1.107
broadcast 192.168.1.255 dev eth0  table local  proto kernel  scope link  src 192.168.1.107

我将与真实接口(192.168.1.107)相关的条目移至表中(下面是稍后将解析的NORMAL文件内容)t.txt

root@debian-testing:~# cat t.txt
local 127.0.0.0/8 dev lo  table local src 127.0.0.1
local 127.0.0.1 dev lo  table local  src 127.0.0.1
local 192.168.1.107 dev eth0  table NORMAL src 192.168.1.107
192.168.1.0/24 dev eth0 src 192.168.1.107 table NORMAL
broadcast 127.0.0.0 dev lo  table local src 127.0.0.1
broadcast 127.255.255.255 dev lo  table local  src 127.0.0.1
broadcast 192.168.1.0 dev eth0  table NORMAL src 192.168.1.107
broadcast 192.168.1.255 dev eth0  table NORMAL src 192.168.1.107
default via 192.168.1.1 dev eth0 table NORMAL

然后,我刷新所有现有的路由条目,加载上面的条目并通知系统来自的数据包192.168.1.107应该使用该表NORMAL

root@debian-testing:~# ip route flush table all ; while read name; do echo "adding ${name}";ip route add ${name}; done < t.txt ; ip rule add from 192.168.0.107 table NORMAL
adding local 127.0.0.0/8 dev lo  table local src 127.0.0.1
RTNETLINK answers: Invalid argument
adding local 127.0.0.1 dev lo  table local  src 127.0.0.1
adding local 192.168.1.107 dev eth0  table NORMAL src 192.168.1.107
adding 192.168.1.0/24 dev eth0 src 192.168.1.107 table NORMAL
adding broadcast 127.0.0.0 dev lo  table local src 127.0.0.1
adding broadcast 127.255.255.255 dev lo  table local  src 127.0.0.1
adding broadcast 192.168.1.0 dev eth0  table NORMAL src 192.168.1.107
adding broadcast 192.168.1.255 dev eth0  table NORMAL src 192.168.1.107
adding default via 192.168.1.1 dev eth0 table NORMAL

不幸的是,现在我既无法访问本地 IP,也无法访问外部主机,即使路由表已重新填充。唯一能通过的 ping 操作是127.0.0.1

root@debian-testing:~# ping 8.8.8.8
connect: Network is unreachable
root@debian-testing:~# ping 192.168.1.107
connect: Network is unreachable
root@debian-testing:~# ip route
root@debian-testing:~# ip route show table all
default via 192.168.1.1 dev eth0  table NORMAL 
broadcast 192.168.1.0 dev eth0  table NORMAL  scope link  src 192.168.1.107 
192.168.1.0/24 dev eth0  table NORMAL  scope link  src 192.168.1.107 
local 192.168.1.107 dev eth0  table NORMAL  scope host  src 192.168.1.107 
broadcast 192.168.1.255 dev eth0  table NORMAL  scope link  src 192.168.1.107 
broadcast 127.0.0.0 dev lo  table local  scope link  src 127.0.0.1 
local 127.0.0.1 dev lo  table local  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  table local  scope link  src 127.0.0.1 

我应该在哪里寻找解决这个问题的方法?我的方法完全正确吗?

答案1

这一切似乎都是正确的,除非您没有指定用于通信的接口。尝试

ping -I 192.168.1.107 -c1 8.8.8.8

它应该有效。

相关内容