一.介绍

软件在KCP出现后进行了重构,将其底层UDP支持替换为了KCP,使其效率大大提高,在某些恶劣的网络环境下依旧能有不错的效果。当然,它也是支持TCP模式的,另外它也是支持加密的,在P2P打洞失败的情况下也能够自动切换为C/S模式来使用服务器中转。需要了解的是,软件也提供了Lite版本,仅支持P2P模式,数据完全不通过任何第三方服务器中转,保证了安全性,当然,这就要求了打洞的双方至少有一方拥有公网IP。

和N2N类似的是,它也支持多个服务器,能够在多连接的情况下自动切换负载均衡以便提高速度。还有一个特殊之处,是其原生支持socks5代理,可以在公司网络等特殊网络环境下实现特定需求。

二.配置

先介绍常规版本
 
dtunnel_s 启动时会监听一个tcp端口,通过-addr设置,如果需要-ssl(默认是false),那么要指定-cert加载ssl证书,之后客户端连接也要打开-ssl开关(默认是true的) -addrudp 是p2p打洞的辅助udp端口,能提高打洞成功率,对应dtunnel参数-buster指定同样的ip和端口
 
dtunnel_s -addr 0.0.0.0:8000 -addrudp 0.0.0.0:8018 -admin 127.0.0.1:1234 -https -ssl -cert /path/to/https.crt -key /path/to/https.key -dbhost 1.2.3.4:3306 -dbpass mysqlpass -dbuser mysqluser -replace

 
#参数说明
-addr:TCP端口地址
-addrudp:UDP端口地址,用于P2P辅助打洞
-admin:管理接口,用于提供API方便管理
-https:启用管理接口的HTTPS支持,需要指定-cert和-cert参数,默认关闭
-ssl:启用ssl支持,启用需要指定-cert和-cert参数,默认关闭
-cert:证书路径
-key:证书密钥路径
-dbhost:数据库服务器
-dbpass:数据库密码
-dbuser:数据库用户
-replace:如果客户端注册名冲突,踢掉之前的,默认关闭
-version:显示版本
 
如果要鉴权(即如下方客户端那样有啥reg啊,link啊,然后还能限制同一IP使用数量),请配置数据库(配置数据库后客户端必须要指定key参数才能连上,这玩意是数据库里的AuthKey字段),数据库的初始化sql

另外操作要么自己往里面填数据,要么用admin的API

dtunnel_s 支持远程接口管理,如果需要,可通过-admin 指定ip:端口,比如-admin 127.0.0.1:1234

支持的命令列表

http://127.0.0.1:1234/admin?cmd=servers 列出所有reg的用户
http://127.0.0.1:1234/admin?cmd=sessions&server=a 列出所有link到a的会话
http://127.0.0.1:1234/admin?admin?cmd=kicksession&server=a&session=1 踢掉会话号为1的客户端(link端)
http://127.0.0.1:1234/admin?cmd=kickserver&server=a 踢掉reg a的客户端
http://127.0.0.1:1234/admin?cmd=broadcast&type=s&msg=test&quit=true 广播消息,type(s:reg端,c:link端,a:所有客户端),msg消息内容,quit(缺省参数,非空则广播后客户端被踢掉)

http://127.0.0.1:1234/admin?cmd=usersetting (用户管理相关api,需要连接mysql)
配置mysql需要用到auth/auth.sql 建表语句,建表前请先创建数据库dogtunnel
连接mysql需要在启动参数中添加 -dbhost -dbuser -dbpass 参数,加了mysql之后就必须通过-key才能登录服务器
mysql的使用方法请自行学习
usersetting下面有多个子命令(直接拼在上面主api后面)
&action=list&limita=0&limitb=10,分页列出用户信息
&action=limit&user=aaa&size=10000 限制用户aaa的c/s模式流量上线为10k(每日)
&action=add&user=aaa&passwd=1111&type=admin 添加用户aaa,密码1111,类型type(admin管理员(最高权限),black黑名单,super高级用户,type不传默认普通用户),返回的key用户dtunnel 的-key参数
&action=get&user=aaa 返回aaa的用户信息
&action=del&user=aaa 删除aaa
&action=key&user=aaa 返回aaa的新key
&action=set&user=aaa&type=super&serven=10&sessionn=100&pipen=10&sameip=10,对aaa的账号做功能限制,type指定的类型有默认的几套配置,也可以通过指定servern(可以注册的名字数上限),sessionn(每个注册的服务器可以连接的会话数上限),pipen(每个会话最多支持几条p2p管道),sameip(同ip可注册服务数上限)来单独指定配置
 
 
至于客户端
远端: dtunnel -addip 127.0.0.1 -buster 1.2.3.4:8018 -remote 1.2.3.4::8000 -clientkey testkey -compress -delay 2 -dnscache 20 -encrypt -kcp k2:v2 -reg test -local :80 -mode 0 -ssl
 
近端: dtunnel -addip 127.0.0.1 -buster 1.2.3.4:8018 -remote 1.2.3.4::8000 -clientkey testkey -compress -delay 2 -dnscache 20 -encrypt -kcp k2:v2 -link test -local :8888 -mode 0 -ssl
 
