本站将不再提供免翻镜像域名,有能力的请访问:[doub.io],该域名永不更换。[直连访问方法]
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程

『原创』Shadowsocks Socat 中继(中转/端口转发) 便捷管理脚本

Shadowsocks Toyo 41评论
文章目录
[显示]
本文最后更新于 2018年1月18日 21:07 可能会因为没有更新而失效。如已失效或需要修正,请留言!

最近没什么教程好写的,那就闲的没事写个脚本吧!

Shadowsocks 中继(中转)能用的工具很多,我的网站介绍过 HaProxy、iptables、Socat。

其中HaProxy只能转发TCP流量,但是支持端口段;iptables可以转发TCP/UDP,也支持端口段,但是配置容易出错莫名其妙的,iptables规则我也不熟悉;而Socat支持转发TCP/UDP,但是不支持端口段,所以多个端口操作起来有点麻烦,于是我就写一个脚本来添加和管理Socat。


Socat手动教程:Shadowsocks利用 Socat 实现单端口 中继(中转)加速

其他 Shadowsocks中继(中转)教程:传送门

Socat:

优点:支持 TCP/UDP 转发。缺点:不支持端口段(多个端口需要开启多个转发)

HaProxy:

优点:支持 TCP 转发,支持 端口段 转发。缺点:不支持 UDP 转发。

iptables:

优点:支持 TCP/UDP 转发,支持 端口段 转发。缺点:配置麻烦,容易出错。

系统要求

Debian / Ubuntu 14.04 +

脚本版本

Ver: 1.0.5

安装步骤

wget -N --no-check-certificate https://softs.loan/Bash/socat.sh && chmod +x socat.sh && bash socat.sh

备用下载地址(上面的链接无法下载,就用这个):

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/socat.sh && chmod +x socat.sh && bash socat.sh

下载并运行脚本后,输入 1 并回车就会开始安装。

使用方法

./socat.sh

运行脚本后,会显示菜单:

  SoCat 一键管理脚本 [v1.0.5]
  -- Toyo | doub.io/wlzy-18 --
  
 0. 升级脚本

 1. 安装 SoCat
 2. 卸载 SoCat

 3. 新增 SoCat
 4. 删除 SoCat

 5. 查看 SoCat 信息
 6. 查看 SoCat 日志

 当前状态: 已安装

 请输入数字 [0-9]:

选择 3. 新增 SoCat 后,会提示你依次输入 本地监听端口、欲转发IP、欲转发端口、转发类型:

请输入 Socat 的 本地监听端口 [1-65535]
(默认端口: 23333):10000
————————————————
本地监听端口 : 10000
————————————————
请输入 Socat 远程被转发的 端口 [1-65535]
(默认端口: 10000):
————————————————
远程转发端口 : 10000
————————————————
请输入 Socat 远程被转发的 IP:2.2.2.2
————————————————
远程转发 IP : 2.2.2.2
————————————————

请输入数字 来选择 Socat 转发类型:
1. TCP
2. UDP
3. TCP+UDP

(默认: TCP+UDP):
————————————————
请检查 Socat 配置是否有误 !

本地监听端口 : 10000
远程转发 IP : 2.2.2.2
远程转发端口 : 10000
转发类型 : TCP+UDP
————————————————

请按任意键继续,如有配置错误请使用 Ctrl+C 退出。

最后会提示你确认配置是否有误,如果没有问题就按任意键继续,启动成功后就会提示:

Socat 已启动 !

本地 IP : 1.1.1.1
本地监听端口 : 10000

远程转发 IP : 2.2.2.2
远程转发端口 : 10000
转发类型 : TCP+UDP

选择 5. 查看 SoCat 信息 后,会显示如下:

当前有 2 个Socat转发进程。
1. 进程PID: 32288 类型: TCP4 监听端口: 10000 转发IP和端口: 2.2.2.2:10000
2. 进程PID: 32289 类型: UDP4 监听端口: 10000 转发IP和端口: 2.2.2.2:10000

