
Fyuneru 是我在过去几天用 Python (和 NodeJS )写的代理程序,其原理接近虚拟专用网络。
当前 Fyuneru 只能运行在 Linux 类操作系统上(由于 TUN 设备)。在 Ubuntu14.04 和 Fedora 21 上测试成功。
这个程序的可以在服务器和客户端上分别“安装”一块虚拟网卡(实际上是 Linux 的 TUN 设备)。两块网卡之间直接连接的“虚拟网线”,可以由一系列平行的隧道代理搭建。之后,服务器和客户端就好像位于同一个局域网了。
隧道代理可以由任何协议构建,只要它们能够代理 UDP 包( UDP 包用来封装从虚拟网卡获得的 IP 数据帧)。目前已经有了一个用 WebSocket 写的版本。未来还可能有借助即时通信协议( XMPP ),或者 HTTP 等等的版本。
程序的亮点在于:
此外, IP 数据帧在送进隧道代理之前用对称算法加密,保证机密性和完整性。隧道代理自己也有可能继续加密,那样就更安全了。
这个贴子就是借助于 Fyuneru 和 Tor 发出的。项目主页:
https://github.com/sogisha/fyuneru
欢迎试用~程序仍在调试中,如果有什么问题,我会在此回答。
1 sewyu 2015-08-25 10:18:51 +08:00 不明觉厉,谢谢楼主的贡献。 希望能发展壮大,以后有完整的教程 我也学习玩玩。 |
2 leopku 2015-08-25 10:34:36 +08:00 建议 github 上不要直接使用社交账号创建库 否则就是 HX 的结果 |
4 cnnblike 2015-08-25 11:18:03 +08:00 via Android 感谢楼主,你这里用的 websocket ,里面包了个 udp 包,包里面是 ip 帧?这层次好多啊效率如何,能说说吗? |
5 cnnblike 2015-08-25 11:20:17 +08:00 via Android 还有,算我吹毛求疵,你的 readme 里面第一句话的语法有点问题,修改一下会更好。 |
6 kurtrossel 2015-08-25 11:24:52 +08:00 炸天, mark 先 |
7 Lucups 2015-08-25 11:27:34 +08:00 ss 被删,希望有更多楼主这样的人出来 |
8 sogisha OP @cnnblike Readme 是赶出来的,我会继续修改。 我设计的重点是多路连接和穿墙的隐蔽和灵活性,效率,我想一方面多路连接有可能弥补一点效率,一方面是这个损失只要比墙带来的效率损失有优势就行。 IP 帧在加密时会增大 56 字节,其中 32 字节为 HMAC , 24 字节是加密的 IV 。之后密文通过 UDP 传递给隧道代理, UDP 只是隧道代理的接口协议,所以不能计算进来。至于隧道代理如何处理这个加密的包,就不一定了。比如可以直接换成 TCP 发出去,等等。 |
10 rainy3636 2015-08-25 12:08:06 +08:00 via Android 你登录 V2EX 的 ip 、注册的邮箱也需要匿名 |
11 wangdefu 2015-08-25 12:08:55 +08:00 via Android 怎么用 |
12 rainy3636 2015-08-25 12:09:36 +08:00 via Android 另外还有头像也要注意 |
13 XhstormR 2015-08-25 14:54:19 +08:00 via Android 竟然没进 chamber |
14 aliuwr 2015-08-25 15:28:56 +08:00 测试了下:通过在 server 端安装了 danted 来提供 socks5 代理服务,这个情况下比 ss 要慢许多,甚至无法打开网页。而 ss 可以看 1080P 。另外在测试中多次出现完全无法访问 server 端 tun IP 的情况。两边的终端里都没有任何报错, Ctrl+C 之后重新运行才恢复。 |
15 pi1ot 2015-08-25 15:34:25 +08:00 ss 即使被删了,也已经有了 10000 个 star 和 5000 个 fork ,所以没有什么可值得悲观的,时间在我们这边。 fyuneru 加油。 |
16 plqws 2015-08-25 15:36:39 +08:00 py 和 node 混用的产品,各取所长,挺有趣 |
17 moname 2015-08-25 15:38:24 +08:00 fyuneru 加油+1 |
18 ayang23 2015-08-25 15:57:15 +08:00 mark |
20 delavior 2015-08-25 15:59:13 +08:00 精神支持一下,期待早日更成熟 |
21 sogisha OP |
22 sogisha OP |
23 vzch 2015-08-25 16:24:47 +08:00 你要不提我都忘了罪恶王冠了,上述内容开 issue 讨论或者单写一份 MD 文档,这边帖子不移走也会沉得很快啦,谢谢 |
24 seki 2015-08-25 16:36:28 +08:00 看到最后才发现原来是中二皇冠 - - |
25 aliuwr 2015-08-25 16:48:43 +08:00 @sogisha 确认大部分时候是可以工作的,只是效率不高,通过 ping 值的起伏可以看出非常不稳定,经常出现极度糟糕的情况。我没法确定是代码问题,还是墙的问题。 重新测试了下,在 youtube 看视频,使用 ss 最高可以有 17000 Kbps ,而这个只有 600 Kbps 。 下面是 ping 的情况: 61 packets transmitted, 60 received, 1% packet loss, time 60085ms rtt min/avg/max/mdev = 36.600/37.932/40.210/0.699 ms 102 packets transmitted, 92 received, 9% packet loss, time 101258ms rtt min/avg/max/mdev = 40.696/4020.489/16639.397/5189.823 ms |
26 quix 2015-08-25 16:49:06 +08:00 多端口发送数据和楼主的想法不谋而合~ 支持一下 成熟以后 墙就要开始封 udp 了 |
27 aalska 2015-08-25 16:58:01 +08:00 事实上国内很多运营商是限速 udp 的 |
28 < href="/member/sogisha" class="dark">sogisha OP @aliuwr 非常感谢!其实我在墙外,所以在调试中并没有感受到连接问题。我 ping 的时候小 2 个数量级。 我认为一方面是墙的问题,一方面,目前用 WebSocket 或者所有的 TCP 连接传送 UDP 数据包(强调下实际上只是 UDP 数据包的内容,亦即加密的 IP 数据帧)是个很糟糕的主意。对于被代理的 TCP 连接,这就成了 TCP over TCP 。可以说只是用来验证可行性之用。 实话说,我不太理解为什么 SS 会更快。不过既然它很快,那么给我的程序写一个利用 SS 的代理的话是不是也会很快? XD --- @aalska @quix UDP 在本程序中只是作为一种内部的接口协议而存在。当然也可以真的在互联网上放出 UDP 包。但是 UDP 包在穿越各种防火墙时并不容易,程序也不好写。 @rwx 这个很难分析啊。我倾向于抱有希望。程序中用到 UDP 的地方,实际上是和中间的隧道代理解除了耦合,不需要等待具体哪个隧道代理完成对包的发送。因为传递的 IP 帧是可以被丢弃的,不像 TCP 协议。实际情况可能是,一个隧道代理被堵塞之后,程序接着往这里发包,包就不会被传送出去。在 TCP 看来包也许是 drop 了,所以会重发。重发时因为随机选择路线,就可能走另一条路线。 |
29 isbase PRO 想起前几天在 Twitter 看到一句话,大意是 ss 强悍之处不在协议本身而在于它的整个生态。 任重而道远。。。 |
30 l12ab 2015-08-25 17:33:01 +08:00 得知楼主在墙外,我放心了 |
33 TakanashiAzusa 2015-08-25 17:38:49 +08:00 没细看,不过虚拟网卡的话,那是不是意味着连接上就肯定是全局的呢。。 |
34 Dongdong36 2015-08-25 17:42:41 +08:00 先顶后看,看到可以在 Fedora 下运行好感动,前两天想试用下 Lantern...诶,都是泪 |
35 Dongdong36 2015-08-25 17:44:46 +08:00 好巧, 这是我收藏的第 100 个主题~ 2333 |
36 sogisha OP |
37 TakanashiAzusa 2015-08-25 17:50:24 +08:00 @sogisha 主要我看你的客户端也是虚拟了一张网卡。。就我的理解来说,用了虚拟网卡的话,全部流量都走这边了吧。。那不就是相当于 VPN 的全局模式吗。 |
38 sogisha OP @TakanashiAzusa 除了虚拟网卡之外,还有路由表是需要配置的,我的理解是类似电脑上有 2 张网卡,比如笔记本同时插网线还用 wifi ,那么怎么上网,走哪个,并不是自动的。类似的 Python 程序确实有使用 ip route 命令自动修改系统配置的例子,退出时改回来。我认为这个比较费解,不知道一来如何保证适合于所有的系统,二来不知道程序出错崩溃之后不改回来会有什么后果,所以先不做。不过,确实应该是有这个潜力的,比如可以先尝试手动配置。 |
39 liuxu 2015-08-25 23:17:25 +08:00 fork 一下 |
40 lszbao 2015-08-26 10:15:28 +08:00 好东西啊 必须 mark |
41 WenJimmy 2015-08-26 13:42:16 +08:00 感谢楼主,吸取 ss 教训,注意匿名与安全~我去 star 一个 |
42 pcqpcq 2015-08-26 14:13:15 +08:00 已 star ,注意安全,支持并 mark 一下 :) |