问题是,就像拨动开关一样,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 -ew
或ip monitor
核实您的机械交换机总是导致以太网接口出现载波丢失,即它需要eth0: <NO-CARRIER>
至少报告片刻。(我真的希望机械开关的构造使得这种情况始终会发生,否则它就是一种垃圾,当然你可以训练自己慢慢地切换它。)
但是由于你正在使用 NetworkManager,因此还有一个额外的5秒软延迟,直到运营商丢失后 NM 取消配置接口。(假设物理拔出/重新插入通常需要更长时间。)如果运营商立即返回,NM 会认为这只是一个小故障并保留旧配置。为避免这种情况,请将carrier-wait-timeout
NM 全局配置中的参数设置为零毫秒:
/etc/NetworkManager/conf.d/carrier.conf
[设备] 匹配设备 = 接口名称: en * 运营商等待超时=0
但说实话,如果这是一台台式机,那么就需要第二个以太网端口,并在软件中完成所有切换 - 关闭 eth0,打开 eth1。(您可能有一个备用的 PCI Express x1 插槽。)在这种设置中,甚至可以设置 ISP 1一些ISP 2 负责处理其他所有流量。
(或者,正如评论中所建议的,支持 VLAN 的以太网交换机(通常意义上的“带闪烁指示灯的供电以太网分离器”)将是一个不错的解决方案 - 您可以让您 PC 的单个以太网端口接收两个 ISP 作为标记的 VLAN,例如eth0.3
和eth0.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)