这个是逗比根据地的备份镜像站(非官方)。牢记域名: [doubibackup.com]。搜索:标签云
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程
广告

Shadowsocks利用 Socat 实现中继(中转/端口转发)加速

Shadowsocks Toyo 26评论
广告
本文最后更新于 2018年9月14日 13:24 可能会因为没有更新而失效。如已失效或需要修正,请留言!

iptables端口转发经常会出现一些问题,导致无法使用,而haproxy又不支持转发udp。所以如果你要转发一个或几个端口的话就推荐这个工具:socat

socat不支持端口段转发,只适用于单端口或者少量端口,如果需要大量端口请看下面这两个教程。

其他的优化方案:https://doub.io/ss-jc26/#三、优化Shadowsocks

其他的端口转发教程:https://doub.io/ss-jc26/#服务器中继(国内中转)

Socat便捷管理脚本:『原创』Shadowsocks Socat中继(中转) 便捷管理脚本

Socat:

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

HaProxy:

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

iptables:

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

安装步骤

Centos 系统:

yum install -y socat

Debian/Ubuntu 系统:

apt-get update
apt-get install -y socat

使用方法

转发TCP

nohup socat TCP4-LISTEN:2333,reuseaddr,fork TCP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &

nohup

指的是 后台运行。

TCP4-LISTEN:2333

指的是 监听ipv4的端口,也就是 转发的端口,后面Shadowsocks链接中继时填写的 端口

fork TCP4:233.233.233.233:6666

指的是 被转发的 IP端口,也就是你要中继的服务器的 IP端口

注意:这里的 中继端口(2333)被中继端口(6666) 是可以一样的,我区分开只是为了让你们更好地理解。

/root/socat.log 2>&1 &

指的是 转发日志记录

转发UDP

nohup socat UDP4-LISTEN:2333,reuseaddr,fork UDP4:233.233.233.233:6666 >> /root/socat.log 2>&1 &

转发UDP很简单,只要把 TCP4 改成 UDP4 就行了!

停止转发

kill -9 $(ps -ef|grep socat|grep -v grep|awk '{print $2}')

卸载方法

Centos系统:

yum remove socat

Debian/Ubuntu系统:

sudo apt-get remove socat
sudo apt-get autoremove

简单解释

注意:假设你的中继服务器也就是现在在操作的服务器 IP 是 1.1.1.1 ,那么你的 中继端口 就是 2333 。你的 被中继服务器的 IP 是 233.233.233.233 ,端口是 6666

这时候你的 Shadowsocks客户端 填写信息的时候 IP 就是 1.1.1.1 端口 就是 2333

所以原理就是:

Shadowsocks客户端通过 1.1.1.1:2333 链接中继服务器 1.1.1.1 ,然后中继服务器把端口 2333 的流量转发到 被中继服务器 233.233.233.233 的端口 6666 上面。然后 被中继服务器 也就是上面的 Shadowsocks服务端,就会去访问你要的数据,然后依次返回 中继服务器 -> Shadowsocks客户端

防火墙设置

如果你设置后无法链接,那么多半是防火墙 阻拦了,只要开放端口 就行了。以上面的 示例的中继端口 2333 为例。

iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2333 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 2333 -j ACCEPT
# 如果要删除端口开放规则,只需要把 -I 改成 -D 即可。
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport 2333 -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport 2333 -j ACCEPT

开机启动

因为这个工具并没有开机启动的设定,所以需要设置系统的开机启动。

Centos系统:

chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local

Ubuntu/Debian系统:

chmod +x /etc/rc.local
vi /etc/rc.local
注意:如果你没有安装 vim 服务或者 不会使用 vim ,那么请看这篇文章:Linux中VIM编辑器的真 · 简单使用教程

输入 I 键 进入编辑模式(如果没反应请看上面的教程安装 vim),然后在打开的文件中的 exit 0 代码前面插入你的 socat 命令代码(就是上面 nohup socat...的代码)。

然后再 按 ESC 键 退出编辑模式,然后输入 :wq 退出并保存。

另外的端口转发教程:https://doub.io/ss-jc26/#服务器中继(国内中转)

其他的优化方案:https://doub.io/ss-jc26/#三、优化Shadowsocks

Socat便捷管理脚本:『原创』Shadowsocks Socat中继(中转) 便捷管理脚本

