VRouter: 一个虚拟路由器, 旨在实现 macOS / Windows 上的透明代理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Chingim
V2EX    分享创造

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

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

    vrouter

    VRouter

    发布之初只有 macOS 版本: 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  
    PRO
       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  
    PRO
       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  
    PRO
       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     Solana     5303 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:50 PVG 14:50 LAX 22:50 JFK 01:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86