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

2017-06-28 09:40:30 +08:00
 Chingim

VRouter

解决的需求


OS X 上没有 linux 的 iptables, 无法直接将流量转发给本地的端口. 所有应用想走代理, 必须要先进行设置, 问题在于:

所以为了实现透明代理, 通常有以下选择:

用 surge 最方便, 但是不便宜. 在路由器设置:

VRouter 是另一种透明代理的思路, 把路由器变成虚拟机, 接管系统流量, 它有以下特点:

缺点是:

一些截图


21780 次点击
所在节点    Apple
111 条回复
ivyliner
2017-06-28 13:36:06 +08:00
" OS X 上没有 linux 的 iptables, 无法直接将流量转发给本地的端口 " OS X 上面有类似 iptables 的 pf 比 iptables 简单
tony1016
2017-06-28 13:38:41 +08:00
@pubby
@Chingim
pf 这个我之前研究过啊,感觉此路不通啊

https://www.v2ex.com/t/250591
tyhunter
2017-06-28 13:40:01 +08:00
试用了下,希望 LZ 能在下一个版本加入 SSR 支持和 UDP 转发
Chingim
2017-06-28 13:50:09 +08:00
@ivyliner
@tony1016
按照我的理解, pf 没法把"从本地出去的数据包"转发到本地的某个端口的, 转发"进来的数据包"倒是可以. 这里 https://forums.freebsd.org/threads/49422/ 有个网友说的:
"PF can not redirect traffic that originates from the host itself because the routing decision for the traffic has been already made by the time it gets to the filter. It's a FreeBSD specific limitation that does not exist on OpenBSD's PF for example."

vrouter 没有用 pf, 就是单纯地把网关改为虚拟机的 hostonly 网卡地址, 改了之后数据就流向虚拟机了.

vrouter 还有个虚拟的 bridge 网卡, 该网络可以从上游路由器获取 IP, vrouter 的数据通过 bridge 网卡流向上游路由器.
firefox12
2017-06-28 14:03:59 +08:00
我装一个 virtual 里面装一个 ubunt 上面开启 iotables ss 不是一样的效果?
tony1016
2017-06-28 14:06:06 +08:00
@Chingim 参见我研究结论的第二条,可以绕道把发出去的数据包转到本地某个端口上

2.pf 的 rdr 只能对 incoming 做 redirect,所以,需要先 route-to,把对外网的请求,变成对内网的请求,再把它重定向到 redsocks。我以 twitter.com 为目标做了测试

rdr pass log on lo0 inet proto tcp from any to 104.244.0.0/16 -> 127.0.0.1 port 1080
pass out on en0 route-to lo0 inet proto tcp from en0 to 104.244.0.0/16
Chingim
2017-06-28 14:17:12 +08:00
@tony1016 没入门 pf, 帮你 at 高手解答: @pubby
Chingim
2017-06-28 14:18:09 +08:00
@firefox12 是的一样的, 什么发行版都可以. 设置好网络就行
pubby
2017-06-28 14:34:00 +08:00
@Chingim
@tony1016
抱歉,确实只能对入口流量做重定向。之前都是在做路由的机器上搞,没想到本机发出的流量 -_-
Artail
2017-06-28 14:41:51 +08:00
- -我接管流量失败了。然后把它关掉。它修改了的 DNS 却没还原回去。。。我排查了半天。。才发现。。- -
kikyous
2017-06-28 14:57:10 +08:00
@Artail #70 同样的问题
cielpy
2017-06-28 15:02:53 +08:00
建议添加运行日志,方便查找问题。

失败后没有恢复默认 DNS 我也遇到了
galenzhao
2017-06-28 15:03:48 +08:00
@wwqgtxx 可以啊,hv,vm 是可以的
xiubin
2017-06-28 15:19:18 +08:00
Surge 为什么可以让所有 APP 都走代理呢?
GPU
2017-06-28 15:20:35 +08:00
@yexm0 #44 好像还可以,但是界面不好看。
mmtromsb456
2017-06-28 15:23:23 +08:00
@Chingim 有两个问题问一下 dalao.第一个比如说像 surge 规则里面 geoip,cn,rediret 这样的中国 ip 即直连的规则.要怎么设置呢?国内就算网站不被墙..速度也很慢.不如都走代理.第二个是有支持 SSR 的计划吗
flicker317
2017-06-28 15:49:02 +08:00
@Chingim surge mac 没有用到 network extension. 在 mac 上如果要使用 network extension 必须走 mac app store 渠道
@xiubin surge mac 创建了一个 utun,并且路由表中配置了所有 240.0.0.0/8 网段走这个虚拟网卡,然后通过内部 dns 把所有查询结果映射到这个网段,然后通过内部 TCP/IP 协议栈处理网络连接。大概就这个样子
Chingim
2017-06-28 16:55:22 +08:00
@Artail
@kikyous
@cielpy 能麻烦去 github 提交 issue 吗? 谢谢
不清楚这个 bug 问题出在哪...
运行日志是很有必要, 后面会加上


@mmtromsb456 目前只能是, 把你需要走代理的 IP 添加到自定义黑名单, 然后代理模式选择"仅黑名单", 鉴于 ssr 受众很大, 后续应该会加上
tony1016
2017-06-28 17:09:06 +08:00
@pubby 可以的,看我的做法
ziyuan
2017-06-28 17:13:23 +08:00
这个和我自己在 mac 上装 ssr client 有啥区别?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX