用Dog-Tunnel实现网络加速,以及端口映射

     0评论

在前文《什么是锐速、BBR,哪个好用,还有什么其它的加速方案?》中,我提到了基于KCP的网络隧道工具dog-tunnel,本文介绍如何使用它实现网络加速,以及端口映射。

介绍

dog-tunnel,俗称狗洞,是一个p2p的打洞软件,可以在两个网络之间快速建立高速网络通道。有以下几个常见用途:

  • socks5代理,本地通过VPS上网(测速对比见后文)
  • 端口映射,将VPS的local port映射到本地(例如开发调试,可仅限本地访问)
  • 反向端口映射,即将本地的local port映射到VPS(内网穿透,例如将自己计算机上的站点透过VPS的IP地址临时开放让他人访问)
  • 透明代理(用于网关设备上,实现全局流量走VPS)

此项目有p2pudpVersion(lite)两个分支,作者说以后主要维护lite版本,所以后文都以lite版举例,p2p的特性看看就好,暂时用不到了。

特性

  • 原生支持远端socks5代理
  • 支持多洞模式,多连接时动态切换狗洞提高访问速度
  • 远端掉线自动重连

p2p相关的特性:

  • 数据安全,p2p模式通讯时数据不经过服务端,用户可自定义访问密码
  • p2p模式底层采用KCP协议,在恶劣网络环境下比tcp延迟降低 30%-40%
  • p2p模式支持AES加密
  • p2p模式可以穿透80%的网络
  • p2p模式失败时自动切换到c/s模式

下载安装

当前最新版本是Lite 1.41,只有一个文件,文件可同时在客户端和服务端执行。

例如在Linux安装:

# 下载 wget https://github.com/vzex/dog-tunnel/releases/download/lite_v1.41/dtunnel_linux_x64_1.41_lite.tgz # 解压,得到dtunnel_lite文件 tar xvzf dtunnel_linux_x64_1.41_lite.tgz

新手入门

摘自官方说明,写完了本文才看到,很有用,所以放到这里供参考。

dtunnel_lite 分为近端和远端
dtunnel_lite 最基本的三个参数 -service / -local / -action
其中-service是两端必须指定的,指向地址(ip:port)需要一致,远端监听,近端连接,远端可选择省略ip(例如-action :8008), 省略ip时会监听系统所有网卡上的指定端口,但是连接端必须指定对应ip连接。

如何区分远端近端?
带-local参数的即为近端,不带即为远端(服务端)。
-local 代表近端连接远端成功后,本地需要监听什么端口,比如做端口映射,-local :8888代表本地监听8888端口,你连接本地的8888端口即连接到了被映射的远端端口了。
-action 是代表近端连接远端后-local端口具体的行为,这个行为可以是 端口映射(tcp或者udp),socks5代理(或者socks5_smart模式), route(route_smart)模式,该参数一般由近端指定,远端指定的话,会强制近端使用远端的策略,这个参数的默认值客户端为socks5,服务端为空。

其他参数请根据需要添加。

命令参数

后面会演示如何使用,在此之前先熟悉一下命令行工具支持的参数,尤其是理解action参数十分重要。

-action 指明通道行为,接受三种值: 1. 默认socks5(socks5代理服务); 2. 指定参数route将开启透明代理模式(windows版本不支持该模式) 该模式下请自行设置用户的DNS和网关,将需要的tcp连接通过iptables转发到-local端口即可 3. 指定ip:port,将启用端口转发,配合-r参数是逆向端口转发; 客户端可指定该参数,当服务端指定参数时会强制采用服务端策略; 服务端设置为空字符串时,可接收客户端的任意action请求 -auth 用于简单的登录验证,两端不一致时客户端会被断开 -debug 调试输出 -dnscache 当socks5模式时有效,指定dns缓存时间,默认0,单位分钟 -encrypt 客户端指定,表示该通道是否启用消息加密 -local 通道连通时本地监听端口,格式ip:port -pipe 通道个数,默认1,最大10 -r 反向模式,true时客户端触发action行为,服务端监听local指定的端口 -service 通道服务端地址,客户端指定时为连接地址,服务端指定时为监听地址,用于通道打通,双方地址一致,一般为服务端ip:port -tcp tcp模式,默认false,使用udp模式在网络差的环境下效率更高,cpu占用也更高(待优化),两端需一致 -timeout 客户端执行连接超时时间,tcp模式关闭模式时有效 -v 更多输出信息 -version 版本信息 -xor 两端需一致,用于udp模式握手加密,内容为任意字符串 -session_timeout 指定连接会话在不活跃状态时多久(秒)后被销毁,防止被动连接的情况下产生僵尸socket,默认0不自动销毁

