上次写了一个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 实现中继(中转/端口转发)加速
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!


抓包时发现被中转服务器tcp包出现 cksum incorrect 执行命令ethtool -K eth0 rx off tx off sg off tso off更改设置之后显示正常。但我在ssr-win中将服务器ip修改为中转服务器地址后仍然没有任何反应,没有收到任何来自中转服务器的包。 被中转服务器: 02:12:33.302878 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52) cloudletk1mega.com.1025 > 42.159.93.xxx.24838: Flags [S.], cksum 0x0757 (correct), seq 1973342682, ack 3629166418, win 42340, options [mss 1460,nop,nop,sackOK,nop,wscale 11], length 0 0x0000: 4500 0034 0000 4000 4006 aca6 6771 9e33 [email protected]@...gq.3 0x0010: 2a9f 5dda 0401 6106 759e d1da d850 af52 *.]...a.u....P.R 0x0020: 8012 a564 0757 0000 0204 05b4 0101 0402 ...d.W.......... 0x0030: 0103 030b 中转服务器: 02:12:01.864377 IP (tos 0x4, ttl 114, id 19963, offset 0, flags [DF], proto TCP (6), length 52) aaa.24838 > 103.113.158.xx.1025: Flags [S], cksum 0x77e0 (correct), seq 3629166417, win 64240, options [mss 1440,nop,wscale 8,nop,nop,sackOK], length 0 0x0000: 4504 0034 4dfb 4000 7206 ab1b 0a00 0005 [email protected] 0x0010: 6771 9e33 6106 0401 d850 af51 0000 0000 gq.3a....P.Q.... 0x0020: 8002 faf0 77e0 0000 0204 05a0 0103 0308 ....w........... 0x0030: 0101 0402 请问我应该如何排查错误呢,问题有可能出在哪里。求解答以上完成了简单的防火墙中转。
其中
2333代表本地监听端口,6666表示欲中转服务器(SS服务端)的端口,1.1.1.1代表欲中转服务器(SS服务端)的ip地址,大家可以试一下。