使用iptables来实现线路中转(Shadowsocks)
最近碰到这样一个需求,为了优化Shadowsocks的连接,采用A机器来中转访问B机器。研究了一下,用iptables来转发数据包就足够实现了。
下面假设用户连接的机器A的IP是1.1.1.1,最终出口B机器的IP是2.2.2.2,中转的端口是3389
1、首先要开启数据包转发
vim /etc/sysctl.conf # 在文件末添加以下一行(如已有则不必添加) net.ipv4.ip_forward=1
2、写/etc/sysconfig/iptables来设置转发
-A PREROUTING -p tcp -m tcp --dport 3389 -j DNAT --to-destination 2.2.2.2:3389 -A PREROUTING -p udp -m udp --dport 3389 -j DNAT --to-destination 2.2.2.2:3389 -A POSTROUTING -d 2.2.2.2/32 -p tcp -m tcp --dport 3389 -j SNAT --to-source 1.1.1.1 -A POSTROUTING -d 2.2.2.2/32 -p udp -m udp --dport 3389 -j SNAT --to-source 1.1.1.1 -A INPUT -p udp -m udp --dport 3389 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
需要注意的是,此处A机器的IP地址是其网卡地址而不是公网地址,对于一些网卡没有直接设置公网IP的机器来说一定要设置其内网地址,否则会无法访问。
网上搜集的一键脚本:
wget -N --no-check-certificate https://softs.pw/Bash/iptables-pf.sh; chmod +x iptables-pf.sh; bash iptables-pf.sh bash iptables-pf.sh add #添加端口转发规则 bash iptables-pf.sh del #删除端口转发规则 bash iptables-pf.sh list #查看端口转发规则列表 bash iptables-pf.sh uninstall #清空端口转发规则
本文出自 Tech Trace,转载时请注明出处及相应链接。
本文永久链接: https://www.qiujiahui.com/2017/02/10/%e4%bd%bf%e7%94%a8iptables%e6%9d%a5%e5%ae%9e%e7%8e%b0%e7%ba%bf%e8%b7%af%e4%b8%ad%e8%bd%ac%ef%bc%88shadowsocks%ef%bc%89/