Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

0990/gotun

Repository files navigation

gotun

tcp/udp转发器,可将明文流量转换为加密流量在公网上传输,如下图所示

明文在公网上传输

tunnel

加密流量在公网上传输

tunnel

Feature

  • 支持tcp,udp,quic,kcp流量转发
  • 支持构建加密安全通道,可使用tcp,udp,quic,kcp作通道传输协议
  • 支持内网穿透式安全通道
  • web界面管理
  • 内置测试工具(支持socks5,http代理)

使用

点此下载二进制文件,启动即可(会自动生成配置app.yaml),最简配置:

# web监听地址
web_listen: 0.0.0.0:8080
# web登录账号
web_username: admin
# web登录密码
web_password: admin
# 每小时登录失败限制次数
web_login_fail_limit_in_hour: 10
# 日志等级:debug/info/warn/error
log_level: info
# pprof监听地址,可为空
pprof_port: ""

访问127.0.0.1:8080,输入默认账号密码admin/admin登录,登录后页面:
tunnel

内置服务

为了方便测试和部署,内置了一些服务,可通过配置文件启用(设置enable为true即可)

# 内置服务配置
build-in:
 # 是否启用内置服务,总开关,false情况下不启用(会忽略下面的配置)
 enable: false
 # echo服务监听地址,用于测试,客户端向此端口发送什么就回什么,为空则不启动
 echo_listen: 0.0.0.0:8081
 # http代理服务监听地址,为空则不启动
 http_proxy_listen: 0.0.0.0:3128
 # socks5x服务配置,为空则不启动
 socks5x_server:
 listen_port: 1080
 udp_timeout: 120
 tcp_timeout: 120

安全通道服务

需求

假设远程主机有个服务Server,IP:44.55.66.77 监听端口9999,本地有Client与之非加密通信
connection
为了保证数据安全,远程主机部署gotun(stserver),监听端口B,客户端主机部署gotun(stclient),监听端口A
stclient将流量加密,传输至44.55.66.77:B,stserver接收流量,进行解密,将流量传送至端口9999
connection_with_stunnel
现在localhost:A已"伪装"成44.55.66.77:9999服务了,本地Client只需要和localhost:A通信即可
走在外网的全是加密流量,此时远程主机也不用暴露9999端口,只需要开放端口B

创建

希望通过tcpMux作为加密通道,加密方式为gcm,加密key为goodweather
需要创建一对服务,一个作为客户端,部署在本地:

{
 "name": "stclient",
 "input": "tcp@0.0.0.0:A",
 "output": "tcp_mux@44.55.66.77:B",
 "mode": "",
 "in_proto_cfg": "{\"head\":\"\"}",
 "in_decrypt_mode": "",
 "in_decrypt_key": "",
 "in_extend": "",
 "out_proto_cfg": "{\"head\":\"\"}",
 "out_crypt_mode": "gcm",
 "out_crypt_key": "goodweather",
 "out_extend": "{\"mux_conn\":10}"
}

一个作为服务端,部署在44.55.66.77上:

{
 "name": "stserver",
 "input": "tcp_mux@0.0.0.0:B",
 "output": "tcp@127.0.0.1:9999",
 "mode": "",
 "in_proto_cfg": "{\"head\":\"\"}",
 "in_decrypt_mode": "",
 "in_decrypt_key": "",
 "in_extend": "",
 "out_proto_cfg": "{\"head\":\"\"}",
 "out_crypt_mode": "gcm",
 "out_crypt_key": "goodweather",
 "out_extend": ""
}

要点:

  • 客户端的output需要指向服务端的input,两边的协议、加密方式和加密key需要一致
  • 加密通道协议可以是tcp,tcpmux,quic,kcp,kcpmux

测试

为了测试方便,可开启内置的echo服务(端口改为9999),模拟成44.55.66.77:9999的服务

# 内置服务配置
build-in:
 # 是否启用内置服务,总开关,false情况下不启用(会忽略下面的配置)
 enable: true
 # echo服务监听地址,用于测试,客户端向此端口发送什么就回什么,为空则不启动
 echo_listen: 0.0.0.0:9999
  1. 测试echo服务:输入任意字符,收到相同的字符,代表echo服务正常运行
nc 44.55.66.77:9999
  1. 测试转发服务:输入任意字符,会收到相同的字符,代表转发服务OK
nc 127.0.0.1:A

更方便的测试

web页面右上角是测试工具区,支持httpproxy,socks5,echo协议测试:
比如上面的echo服务, 输入框填入127.0.0.1:A,点击"echo检测"按钮,出现"tcp passed",代表成功

更多

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /