Arch 无法通过机械开关检测调制解调器切换

Arch 无法通过机械开关检测调制解调器切换

家里有两个互联网连接,我买了这个交换机来选择使用哪个网络: 在此处输入图片描述

问题是,就像拨动开关一样,Arch 不会注意到网络变化并挂起,直到我使用以下命令重置它:

nmcli con down 'Network 1'
nmcli con up 'Network 1'

我怎样才能让连接自动重置?

更新:

我买这个机械开关是因为我想要一个经济且低能耗的解决方案

我不是专家,但任何管理型交换机都是过度的解决方案。

我跑了ip监控命令然后拨动开关:

$ ip monitor
192.168.1.1 dev enp3s0 lladdr xx:xx:xx:xx:xx:xx STALE 
192.168.1.1 dev enp3s0 lladdr xx:xx:xx:xx:xx:xx PROBE 
192.168.1.1 dev enp3s0 FAILED 
xxxx::xxxx:xxxx:xxxx:xxxx dev enp3s0 lladdr xx:xx:xx:xx:xx:xx router PROBE 
192.168.1.1 dev enp3s0 FAILED 
xxxx::xxxx:xxxx:xxxx:xxxx dev enp3s0 router FAILED 
192.168.1.1 dev enp3s0 FAILED 
xxxx::xxxx:xxxx:xxxx:xxxx dev enp3s0 router FAILED 
192.168.1.1 dev enp3s0 FAILED 
xxxx::xxxx:xxxx:xxxx:xxxx dev enp3s0 router FAILED 
192.168.1.1 dev enp3s0 FAILED

更新 2:

为了清楚起见,我添加了我的家庭网络基础设施。 在此处输入图片描述

答案1

我怎样才能让连接自动重置?

首先,观看dmesg -ewip monitor核实您的机械交换机总是导致以太网接口出现载波丢失,即它需要eth0: <NO-CARRIER>至少报告片刻。(我真的希望机械开关的构造使得这种情况始终会发生,否则它就是一种垃圾,当然你可以训练自己慢慢地切换它。)

但是由于你正在使用 NetworkManager,因此还有一个额外的5秒软延迟,直到运营商丢失后 NM 取消配置接口。(假设物理拔出/重新插入通常需要更长时间。)如果运营商立即返回,NM 会认为这只是一个小故障并保留旧配置。为避免这种情况,请将carrier-wait-timeoutNM 全局配置中的参数设置为零毫秒:

/etc/NetworkManager/conf.d/carrier.conf
[设备] 匹配设备 = 接口名称: en * 运营商等待超时=0

但说实话,如果这是一台台式机,那么就需要第二个以太网端口,并在软件中完成所有切换 - 关闭 eth0,打开 eth1。(您可能有一个备用的 PCI Express x1 插槽。)在这种设置中,甚至可以设置 ISP 1一些ISP 2 负责处理其他所有流量。

(或者,正如评论中所建议的,支持 VLAN 的以太网交换机(通常意义上的“带闪烁指示灯的供电以太网分离器”)将是一个不错的解决方案 - 您可以让您 PC 的单个以太网端口接收两个 ISP 作为标记的 VLAN,例如eth0.3eth0.7,再次手动关闭一个并启动另一个,或者同时使用两者。)

答案2

我通过在后台运行这个 python 脚本来修复这个问题,该脚本每 20 秒检查一次连接。

如果检查失败,则会重置连接。

import os, time

def resetConn():
    os.system("nmcli con down 'Network 1'")
    os.system("nmcli con up 'Network 1'")
    
def testConn():
    l = ['192.168.2.1', '192.168.1.1'] # test ip my network
    c = 0
    for i in l:
        p = os.popen('ping -w 1 ' + i).read()
        if '0 received' in p:
            c +=1
    return len(l) == c
    
while True:
   if testConn():
        resetConn()
        print("Connection reset.\n")
   time.sleep(20)

相关内容