镜像域名: doub.bid 提供给无翻墙能力的人使用~ 有能力的建议访问主域名(注意把"点"改为".") doub点io
投稿文章 | 广告投放 | Telegram 群组 / 公告频道

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

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

上次写了一个HaProxy中转的教程,但是不支持UDP端口转发,没办法玩游戏之类的,所以这次写个iptables转发端口教程。


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

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

Socat:

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

HaProxy:

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

iptables:

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

iptables配置

开启防火墙的ipv4转发

echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

配置iptables开机加载

首先我们设置一下iptables 防火墙的开机启动自动载入规则功能。

CentOS 系统:

service iptables save
chkconfig --level 2345 iptables on

Debian 系统:

iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

Ubuntu 系统:

iptables-save > /etc/iptables.up.rules
echo -e '\npre-up iptables-restore < /etc/iptables.up.rules\npost-down iptables-save > /etc/iptables.up.rules' >> /etc/network/interfaces
chmod +x /etc/network/interfaces

单端口 端口转发

同端口 端口转发

iptables -t nat -A PREROUTING -p tcp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口]
iptables -t nat -A PREROUTING -p udp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器公网IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器公网IP]

以下示例,假设你的国外服务器(被中转服务器)是 1.1.1.1 ,你的SS端口是 10000 ,而你这台正在操作的VPS的公网IP(中转服务器)是 2.2.2.2 

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:10000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:10000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可

不同端口 端口转发

本地服务器(中转服务器 2.2.2.2 ) 10000 端口转发至目标IP(被中转服务器) 1.1.1.1  30000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,端口应该填 10000 而不是 30000

多端口 端口转发

同端口 端口转发

本地服务器(中转服务器 2.2.2.2 ) 10000~30000 端口转发至目标IP(被中转服务器) 1.1.1.1  10000~30000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:30000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:30000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可

不同端口 端口转发

本地服务器(中转服务器 2.2.2.2 ) 10000~20000 端口转发至目标IP(被中转服务器) 1.1.1.1  30000~40000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000:40000 -j SNAT --to-source 2.2.2.2
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000:40000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,端口应该填 10000~2000 而不是 30000~40000 

保存iptables配置

修改后记得保存 iptables配置,免得重启后没了。

CentOS 系统:

service iptables save

Debian 系统:

iptables-save > /etc/iptables.up.rules

查看NAT规则

iptables -t nat -vnL POSTROUTING
iptables -t nat -vnL PREROUTING

删除NAT规则

通过上面的查看规则命令,查看规则后,确定你要删除的规则的顺序,下面的命令是删除 第一个 规则。

iptables -t nat -D POSTROUTING 1
iptables -t nat -D PREROUTING 1

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

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

参考资料:https://github.com/shadowsocks/shadowsocks/wiki/Setup-a-Shadowsocks-relay

本教程转载自:https://www.91yun.org/archives/3008

转载请超链接注明:逗比根据地 » Shadowsocks利用 iptables 实现中继(中转/端口转发)加速
责任声明:本站一切资源均原创或收集自互联网,仅作交流学习之用,请勿用作商业!如造成任何后果,本站概不负责!

赞 (19)or打赏
发表我的评论
取消评论
表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(18)个小伙伴在吐槽
  1. 中转服务器需要安装ssserver吗?
    耶稣2017-06-05 17:42 回复
    • 不需要。ShadowsocksR服务端是安装在被中转服务器上的。
      Toyo2017-06-05 17:56 回复
      • 好的
        耶稣2017-06-06 11:00 回复
  2. firewall一样也可以实现上述的功能,centos7不需要改用iptables。
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 开启防火墙转发
    firewall-cmd --permanent --add-port=2333/tcp
    firewall-cmd --permanent --add-port=2333/udp
    firewall-cmd --permanent --add-masquerade
    firewall-cmd --permanent --add-forward-port=port=2333:proto=tcp:toport=6666:toaddr=1.1.1.1
    firewall-cmd --permanent --add-forward-port=port=2333:proto=udp:toport=6666:toaddr=1.1.1.1
    firewall-cmd --reload
    
    以上完成了简单的防火墙中转。
    其中 2333 代表本地监听端口, 6666 表示欲中转服务器(SS服务端)的端口, 1.1.1.1 代表欲中转服务器(SS服务端)的ip地址,大家可以试一下。
    快看那头熊2016-12-26 15:21 回复
    • 不玩Centos,不清楚这些,我帮你编辑格式化一下。
      Toyo2016-12-26 15:30 回复
      • 我是看到你的文章觉得可以一试,然后去测试了一下,然后我又懒得换iptables了,就直接用firewall搞了一下
        快看那头熊2016-12-26 15:37 回复
  3. 你好,按照要求来弄。输完service iptables save 返回结果:iptables: unrecognized service 不能识别的服务?怎么回事,求解答。
    smish2016-12-22 01:35 回复
    • Debian/Ubuntu是没有把iptables注册成服务的,CentOS 7也是,7默认用的是firewall防火墙,需要关掉或者删掉安装iptables防火墙才行。
      Toyo2016-12-22 10:46 回复
  4. 请问这个能不能同时中转多个ip
    LL2016-11-27 01:30 回复
  5. 233.233.233.233/32 这个32是什么意思?
    John2016-08-25 12:11 回复
  6. 手机上怎么弄
    4019559772016-08-19 23:00 回复
  7. 如非同端口那个方案,转发后算的是10000端口还是30000端口,求解
    jiqimao2016-08-14 17:35 回复
    • 这个时候你Shadowsocks客户端填写Shadowsocks信息的时候端口应该填 10000 而不是 30000 。
      Toyo2016-08-14 19:40 回复
  8. Debian配置失败!求指点!谢谢! iptables-restore < /etc/iptables.rules iptables-restore v1.4.14: Line 54 seems to have a -t table option. Error occurred at line: 54 Try `iptables-restore -h' or 'iptables-restore --help' for more information.
    夏天乐园2016-08-14 11:10 回复
  9. "看完此逗比文章的心情时"有迷投票bug啊,投票一个人可以多次戳相同的选项。。。
    ENDMAN352016-07-28 06:04 回复
    • 无所谓了,反正也只是加上玩的,不用在意这些细节
      Toyo2016-07-28 06:49 回复