因为某些原因,博主(hn电信)访问国外的网络质量是相当差。经历了7、8月份几乎无法访问国际互联网(下称“外网”)以及和奠信的斗争,9月算是终于换来一丝光明。但是奠信访问Linode(等日本服务器)的线路还是被“特殊照顾”,依然是惨不忍睹。每天ss开开关关实在烦心,于是决心咬咬牙,折腾出一个解决方案,找回过去24h挂外网的男人的自信。
一般来说,机房的网络相比民用网络,有更高的QoS级别,出口质量会相对高一些。经朋友推荐,入手了阿里云ECS(云服务器),用其中转原本直接到Linode的流量。经过几番折腾,总结出设置如下(以下均在 Ubuntu 14.04 64-bit 下操作):
1、开启IP_FORWARD
vi /etc/sysctl.conf
#在文件末添加以下一行(如已有则不必添加)
net.ipv4.ip_forward=1
2、使用IPTABLES,转发TCP、UDP流量
iptables -t nat -A PREROUTING -p tcp --dport 12XXX -j DNAT --to-destination 106.186.XX.XX:12XXX
iptables -t nat -A POSTROUTING -p tcp -d 106.186.XX.XX --dport 12XXX -j SNAT --to-source 139.XX.XX.XX
iptables -t nat -A PREROUTING -p udp --dport 12XXX -j DNAT --to-destination 106.186.XX.XX:12XXX
iptables -t nat -A POSTROUTING -p udp -d 106.186.XX.XX --dport 12XXX -j SNAT --to-source 139.XX.XX.XX
3、保存IPTABLES,重启阿里云ECS
#这里使用 iptables-persistent 保存iptables配置,也可以使用其他方法保存
apt-get install iptables-persistent
netfilter-persistent save
reboot
OK,这时将ss客户端的IP改为阿里云ECS的公网IP,再去连接,ss流量就会通过阿里云中转,从此卡顿不再有(阿里云 ¥40 + ¥0.8/GB,所以钞票也不再有)。
需要注意的是,并非所有机房都支持UDP转发,各个机房网络环境也不同,具体操作过程中需要根据实际情况,找到合适的线路。