选择 4. 删除 SoCat 后,也会显示列表,然后让你选择要终止的 Socat 数字。

Shadowsocks客户端说明

假设你的 海外服务器(被中转) 中搭建的Shadowsocks服务端的IP是 2.2.2.2  ,SS端口是 10000

假设你的 中转服务器 的IP是 1.1.1.1 ,本地监听端口和SS端口一致,都是 10000

那么,你的Shadowsocks客户端,添加Shadowsocks服务器,IP填写 1.1.1.1 ,端口填写 10000 其他的 密码/加密方式/协议/混淆等等 全部和原Shadowsocks账号一样!

安装目录

socat是通过 yum/apt 软件包安装的,所以我就单独搞了一个log日志文件的目录。

日志文件:/etc/socat/socat.log

其他说明

提示wget: unknown host “softs.loan” 之类的错误

这是无法解析我的域名,多半是DNS的问题,请更换DNS为谷歌DNS。

echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "nameserver 8.8.4.4" >> /etc/resolv.conf

提示 wget: command not found 的错误

这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。

# Centos系统:
yum install -y wget

# Debian/Ubuntu系统:
apt-get install -y wget

更换 apt源,解决安装错误:[错误] Socat安装失败 等等

一些VPS的 apt源太老旧,导致无法安装socat,所以我这里写上如何更换 apt源。所以我只针对这两个系统,Centos的自己去谷歌yum镜像源。

依次输入就可以更换apt源了,下面的代码是以 us美国 为例,你可以自己去这里选一个近一些合适的,然后替换下面代码中 us.sources.list 的 us 。

wget -N --no-check-certificate -P /etc/apt https://softs.loan/Bash/sources/us.sources.list
rm -rf /etc/apt/sources.list
cp /etc/apt/us.sources.list /etc/apt/sources.list

更新日志

2018年01月18日,版本 v1.0.5

1. 修复 一些显示问题。

2. 更换 操作方式为菜单式操作。

2017年07月24日,版本 v1.0.4

1. 修复 Socat 卸载报错的问题。

2017年07月23日,版本 v1.0.3

1. 取消 CentOS系统支持。

2. 脚本 结构简单重写。

3. 修复 各种BUG。

2016年12月24日,版本 v1.0.1

1. 增加 自动设置开机启动功能。

2. 增加 自动设置开放防火墙端口功能。

3. 修复 启动/停止 成功,但是提示失败的BUG。

2016年12月21日,版本 v1.0.0

1. 推出 正式版本。


Socat手动教程:Shadowsocks利用 Socat 实现单端口 中继(中转)加速

其他 Shadowsocks中继(中转)教程:传送门

转载请超链接注明:逗比根据地 » 『原创』Shadowsocks Socat 中继(中转/端口转发) 便捷管理脚本
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!

