V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Chingim
V2EX  ›  分享创造

VRouter: 一个虚拟路由器, 旨在实现 macOS / Windows 上的透明代理

  •  7
     
  •   Chingim · 2017-09-06 15:53:32 +08:00 · 23397 次点击
    这是一个创建于 2621 天前的主题,其中的信息可能已经有所发展或是发生改变。

    vrouter

    VRouter

    发布之初只有 macOS 版本: https://www.v2ex.com/t/371583#reply108 , 现在开始支持 Windows 了.

    原理很简单:

    VRouter 在后台运行一个 openwrt 的虚拟机, 通过更改系统的默认路由, 将所有系统数据包转发到虚拟机上. 依托 openwrt 的 iptables 进行数据包的处理. 最终达到透明代理的目的.

    为什么需要透明代理?

    使用各代理的桌面客户端可以很方便地进行非透明代理, 但是仍然有以下的不足

    • 每个需要代理的软件都要逐一设置
    • 命令行软件虽然可以用 export http_proxy 的方式使用代理, 但有时并不管用. 需要进一步折腾 Proxifier 或者 Privoxy
    • 有些软件并不支持设置代理, 如 macOS 系统自带的 Mail APP
    • 鲜有支持 UDP 的软件

    为什么不在路由器上设置透明代理?

    强烈推荐在路由器设置透明代理. 但是, 在路由器透明代理虽然解决了客户端的不足, 仍然有其局限性.

    • 如果路由器性能不足, 使用 kcptun 等软件时, 负载会非常高. 而且速度比在桌面端运行 kcptun 慢很多
    • 路由器只能在固定地点使用

    用虚拟机会不会有点杀鸡用牛刀?

    大材小用确实有点委屈了虚拟机. 幸运的是 openwrt 非常轻量, 官网提供的镜像不足 5 MB, 转化为 virtualbox 虚拟机磁盘文件, 并在虚拟机上安装必要的软件后, 磁盘空间占用不足 30 MB. 虚拟机在 macOS 上的内存占用在 150MB 以内, 在 Windows 上的内存占用仅仅 20 MB 左右. CPU 占用率则跟网络流量正相关, 没有流量的情况下, Windows 版本 CPU 占用率接近 0% ( 2010 年的 Thinkpad ), macOS 则是在 5% 以下 ( 2014 年的中端 13 寸 Macbook).

    缺点:

    • 严重依赖 VirtualBox
    • 无法像物理路由一样服务局域网内的其他设备
    • [ Windows ] 因为 Windows 非常不尊重路由表, 只能"软禁用"物理网卡, 因此宿主会变成 VRouter 下的设备, 网络邻居将无法找到宿主. "软禁用" 也导致 Edge 浏览器和 UWP 应用无法连接网络

    优点是:

    • 可以实现 TCP / UDP 的透明代理
    • 性能比物理路由强
    • 可以弥补物理路由不便移动的缺点
    • 切换方便
    • 可配置性强
    • 免费, 开源
    65 条回复    2020-02-08 13:18:56 +08:00
    vizards
        1
    vizards  
       2017-09-06 15:56:34 +08:00 via iPhone
    macOS 老用户前来资辞!
    Chingim
        2
    Chingim  
    OP
       2017-09-06 16:01:41 +08:00 via Android
    @vizards 谢谢,有人用那就最开心了
    ytzong
        3
    ytzong  
       2017-09-06 16:05:26 +08:00 via iPhone
    以前试着装过一次,内置引导流程里虚拟机下载是教育网的 IP,下载不成功就没继续试了,不知修复没有
    Chingim
        4
    Chingim  
    OP
       2017-09-06 16:12:42 +08:00
    @ytzong 是从教育网下的, 从清华的开源镜像下载的镜像 ( openwrt 官方国内连不上). 教育网下应该没问题吧? 我移动 /联通的宽带都可以下. 你的情况可能是虚拟机没能从上游路由获取 IP , 欢迎到 github 提交 issue
    mt7620
        5
    mt7620  
       2017-09-06 16:13:05 +08:00   ❤️ 1
    我是来泼冷水的,通过虚拟网卡方式来实现透明代理的 SStap 感觉更合理。哈哈
    jedrek
        6
    jedrek  
       2017-09-06 16:26:25 +08:00
    @mt7620 就是找不到这类 app 的 mac 版
    mt7620
        7
    mt7620  
       2017-09-06 16:28:18 +08:00
    @jedrek
    突然忘了这里是 i2ex...
    Cavolo
        8
    Cavolo  
       2017-09-06 16:28:46 +08:00 via iPhone
    感谢,简直就是 win 平台的救星
    hollegentoo
        9
    hollegentoo  
       2017-09-06 16:30:31 +08:00
    顶风作案啊!打岔边球也不行!怎么多人被抓没够?
    flyingfz
        10
    flyingfz  
       2017-09-06 16:48:34 +08:00
    Windows 上 有 Proxifier 。 但是要搭配 ss。
    Chingim
        11
    Chingim  
    OP
       2017-09-06 17:08:53 +08:00 via Android
    @mt7620 谢谢,我就知道一定会炸出更好的方案
    KentY
        12
    KentY  
       2017-09-06 17:11:35 +08:00
    我有这个需求, 跟翻墙无关.
    我常需要更换工作地点, 不同地方有各种代理, 我是用 tinyproxy + 自己写了个 tinyswitch 来解决的. 一直用了大概 6,7 年了. 目前还好用.

    系统里, 凡是需要代理的地方都写 localhost:port 就可以了.但是需要 tinyproxy.
    yexm0
        13
    yexm0  
       2017-09-06 17:21:40 +08:00
    @flyingfz Proxifier 不支持 udp,要上 sstap 才行
    UnisandK
        14
    UnisandK  
       2017-09-06 17:22:09 +08:00
    Windows 上 sstap 真的不错,就是可惜没有 Mac 版
    Love4Taylor
        15
    Love4Taylor  
       2017-09-06 17:33:17 +08:00
    默认的示例配置有问题吧 客户端非单端口多用户 Protocol Param 是不需要填写的
    viko16
        16
    viko16  
       2017-09-06 17:34:38 +08:00
    Windows 下如果用 Hyper-V 呢?
    Love4Taylor
        17
    Love4Taylor  
       2017-09-06 17:54:28 +08:00
    需要 禁用 实体网卡的 ipv4 和 v6 ummm 还是麻烦了点 自动化就好了 233333
    Thiece
        18
    Thiece  
       2017-09-06 18:13:52 +08:00
    @Chingim 其实我想说,有些路由器的性能还是不错的,比如小米路由器 HD 的 IPQ8064,有否移植计划呢?另外 windows 下不能桥接来解决吗?
    Kilerd
        19
    Kilerd  
       2017-09-06 18:53:26 +08:00 via iPhone
    相比上一个版本更新了啥?
    hu6360567
        20
    hu6360567  
       2017-09-06 19:09:53 +08:00 via iPhone
    我现在用 Mail 是可以走代理的啊
    TangMonk
        21
    TangMonk  
       2017-09-06 19:15:48 +08:00 via Android
    我用 network extension
    Pudge1337
        22
    Pudge1337  
       2017-09-06 19:29:10 +08:00 via Android
    这个有什么用?
    gdtv
        23
    gdtv  
       2017-09-06 19:34:57 +08:00
    弱弱问一下,windows 里怎么用,没看到 windows 的安装包
    Chingim
        24
    Chingim  
    OP
       2017-09-06 19:49:34 +08:00
    @gdtv release 里有 exe 文件的.

    @Kilerd macOS 开始支持转发 UDP
    @TangMonk network extension 那是极好的, 有什么成品推荐下吗?
    TangMonk
        25
    TangMonk  
       2017-09-06 19:51:32 +08:00
    @Chingim 我用的 Buff
    Yien
        26
    Yien  
       2017-09-06 19:58:13 +08:00
    感謝,測試一下。
    Chingim
        27
    Chingim  
    OP
       2017-09-06 20:22:23 +08:00
    @TangMonk 可惜 buff 不知为何不支持 Terminal
    TangMonk
        28
    TangMonk  
       2017-09-06 20:32:46 +08:00 via Android
    @Chingim 支持 terminal 干嘛呢? gui 挺好用的
    Chingim
        29
    Chingim  
    OP
       2017-09-06 20:48:24 +08:00
    @KentY 如果不是透明代理的话, 工具很多的.

    但是有的软件根本就没有设置代理的地方, 就算你设置了系统级的代理, 终端的一些软件都不一定会走. 还需要进一步折腾 proxier 等东西才行. 还是在路由器上设置代理最安逸.

    后来用了 kcptun, youtube 的效果非常好, 就放到路由器上跑, 虽然能跑起来, 但是速度跟桌面端差太多了, 而且占满了路由器的 cpu/内存, 不(mei)想(qian)买土豪的路由器, 就鼓捣虚拟机了.

    再加上我也是各地跑, 带着路由器终归不方便, 即使是很小的如 720N 之类巴掌大的路由.

    虚拟机用了半年觉得不错就封装一个 GUI 出来了. 上次在 Apple 节点分享, 炸出了很多优秀的方案, 但是从透明代理这一点上, 我觉得虚拟机还是有优势的. 虽然 network extension 更优雅, 但是楼上提到的 buff , 还不支持终端使用代理, 也还不支持 kcptun. 还有其他一些优秀的如 flora-kit 之类的 go 隧道, 我觉得配置太复杂了(主要是自己对 surge 规则不熟悉), 所以还是一直在用自己的方案.

    本来只是适配 macOS 的, 因为这个平台上使用终端的机会比较多, 透明代理的需求比较强. issue 里有人希望能做 windows 版本的, 借助跨平台的 electron 和 Virtualbox, 就适配了放出来. 但是我去看了 SSTap, 感觉它更自然一些, 应该会更好用.
    Chingim
        30
    Chingim  
    OP
       2017-09-06 20:48:57 +08:00
    @TangMonk 我的意思是很多 terminal 的软件也需要代理
    lxml
        31
    lxml  
       2017-09-06 21:24:15 +08:00
    我是在路由器上使用 cow,开个 http/https/sock 的端口,效果还不错,由于是接管所有通信,目前还没发现不长眼不走代理的软件。
    exoticknight
        32
    exoticknight  
       2017-09-06 21:27:47 +08:00
    虽然用不着,但是看着像是用 electron 写的,支持一个
    DesignerSkyline
        33
    DesignerSkyline  
       2017-09-06 21:41:16 +08:00 via Android
    严重支持!
    shiny
        34
    shiny  
       2017-09-06 21:45:04 +08:00
    这个思路好!
    Chingim
        35
    Chingim  
    OP
       2017-09-06 22:15:25 +08:00
    @lxml 是的, 路由器上开代理最安逸了. 就是不方便携带, 而且性能不强的的话跑 kcptun 之类的软件很勉强
    lxml
        36
    lxml  
       2017-09-06 22:17:24 +08:00
    @Chingim #35 撸羊毛搞的斐讯 K3,512M 内存,我丧心病狂在里面还跑了个 Docker。
    gdtv
        37
    gdtv  
       2017-09-07 09:54:19 +08:00 via Android
    安装了,启动了,没有提示任何错误,但就是上不了网,请问如何 debug ?
    Chingim
        38
    Chingim  
    OP
       2017-09-07 10:15:22 +08:00 via Android
    @gdtv 麻烦去 github 提交 issue 吧,这里不好追踪 bug。谢谢
    digimoon
        39
    digimoon  
       2017-09-07 10:17:44 +08:00
    win 的来个 hyperV 版吧,装了 hyperV 的应该用不了这个吧?
    torbrowserbridge
        40
    torbrowserbridge  
       2017-09-07 12:21:39 +08:00 via Android
    torbrowserbridge
        41
    torbrowserbridge  
       2017-09-07 12:22:10 +08:00 via Android
    @lxml k3 刷了啥系统
    torbrowserbridge
        42
    torbrowserbridge  
       2017-09-07 12:25:33 +08:00 via Android
    楼主你这个 openwrt 里面也有个 ss 客户端吧?那不是也要配合 server
    harchiko
        43
    harchiko  
       2017-09-07 15:13:04 +08:00
    非常酷!
    jinhan13789991
        44
    jinhan13789991  
       2017-09-07 15:50:10 +08:00
    额,搞过软路由的路过。现在用 300 块收的 K3
    jinhan13789991
        45
    jinhan13789991  
       2017-09-07 15:53:13 +08:00
    能否开多个代理呢?指定某些应用走指定代理。比如 qq 走国内,ps4 走香港,youtube 走美国。
    WendellSun
        46
    WendellSun  
       2017-09-07 18:52:57 +08:00 via Android
    支持。
    marknote
        47
    marknote  
       2017-09-07 20:59:00 +08:00
    看起来不错。不过我这边一直在 “ resoving host ”,感觉 DNS 配置有点问题。
    我用的 8.8.8.8:53 和 114.114.114.114:53 都试过了。
    连上 vrouter 虚拟机 ping 随便一个域名比如 Google 都出现"bad address" 错误
    Chingim
        48
    Chingim  
    OP
       2017-09-07 22:00:19 +08:00 via Android
    @marknote 非常感谢!能否到 github 提交 issue ?这里不适合找 bug
    Chingim
        49
    Chingim  
    OP
       2017-09-07 22:03:37 +08:00 via Android
    @exoticknight
    @shiny
    @harchiko
    @WendellSun 谢谢支持😀


    @torbrowserbridge sserver 是需要自己提供的
    @jinhan13789991 不可指定应用噢,只针对 ip
    marknote
        50
    marknote  
       2017-09-07 23:22:33 +08:00
    @Chingim 好的,已经提交
    https://github.com/icymind/VRouter/issues/40
    希望越做越好
    ZRS
        51
    ZRS  
       2017-09-08 01:47:44 +08:00
    支持
    marknote
        52
    marknote  
       2017-09-08 17:35:41 +08:00
    强烈歌颂一下 @Chingim
    vrouter 很好用!速度很快!
    marknote
        53
    marknote  
       2017-09-08 17:53:23 +08:00
    一个建议:openwrt 的 root 密码最好可以让用户输入 ...
    Chingim
        54
    Chingim  
    OP
       2017-09-09 00:26:38 +08:00
    @marknote 谢谢支持, 但是密码啥的不要紧吧, vrouter 只能从宿主上登录. 并不暴露在局域网
    loveminds
        55
    loveminds  
       2017-09-09 01:42:48 +08:00
    看起来不错,这个 OpenWRT 虚拟机是基于 LEDE 17.1 么,还是
    Chingim
        56
    Chingim  
    OP
       2017-09-09 09:52:47 +08:00
    @loveminds 目前是 openwrt, 不过为了新内核, 计划以后迁到 LEDE. 等清华镜像站上线 LEDE 之后吧, https://github.com/tuna/issues/issues/127
    loveminds
        57
    loveminds  
       2017-09-10 11:12:28 +08:00
    @Chingim 另外,Server2k16,双击安装包无反应
    loveminds
        58
    loveminds  
       2017-09-10 11:13:50 +08:00
    如果 LEDE 能在 Docker 上运行,或许可以考虑用 LXSS 替代 VirtualBox
    Chingim
        59
    Chingim  
    OP
       2017-09-10 20:33:01 +08:00
    @loveminds windows 要不试试 sstap ? 它更优雅
    jimmy
        60
    jimmy  
       2017-09-11 17:37:13 +08:00
    下载了竟然没使用成功,使用原始的版本也失败了。
    肯定是我的打开方式有问题,但还是不知道正确的姿势是什么样的。
    使用自己的服务器,开了 Kcptun,不用这个工具可以正常上网,使用了这个工具就全部失效了,甚至断网。
    Chingim
        61
    Chingim  
    OP
       2017-09-11 18:40:30 +08:00
    @jimmy github 提 issue 吧, 感谢
    param
        62
    param  
       2017-09-15 04:58:01 +08:00 via Android
    @mt7620 同意
    param
        63
    param  
       2017-09-15 05:02:56 +08:00 via Android
    用 TUN/TAP 虛擬網卡來實現更合適
    SampleNaive
        64
    SampleNaive  
       2019-07-21 05:14:55 +08:00
    别折腾了, 试试这个吧, https://win2socks.com
    UchihaJay
        65
    UchihaJay  
       2020-02-08 13:18:56 +08:00
    @SampleNaive 要钱的方案怎么能算
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2667 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:18 · PVG 14:18 · LAX 22:18 · JFK 01:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.