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 1
@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
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 2015-08-25 17:23:40 +08:00 via Android
想起前几天在 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 一下 :)
|