#参数说明
-addip:出口IP(单个或列表)
-buster:打洞服务器,用于P2P模式
-remote:远程服务器,用于C/S模式
-clientkey:客户端Key,用于远端和近端认证,需一致
-compress:压缩数据,远端和近端需一致
-debug:调试模式
-delay:打洞失败后重试延迟,秒
-dnscache:DNS缓存有效期,如果大于0将定时清空DNS缓存,分钟
-encrypt:P2P模式加密
-f:从文件中加载配置
-kcp:kcp配置,远端和近端需一致
-key:访问Key(服务端数据库中的AuthKey)
-reg:注册名,远端使用
-link:连接的注册名,近端使用,用于识别连接远端
-local:本地监听端口,填socks5则为socks5代理服务
-mode:连接模式(0:P2P打洞失败后切换为C/S 1:只使用P2P 2:只使用C/S)
-pipen:管道数
-ds:数据纠错??仅在P2P模式有效,远端和近端需一致
-ps:奇偶校验??仅在P2P模式有效,远端和近端需一致
-ssl:启用ssl支持,默认启用,服务端没有启用的话请使用-ssl=false来关闭
-v:输出详细日志
-version:显示版本

内网穿透系列-Go语言的更多相关文章

  1. p2p-tunnel 打洞内网穿透系列(三)TCP转发访问内网web服务

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

  2. p2p-tunnel 打洞内网穿透系列(二)TCP转发访问内网共享文件夹

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

  3. p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞

    系列文章 p2p-tunnel 打洞内网穿透系列(一)客户端配置及打洞 p2p-tunnel 打洞内网穿透系列(二)TCP转发访问远程共享文件夹 p2p-tunnel 打洞内网穿透系列(三)TCP转发 ...

  4. frp + nginx 配置多人共用的http 内网穿透服务

    来源:简书   https://www.jianshu.com/p/c9d7527d607b 一. 前言 frp 是一个用Go语言开发的,可用于内网穿透的高性能的反向代理应用,支持 tcp, udp ...

  5. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

  6. SSH 端口转发+内网穿透

    用最直白的语言对本文所有内容进行定义: 端口转发(-L):用A机器(内网)登录B机器(公网), 在A机器打开端口,将收到的所有请求转发到B机器的某个端口 (在代理机上执行) 内网穿透(-R):用A机器 ...

  7. 一款带Web面板的轻量级、高性能内网穿透工具:nps使用教程

    说明:内网穿透工具之前已经介绍了不少了,比如Frp.lanproxy.Holer等,现在再介绍个带Web面板的穿透工具nps,之前叫easyProxy,只是改名了而已,该工具是一款使用go语言编写的轻 ...

  8. 如何使用 frp 实现内网穿透

    这有一个专注Gopher技术成长的开源项目「go home」 背景 作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了. ...

  9. 手写内网穿透服务端客户端(NAT穿透)原理及实现

    Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...

随机推荐

  1. 面试官:Redis中字符串的内部实现方式是什么?

    在面试间里等候时,感觉这可真暖和呀,我那冰冷的出租屋还得盖两层被子才能睡着.正要把外套脱下来,我突然听到了门外的脚步声,随即门被打开,穿着干净满脸清秀的青年走了进来,一股男士香水的淡香扑面而来. 面试 ...

  2. LeetCode-071-简化路径

    简化路径 题目描述:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径. 在 Unix 风格的文件系统中,一个点(. ...

  3. 如何从头到脚彻底解决一个MySQL Bug

    摘要:为了保障华为云GaussDB产品的可靠性,每一款产品发布前都要通过多轮严苛的测试用例. 说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL. 华为云数据库新版本在发布之前,会 ...

  4. CDN网络科普小文(小说版)

    引言 作为公司 cdn 小组的一名小码仔,我为写一篇 cdn 的科普文章准备了好一段时间(大概有一个多月没有更新我的社交账号了). 在我刚进入公司,培训完,进入小组,了解到我们做的是 cdn 相关的工 ...

  5. tp6微信公众号开发者模式自定义菜单

    1,参考上篇博客,获取access_token https://www.cnblogs.com/xiaoyantongxue/p/15803334.html 2:控制器写以下代码 /* * 获取普通a ...

  6. 安装MYSQL8.0提示api-ms-win-crt-runtime-l1-1-0.dll 丢失

    Windows Server 2012 api-ms-win-crt-runtime-l1-1-0.dll 丢失 2017-11-06 11:11:37 Martin_Yelvin 阅读数 17015 ...

  7. Block对变量的引用

    如果在 Block 内部使用外部的变量,Block 会持有这个变量.下面来看几中特殊的情况,看 Block 对变量的持有情况如何. typeof @interface X : NSObject @pr ...

  8. 创造性解决arch/manjaro官方aur源下载慢办法

    今天想用yay下载steam++加速github网页时发现yay下载一段时间后速度变为零,想到应该是aur源的问题,但是aur修改成国内源后发现没有用,于是想到可以手动修改PKGBUILD文件的sou ...

  9. jsp安全问题及其解决建议

    jsp编程语言自从推出之日起,由于它的快速.平台无关.可扩展.面向对象等特性得到了越来越广泛的应用,越来越多的厂家开发出了各种各样的支持平台如IBM 公司的WebSphere.BEA公司的WebLog ...

  10. _u32定义

    驱动开发的原则: 能用__u32就最好用它,或者用u_int32_t之类的也可以,但不要直接用unsigned int等默认的数据类型.目的是让别人明白,你这个变量占多大内存. 原因: 1.你不能确定 ...