应用场景举例

演示环境:本地Windows10,远程VPS是Ubuntu 18.04。VPS的IP是1.2.3.4

开启服务端

后面客户端的多种配置应用都依赖于这一步,我们不限制服务端可接受的action,即将其设为"",为增强安全,同时使用authxor参数。

dtunnel_lite -service 0.0.0.0:3389 -v -action "" -xor handshake_token -auth your_password

命令解释:

在VPS上运行,让狗洞监听本地3389的udp服务端口,action为空表示客户端连接时不限制action行为,如果服务端想限制客户端行为,可强制设置action内容,例如socksrouter

xor为用于握手加密的令牌,可选
auth为登陆验证的密码,可选

开启客户端

上面我们配置服务端可接收客户端的多种action,下面分别演示客户端的几种典型配置,以及可以实现的功能。

1. socks5代理

我们在本地的1080端口开启socks5代理(类似ssh -D,不用ss等工具了),之后就可以通过这个通道上网了,可以在浏览器等应用中设置。

dtunnel_lite -service 1.2.3.4:3389 -v -action socks5 -encrypt -xor handshake_token -auth your_password -local :1080 -pipe 5 -session_timeout 30

参数解释:

# 客户端连接服务器3389的udp端口 -service 1.2.3.4:3389 # 监听本地的1080端口作为socks5服务 -action socks5 -local :1080 # 传输内容加密 -encrypt # 握手令牌 -xor handshake_token # 建立5条固定通道(防止大数据传输或者网络不好时单条通道拥堵) -pipe 5 # web请求中不可避免的会有一些非正常关闭的tcp连接,加session_timeout可以清除这些无用连接,防止描述符泄露。 -session_timeout 30 # 显示详情 -v

效果对比:

用dog-tunnel之前直连VPS上的html-speedtest,测速数据比较差劲
用dog-tunnel之前直连VPS上的html-speedtest,测速数据比较差劲

用dog-tunnel后,访问VPS上的html-speedtest,测速数据明显改善
用dog-tunnel后,访问VPS上的html-speedtest,测速数据明显改善

2. 开启透明代理

透明代理一般应用于路由器等网关设备上,狗洞的windows版本不支持该模式

dtunnel_lite -service 1.2.3.4:3389 -v -action route -encrypt -xor handshake_token -auth your_password -local :1080 -pipe 5

参数同上,不过action设置route。实际在Linux客户端(例如路由器)使用时,可设置iptables将所有需要转发的tcp连接转发至1080端口,从而实现透明代理。

3. 端口映射

dtunnel_lite -service 1.2.3.4:3389 -v -action 127.0.0.1:2333 -encrypt -xor handshake_token -auth your_password -local :8787 -pipe 5

参数解释:端口映射或者后面的反向映射,action都是一个地址:端口字符串,地址是从VPS的视角看待的,所以可以是127.0.0.1:2333,也可以是1.2.3.4:2333,即远程VPS的IP。

执行后,服务端2333端口将被映射至本地8787端口。
例如VPS上在2333端口开了html5speed,此时我们在Windows访问127.0.0.1:8787即可访问,这时的速度也是很赞的。

4. 反向映射

dtunnel_lite -service 1.2.3.4:3389 -v -action 127.0.0.1:80 -r -encrypt -xor handshake_token -auth your_password -local :8080 -pipe 5

执行后,本地的8080端口,被映射到VPS的80端口。
例如此处我在Windows的8080端口上开启了IIS的默认页面,因为反向映射,实际可以通过1.2.3.4:80端口访问到这个页面;这跟内网穿透实现的功能是一样的。

参考资料

-- EOF --

本文最后修改于5年前 (2019-06-08)

差评不太行一般挺好非常不错 (No Ratings Yet)
读取中...
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址