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