赞 (32)
发表我的评论
取消评论
表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(41)个小伙伴在吐槽
  1. 请问设置后 SSR 提示 SSL handshake error 该如何解决?
    Tim2018-03-10 23:48 回复
  2. Hello,Socat脚本在Ubuntu 17.04 64Bit上安装失败
    Jon.Wang2018-03-02 09:17 回复
  3. 我也出现了“奶牛”兄弟说的问题。平台是腾讯云 debian9。1000+个socat的进程,吃了300M的内存。
    noName2017-11-13 20:46 回复
  4. socat在配置运行完成后每次连接都会fork很多子进程,然后你的list和del选项都用不了,sad,我也看了socat的文档,暂时还没看明白怎么自动杀死这些子进程。测试平台:ubuntu server。不过,这个socat真的很不错,配置选项也很丰富,不过看来我也得自己细细翻译翻译读读了。最后还是很感谢你提供的方案,很赞。
    奶牛2017-11-09 22:36 回复
    • list和del 用不了是什么意思?Debian 7 x64 脚本测试都正常。
      Toyo2017-11-09 22:54 回复
      • 这样说吧,用脚本添加了一个中转之后,每次发生tcp或者udp转发的时候都会触发socat的fork选项,这个选项是为了提高socat的性能,在短时间可以接受大量请求而设计的,但是触发之后我发现并没有自动杀掉这些无用的子进程,导致ps产生大量子进程,所以,你可以再测试下配置好之后多进行一些流量触发,就知道我说的情况了。
        奶牛2017-11-15 02:00 回复
        • 那这种 Socat自身的问题,我也没办法解决。。。一般来说理想情况下用 iptables 转发最高效最方便,不过 iptables 转发可能会莫名其妙的用不了,各个中转方案都有各种优势和缺点...
          Toyo2017-11-15 09:57 回复
  5. 如何删除之前转发的设置
    Jcciam2017-10-28 10:51 回复
  6. 使用本脚本在微软Azure 上似乎不能正常使用,可以麻烦您在Azure上面做一下测试吗?或者是不是可以和您邮件沟通
    2017-10-27 13:55 回复
  7. SOCAT在中转服务器上面监听中转端口,然后你本地SSR账号链接中转端口,SOCAT收到监听中转端口的数据后,就会原封不动的收到的数据转发到指定 服务器IP(SSR)和端口,然后你的SSR服务器收到数据,交给SSR服务端处理,最后原路返回。然后我用中转服务器连接外网,比如百度,百度收到的IP会是中转的IP,是吧?不是本地IP? 简单说就是本地用SSR连接中转,最后外网得到的是布置SSR的IP。中转直接上网,外网是中转的IP?
    随手打个昵称2017-10-25 19:04 回复
    • 看你说的好乱。
      假设本地设备(SSR客户端)外网IP:1.1.1.1、中转服务器(Socat)外网IP:2.2.2.2、被中转服务器(SSR服务端)外网IP:3.3.3.3
      不挂代理直接访问 ipip.net 显示的IP是 1.1.1.1
      使用SSR客户端直接链接 SSR服务端的服务器,全局访问 ipip.net 显示的IP就是 3.3.3.3
      配置中转并使用SSR客户端 通过中转服务器 链接 SSR服务端的服务器后,全局访问 ipip.net 显示的IP就是 3.3.3.3
      Toyo2017-10-26 02:13 回复
      • 使用SSR客户端直接链接 SSR服务端的服务器,全局访问 ipip.net 显示的IP就是 2.2.2.2? 不是3.3.3.3?
        随手打个昵称2017-10-29 19:27 回复
  8. 2017/10/04 06:48:44 socat[2099] E write(6, 0x251b110, 5292): Broken pipe 2017/10/04 06:50:08 socat[2259] E write(5, 0x16c1110, 65): Broken pipe 这种是什么错误?
    L.G.Y2017-10-04 07:03 回复
  9. 亲,我在Azure香港机部署了SOCAT. 发现大概1天半左右SOCAT TCP及UDP端口转发进程就不在了。另外,一段时间后VPS连不上,SSH也不行。SS VPS用的加密方式是none + auth_chain_a. 是不是因为转发的流量都是不带加密的所以香港的中继服务器被墙了?但看文档说non+auth_chain_a模式下自带RC4加密呀。。。不解。。。
    oree2017-08-29 11:06 回复
    • 如果国外能ping通,国内ping不通,就是被墙了,我还没见过SSR账号被墙的呢。
      Toyo2017-08-29 12:20 回复
      • 其实很奇怪,也许是Azure的问题,国内ping不同,用VPS也ping不通。 亲,这种情况下SOCAT的数据流是加密的吗?
        oree2017-09-01 14:28 回复
        • SOCAT在中转服务器上面监听中转端口,然后你本地SSR账号链接中转端口,SOCAT收到监听中转端口的数据后,就会原封不动的收到的数据转发到指定 服务器IP(SSR)和端口,然后你的SSR服务器收到数据,交给SSR服务端处理,最后原路返回。
          Toyo2017-09-01 15:19 回复
  10. 大胸弟,无法开机自启,查看rc.local发现nohup socat…代码在exit 0下边,然后看脚本里的#系统判断全写的debian
    npt2017-07-23 00:31 回复
    • 脚本里添加rc.local是分 ubuntu/debian 的,除了if->Debian就是else->Ubuntu了。
      Toyo2017-07-23 00:54 回复
      • 更新了,兄弟稳!!
        npt2017-07-23 23:10 回复
  11. 大神~我在阿里云安装这个脚本都是成功的~也开通了防火墙端口~但是转发失败~连不上网
    在流浪的葡萄2017-07-14 23:00 回复
    • 失败,怎么失败?SSR客户端 链接统计窗口提示什么(错误/超时/空连)?
      Toyo2017-07-15 00:08 回复
    • 换debian7试试
      KKK2017-07-17 04:22 回复
  12. 你好,请问能不能增加ipv6的转发设置,与ipv4转发不太一样,谢谢啦
    coldark2017-06-11 08:17 回复
  13. 大兄弟,感谢分享,只是测试发现好像开启了太多的pid,我就刷了一分钟的TUMBLE,后来的视频打开就很慢,一看list,乖乖,上百个PID。。。。。。我真的只开启了一个端口转发,没连接的话只有两个,上会儿网就出来一堆
    灰太狼2017-03-21 02:04 回复
    • 那可能就是 Socat的问题了。
      Toyo2017-03-21 12:51 回复
  14. 话说 socat会不会有 转发效率不足 类似的问题啊。。。
    南琴浪2017-02-03 00:31 回复
    • 只要是流量转发(端口转发)都会涉及到转发速度损耗,不过一般影响很小,也没有人做过测试,因为影响的因素很多,测试起来因为损耗很小,所以也看不出是因为端口转发导致的速度损耗,还是因为其他因素影响。
      Toyo2017-02-03 02:51 回复
  15. 这个能同时转发多个端口吗/
    甘文2017-01-29 16:50 回复
    • 文章里已经写了,Socat一次只能配置一个端口转发,多个端口只能开多个socat程序,需要端口段转发看 iptables haproxy
      Toyo2017-01-29 17:00 回复
  16. 请问能不能将某个TCP端口也同样把UDP的数据转换成TCP,通过TCP端口转发出去? 比如说我有一个1111的TCP端口,我想实现它既能发送TCP数据,又同样可以通过这个端口把UDP的数据转换成TCP通过1111的TCP转发出去?
    SunZz2016-12-28 16:34 回复
    • TCP是TCP,UDP是UDP完全不一样的,是否能实现你说的 我不清楚,但是我知道这个超出了 端口转发 或者说 socat 的能力范围。
      Toyo2016-12-28 18:05 回复
      • 现在是这个样的,我有一个主机只能设置内部端口,比如我把内部端口1111的UDP和TCP开启,外部端口会随机分配两个端口已连接内部的1111端口,1111的TCP外部端口是1234,UDP是5678,这个时候如果我用SS连接(我用梅林,没有可以设置UDP端口的地方),只能设置TCP的1234端口,而无法连接5678端口,这个时候我该怎么做才能把UDP的流量转化成TCP走1234端口?还是说只能在SS里单独设置UDP端口?
        SunZz2016-12-29 14:45 回复
        • 这个应该实现很麻烦,我并没有研究,你可能需要谷歌。
          Toyo2016-12-29 15:24 回复
          • 确实比较麻烦,所以正在询问几方看看有没有可以更容易实现的方法,谢谢。
            SunZz2016-12-30 16:01 回复
  17. 请问这个需要手动加入开机启动吗?
    Hirotaka2016-12-24 00:07 回复
    • 脚本并没有设置开机启动,有需要的话,我明天可以加上。
      Toyo2016-12-24 00:41 回复
  18. 国内VPS的宽带是1m的话,那我最高速度是不是也是1m?
    肥鸡2016-12-22 00:16 回复
    • 国内的这些VPS说的1Mbps宽带,都是独享1Mbps上行宽带,下行一般都不会限速的,也就是说VPS把数据传给你,只有1Mbps的速度,或者你下载VPS上面的文件,只有1Mbps的速度,理论速度128KB/S。
      Toyo2016-12-22 01:03 回复