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

本文最后更新于 2017年10月29日 11:07 可能会因为没有更新而失效。如已失效或需要修正,请留言!

上次写了一个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/Ubuntu 系统:

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

单端口 端口转发

注意:下面最后是写中转服务器 网卡绑定的IP,而不仅仅是外网IP,比如一些国内服务器可能网卡绑定的是内网IP,你就需要写内网IP,而不是外网IP!

同端口 端口转发

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/Ubuntu 系统:

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.co/archives/3008

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

留言评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code