在 Ubuntu 12.04 上 - 实际上是 Kubuntu,但我使用的是 NetworkManager,所以配置应该是相同的 - 我配置了一些 VPN 连接。
现在,如果我有一个长时间运行的上传或下载,如何确保在 VPN 连接中断时立即无条件停止所有网络流量?
我正在寻找的是某种获得更改通知的方法(我不想轮询!)。其余的(例如插入netfilter规则)我可以自己处理。我只需要了解如何收到有关已建立连接发生更改的通知。
如果重要的话,我使用的配置是基于tun0
.如果需要其他详细信息,请在评论中告诉我,我会将它们添加到问题中。
到目前为止我已经尝试过:
- 将主 LAN 连接(这是在虚拟机内部,因此只有 LAN 连接)配置为手动
- 将 VPN 配置为自动
然后我想这不是我想要采取的路线,因为我想启动我的脚本/程序以仅在激活 VPN 时收到通知。我并不是一直在VPN上运行,但大部分时间都是这样。
因此,基本上,我需要在建立特定 VPN 连接后立即注册一些通知,然后在发生问题时收到通知,以便自动断开主连接作为响应。
答案1
NetworkManager 应该能够为您做到这一点。从手册页:
有关网络的信息通过 D-Bus 接口导出到任何感兴趣的应用程序,提供丰富的 API,用于检查和控制网络设置和操作。
NetworkManager 将按字母顺序执行 /etc/NetworkManager/dispatcher.d 目录中的脚本以响应网络事件。
...
每个脚本接收两个参数,第一个是刚刚激活的设备的接口名称,第二个是操作。
行动:
...
vpn-up:VPN 连接已激活。环境在变量 CONNECTION_UUID 中包含连接 UUID。
vpn-down:VPN 连接已停用。
所以看起来你有两条路线:绑定到 D-Bus 来监听事件并对其采取行动,或者将一些脚本放入/etc/NetworkManager/dispatcher.d/
.后者似乎是阻力最小的途径。