如何在有线网络与无线网络之间无缝切换?

如何在有线网络与无线网络之间无缝切换?

我的笔记本电脑通常通过 wifi 连接(旧款 T61,配备 Intel WM3945ABG)。对于我的大部分工作来说,这已经足够了。有时,我想连接到我优质的 1GB 有线以太网。但如果我天真地这样做,nfs 挂载就会开始挂起。(如果我在更改之前卸载所有 nfs,一切都会好起来)。

例如,我的备份通过 anacron 启动。这涉及通过 nfs4 在我的服务器上安装备份驱动器。如果发生这种情况,最有可能的是,我使用的是 wifi。如果我现在插入以太网电缆,对备份驱动器的所有访问都会导致不间断的睡眠。由于备份需要相当长的时间(还记得 wifi 很慢吗?),我无法卸载并重新安装备份驱动器。

这涉及到阻止对话和 shell(也许它们在打开时会扫描所有挂载点,我不知道)。

我从内核 2.0.2 开始使用 Linux,说实话,这是 Linux 中唯一让我抓狂的问题,因为我无法解决它。

有没有办法透明地交换有线和无线网络?

哦,还有一些遗漏的事实:目前,我正在使用 WICD,但我之前尝试过 NetworkManager。我正在考虑采用仅 systemd 的方法...

% /sbin/iwconfig wlan0

wlan0     IEEE 802.11  ESSID:"the-grue"
      Mode:Managed  Frequency:2.422 GHz  Access Point: 64:70:02:A2:67:DE
      Bit Rate=54 Mb/s   Tx-Power=15 dBm
      Retry short limit:7   RTS thr:off   Fragment thr:off
      Power Management:off
      Link Quality=70/70  Signal level=-33 dBm
      Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
      Tx excessive retries:0  Invalid misc:476   Missed beacon:0

% mount | grep nfs
zem:/backup on /media/backup type nfs4
(rw,relatime,vers=4.1,rsize=65536,wsize=65536,namlen=255,soft,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.178.63,local_lock=none,addr=192.168.178.2)

两个网络都使用相同的 IP 等等...

如果您需要更多信息,请告诉我!

答案1

如果没有对方的帮助,无论是您的 WLAN 和 GB LAN 汇聚的地方(即您的家庭路由器),还是其他通信点所在的位置,您都无法做到这一点。

这实际上不是 Linux 的问题,而是因为网络协议就是这样的(由于历史原因):TCP 和 UDP 都不支持故障转移多宿主,即在一端具有不同 IP 地址的多个接口都可以等效使用。

也就是说,有几种方法可以实现这样的工作,但没有一种方法是容易的,我还没有尝试过亲自实现其中任何一个,而且要让它们工作,需要付出相当大的努力,如果它们真的能工作的话:

1)不要使用 TCP 和 UDP,而要使用允许故障转移多宿主的协议,例如连续传输协议。虽然 SCTP 本身在 Linux 内核中可用,但使用它的人并不多。因此,您必须找到一个可以满足您的要求并在两端支持 SCTP 的应用程序,祝您好运。或者您必须修改现有的应用程序(如 NFS 或您的备份)以支持 SCTP,再次祝您好运。

编辑:我发现有一个名为的包装器命令,withsctp它使包装的应用程序使用 SCTP 而不是 TCP。我使用ncsocat两对veth到网络命名空间的连接进行了测试,故障转移多宿主开箱即用:关闭发起连接的对不会中断传输,传输将转移到另一对。但看起来建立连接时两个网络接口都需要可见,因为可用地址是 SCTP 握手的一部分。

我没有测试,但这可能适用于您的备份程序,或 FUSE 远程文件系统(如 SSHFS),甚至内核文件系统(如 NFS)。

2) 您可以将多个接口绑定在一起,请参阅linux/Documentation/networking/bonding.txt内核源代码。这实际上只是为了绑定数据中心中的并行 LAN 连接。您需要在两端执行此操作,例如您的 PC 和路由器(这意味着您可能需要为路由器重新编译固件的 Linux 内核),并且您必须确保两个接口都相当静态(尤其是 WLAN)。如果您得到这份工作,我会对细节感兴趣。

3) 您可以尝试设置路由器,使其为您的 WLAN 和 LAN 接口提供完全相同的 IP 地址,并在看到 LAN 时立即禁用 WLAN 接口。这将需要对路由器内部进行大量调整,同样,如果您能完成这项工作,我会对细节感兴趣。

可能还有其他同样晦涩难懂的方法。编写一个脚本来卸载/重新安装 NFS,并在激活 LAN 接口之前检查您是否正在备份,这可能会更容易。

相关内容