请原谅这里的长描述,但我认为在提出问题之前有必要解释一下设置:
我有 2 个 USB 以太网设备连接到我的机器 (debian),它们通过 avahi 使用 169.254.xx 地址进行自我配置。
连接到每个 USB 以太网设备的另一端的是 ssh 主机(host1
和host2
)
什么时候任何一个 host1
或者host2
通过其设备连接我可以 ssh 到 host1.local 或 host2.local 。
当两者都连接时,我只能连接到host1.local
OR host2.local
(我收到主机未知/无法访问和类似的消息)
如果我跑
ifconfig
我看到两个接口均已启动并且有 IP 地址
如果我跑
ip route show
我看到有两条匹配的路由设置如下
169.254.0.0/16 dev eth0 scope link src 169.254.3.232 metric 212
169.254.0.0/16 dev eth1 scope link src 169.254.79.120 metric 213
所以我思考这里发生的情况是,这些路由之一正在获取 Zeroconf 范围内的所有流量并将其发送到其中一台设备,这意味着当两个设备都插入时,只有一个设备响应,因为流量仅适合该设备末尾的主机设备。
为了测试这一点,我尝试删除正在工作的设备的路由,以允许其他路由接管并将流量发送到其他设备,但我尝试过的路由删除命令的所有变体似乎什么也没做,路由保持在地方。
eth0
相反,如果我运行此命令,则到(连接到)的路由host1
会与设备的所有其他设置(例如 ip,这是预期的)一起进行(被删除)。host1.local
停止回应并host2.local
开始回应在证明理论之前没有回应的地方。
ip addr flush dev eth0
所以我的解决方案是尝试删除这些自动创建的通用路由,这些路由胜过一切,并添加到设备的更具体的路由(我应该添加每个主机都有一个固定的IP)。
所以像
ip route add 169.254.102.0/24 dev eth0
ip route add 169.254.116.0/24 dev eth1
甚至
ip route add 169.254.102.23/32 dev eth0
ip route add 169.254.116.74/32 dev eth1
但这并不完全有效,ip addr flush
因为强制删除路由的方式过于严厉 - 路由进入,但接口由于被刷新而严重关闭。
所以我的问题是:
为什么
ip route del
NOT 的所有变体都可以删除不良路由?除了使用命令之外还有其他方法删除路由吗
ip
?
我还能如何解决这个问题:
桥接接口使它们像负载均衡器一样工作作为解决方案更有意义吗?
我是否完全错过了一些我应该尝试的其他事情,以便使路由更加具体(也许就 Zeroconf/avahi 如何设置这些连接而言)?
答案1
不建议更改这些路由的网络;它们也会被avahi再次刷新,最好的情况是回到后面的掩码,最坏的情况是路线/掩码乱七八糟。
另外,我建议停止沉迷于路由零配置/自动私有地址。它们是网络本地的,并且根据定义不可路由。
我建议按照书本进行操作,并使用私有 RFC 1918 IP 地址。