参考资料:https://www.91yun.co/archives/3042

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

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

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(26)个小伙伴在吐槽
  1. 我中转知乎可以再再海外服务器上弄个bbr魔改之类的吗?效果会更好吗?
    nmj2018-10-18 10:34 回复
  2. 时间长了进程越来越多 最终导致崩溃 请问有没有其他可以中转域名的解决方案
    tiddde2018-10-13 12:28 回复
  3. 再补充一下我的问题,经过几天的测试,发现一些比较严重的问题。fork功能会在当一个链接被建立后,自动复制一个同样的端口再进行监听,然后就越来越多,最终导致内存用完,旧的链接不会消失。我的1g内存vps,在开启2天后,task进程数占到大几千条,并且在无人使用之后持续保持这个数量的进程数,并不减少。kill命令后进程变成10几个。考虑过用crontab -e定时去kill,但kill后必须重新nohup socat,这时候在客户端的使用感受就是会有半分钟时间死活连不上,影响使用。
    十八2018-07-02 10:32 回复
    • 这种软件自身问题,我也没办法解决,推荐你用 iptables 端口转发试试。
      Toyo2018-07-02 10:51 回复
  4. 我在测试socat转发正常了之后,通过ps -ef|grep socat|grep -v grep去查看当前连接使用的进程,数量会越来越多。如果放任不管,这个会有什么影响嘛?
    十八2018-06-28 14:14 回复
  5. 如果有人使用流量攻击我的中转服务器,那我的中转服务器是不是也会把攻击流量全部转发?导致出站流量大爆炸?
    Nanami2018-02-20 14:06 回复
    • 理论上是的,符合转发要求的数据都会被转发出去(比如转发从某个端口进来的TCP流量)。
      Toyo2018-02-20 16:46 回复
      • 太可怕了,睡觉起来发现欠IDC上千块流量钱( 有啥保护措施吗?
        Nanami2018-02-21 19:02 回复
  6. 在Debian系统,设置了转发,但是过一段时间约一个小时左右,转发进程还是会自动结束,nohup这个命令好像不起作用,是什么原因呢?
    apple2017-11-26 23:36 回复
    • nohup 命令只是让这个命令后台运行,不会因为SSH链接断开而中断,但是他并不是 守护进程 工具,如果因为什么原因进程结束了,那么不会自动去重启进程。
      Toyo2017-11-27 16:44 回复
  7. 您的文章写得真好, 看的很明白。
    天下大乱2017-11-03 15:49 回复
  8. 大神,A和B两台服务器内网是互联的,走的专线。我用Socat进行转发,A作为中转服务器,将数据中转到B的内网IP上,我通过日志记录来看,B服务器是收到了A的请求,但是A这边不返回信息。如果我把转发规则改为转发到B的公网上,则一切正常。这个问题有解吗?A和B的公网走的不是专线,内网走的是专线。
    poney2017-08-04 18:39 回复
  9. 请问设置多个被中继服务器&端口到同一台中继服务器的同一个端口上的话,是否继续有效?
    niu2016-12-19 12:38 回复
    • 你说的很迷,看不懂。
      Toyo2016-12-19 12:48 回复
      • 类似下面这样的设置,是否有效果 :grin: nohup socat TCP4-LISTEN:2333,reuseaddr,fork TCP4:1.1.1.1:1111 >> /root/socat.log 2>&1 & nohup socat UDP4-LISTEN:2333,reuseaddr,fork UDP4:1.1.1.1:1111 >> /root/socat.log 2>&1 & nohup socat TCP4-LISTEN:2333,reuseaddr,fork TCP4:2.2.2.2:2222 >> /root/socat.log 2>&1 & nohup socat UDP4-LISTEN:2333,reuseaddr,fork UDP4:2.2.2.2:2222 >> /root/socat.log 2>&1 &
        niu2016-12-19 12:50 回复
        • 虽然我没试过,但是理论上应该是不行的,否则你链接你 中转服务器的IP:2333 ,socat会很迷糊,不知道到底是把 2333端口收到的数据转发到 1.1.1.1:1111 还是 2.2.2.2:2222
          Toyo2016-12-19 13:07 回复
          • 了解。我测试一下。话说,linux上装一个kcptun的客户端的话,是不是同样可以达到中转的作用?
            niu2016-12-19 13:57 回复
  10. 查看 日志好像是这个错误 2016/12/11 13:21:50 socat[11490] E write(3, 0x25015c0, 62): Broken pipe
    大奥2016-12-11 13:45 回复
  11. 那个 昨天还行,今天就失效了,linux基础小白,这个该怎么查是哪里的问题呢?
    大奥2016-12-11 13:38 回复
  12. ssr能中转否
    papaprpr2016-10-20 07:05 回复
    • 一样,你先了解一下Shadowsocks和ShadowsocksR的区别吧。
      Toyo2016-10-20 16:11 回复
  13. 这个和锐速能放在一起用吗?
    Thomas2016-10-19 18:35 回复
    • 有没有冲突?
      Thomas2016-10-29 10:24 回复
      • 没有冲突,锐速是TCP优化加速,这个是TCP/UDP转发,不冲突。
        Toyo2016-10-29 11:46 回复
  14. kao,没睡好看晕了
    Python Swift2016-08-17 12:34 回复