clowwindy / ShadowVPN

Removed according to regulations.
1.47k stars 1.06k forks source link

与NetworkManager一起用有bug #118

Open linhua55 opened 9 years ago

linhua55 commented 9 years ago

Archlinux上用NetworkManager管理网络,开启Shadowvpn后。用NetworkManager切换无线网络时,CPU占用率急剧升高,切换网络不成功。 弹出如下错误

Connection activation failed
(1) Creating object for path '/org/freedesktop/NetworkManager/ActiveConnection/12' failed in libnm-glib.

Connection activation failed
(4) Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

用htop查看,一开始是NetworkManager对CPU占用率奇高,过一会变成Shadowvpn对CPU占用率奇高,此时用System Monitor查看,看到上传速度竟达到80MiB/s,而双核CPU的两条占用率曲线几乎关于60%直线上下对称。

平时可正常使用。

不知道是bug还是使用方法不对。

➜ ~ NetworkManager --version 1.0.2 shadowvpn 0.1.6-1 (Last Updated: 2015-01-26 03:31)

clowwindy commented 9 years ago

需要 arch 用户帮忙解决。

puxxustc commented 9 years ago

这与路由表有关,发生在网络切换时。具体原因如下:ShadowVPN 启动时,会添加一条路由表: ip route add $server via $gateway,以便发往服务器的 UDP 包从默认网关走,当网络切换时,因为原来的网络设备 down 了,之前添加的路由表会自动删除,这会导致发往服务器的 UDP 包也会走 VPN,形成死循环,吃满 CPU。

临时方案:

  1. 切换网络前关闭 ShadowVPN,或切换网络后重启 ShadowVPN。
  2. 假设服务器 IP 地址为 1.2.3.4,在 tools 文件夹下执行 echo 1.2.3.4 | python3 negate_network.py,得到

    0.0.0.0/8
    1.0.0.0/15
    1.2.0.0/23
    1.2.2.0/24
    1.2.3.0/30
    1.2.3.5/32
    1.2.3.6/31
    1.2.3.8/29
    1.2.3.16/28
    1.2.3.32/27
    1.2.3.64/26
    1.2.3.128/25
    1.2.4.0/22
    1.2.8.0/21
    1.2.16.0/20
    1.2.32.0/19
    1.2.64.0/18
    1.2.128.0/17
    1.3.0.0/16
    1.4.0.0/14
    1.8.0.0/13
    1.16.0.0/12
    1.32.0.0/11
    1.64.0.0/10
    1.128.0.0/9
    2.0.0.0/7
    4.0.0.0/6
    8.0.0.0/5
    16.0.0.0/4
    32.0.0.0/3
    64.0.0.0/2
    128.0.0.0/1

    修改启动脚本让这些网段走 VPN 就可以了