{"repo":"zanjie1999/tcp-over-websocket","free":true,"listed":false,"github":"https://github.com/zanjie1999/tcp-over-websocket","clone":"git clone https://github.com/zanjie1999/tcp-over-websocket.git","description":"将TCP/UDP放到WebSocket中传输（就能走CDN）基于ws的内网穿透 隧道代理 tcp2ws 全平台0依赖","language":"Go","stars":366,"topics":["go","websocket","tcp","tcp2ws","proxy","proxy-server","proxy-client"],"license":null,"category":"networking-infra","readme_excerpt":"Tcp over WebSocket (TCP to WebSocket, tcp2ws) 本工具能 使用WebSocket创建隧道，实现TCP端口转发 在v6.0及以后的版本支持了wss，也就是说现在可以实现https ssl进行更安全的传输 在v8.3及以后的版本支持了ip优选，会自动选择域名解析中最优的cdn ip进行连接 在v9.0及以后的版本支持了UDP，也就是说现在可以实现UDP端口转发了 也就是UDP over WebSocket (UDP to WebSocket, udp2ws) 并没有独立成新程序，写在一起了 启动时会同时转发指定的端口的TCP和UDP流量 因为经常修改优化，所以请Star，不要Fork 至于这样脱裤子放屁的操作有什么用？ 举个例子，一个服务器只能通过cdn的http转发（或者https），它也不能联网，这时你就可以利用此工具将需要转发的端口（比如22）转换成ws协议（http）来传输，再去Nginx里面配一个反向代理，那么当本客户端访问Nginx提供的服务的特定路径时将反代到本服务端，实现内网穿透进行端口转发 当然Nginx不是必须的，直接把监听端口开放到公网上也行 这时防火墙仅仅发现你连接了一个WebSocket而已 并且在网络不稳定时，断开的ws会自动重连，保持着转发的tcp连接（断开ws超过2分钟tcp连接将被断开） 似乎有别的工具也能实类似的功能，写它干嘛？ 最初为了实现将ssh用Nginx转发，写的时候还没找到这种工具，所以先实现了tcp放到ws中传输，但像Nginx就算是ws长链接，根据官方文档描述，连接超时时间无论配置多大，通常都不能连接超过75秒，时间一到ssh就会断，于是实现了重连和重发，这是别的工具没有的 这个工具也不会有太多花里胡哨的功能，干好它的本职工作 那为什么要支持UDP呢？ UDP是不可靠的，所以在传输过程中可能会丢包，但是这个工具会自动重传丢失的数据包 例如用做Dns转发，WebSocket会在客户端发送UDP数据包时才创建连接，并且在2分钟超时后自动断开，既保证了连接稳定性，又不会一直挂着连接占用资源 如何使用 在右边Releases中选择你使用的平台的程序来运行 服务端： tcp2ws 要代理的ip:端口 本ws服务的监听端口 tcp2ws 本地端口 本ws服务的监听端口 tcp2ws 本地端口 监听ip:本ws服务的监听端口 客户端： tcp2ws ws://链接 本地监听端口 tcp2ws http://链接 本地监听端口 另外也可以使用wss(https ssl)协议，ssl更为安全，但需要消耗更多流量，需要指定证书路径，另外顺带提一下nginx可以把wss(https)转发到ws(http) 服务端： tcp2ws 要代理的ip:端口 本ws服务的监听端口 证书.crt 证书.key tcp2ws 本地端口 本ws服务的监听端口 证书.crt 证书.key tcp2ws 本地端口 监听ip:本ws服务的监听端口 证书.crt 证书.key 使用默认的文件名 server.crt server.key（这里的 wss 也可以是 https 或 ssl ） tcp2ws 要代理的ip:端口 本ws服务的监听端口 wss 客户端： tcp2ws wss://链接 本地监听端口 tcp2ws https://链接 本地监听端口 生成自签证书的方法（一路回车即可）： 举个🌰： 在服务器运行 tcp2ws 127.0.0.1:22 127.0.0.1:22222 然后在ngi","default_branch":null,"files":null,"tree":[],"storefront":"/r/zanjie1999","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/zanjie1999/tcp-over-websocket/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}