我需要做源路由在进行更复杂的设置之前,我想通过将通用路由(由网络设置神奇地创建的路由)切换为源路由路由来了解这是如何工作的。
目标是创建一个特定的路由表,并设置一个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
它应该有效。