河小马 发表于 2020-3-9 19:39:20

流量中转教程(一) - iptables

随着cloud 价格的越来越便宜,甚至比很多虚拟主机都便宜了,大量的站长或者推广者都从简单的shared hosting一跃而上,开始管理服务器了,不论是cloud 服务器还是dedicated 服务器,都是一个完整的OS,其管理的办法基本都是一致的.

我经常听到很多同学说ssh连接到服务器总是断,3389不稳定等等。。。这也是这篇文章出炉的一个原因。

我们为什么要需要中转?
1) 咱们论坛的人们使用的服务器基本都是海外的,而且国际大厂的线路通过对国内都不友好,SSH或者3389上去,经常断甚至连接不上,再或者你尝尝连不上自己的tracker,比如说voluum,比如说binom所在的服务器等等
2) 对于这个论坛的受众来说永远离不开的一点: 流量中转, 方便“留学”. 对国内线路好的服务器通常没有好的国际线路,比如说阿里云。。对国际线路好的服务商通常没有好的国内线路,比如说softlayer

我目前就想到了这两个主要原因,如果还有其他原因,欢迎回帖补充.

中转的本质?
中转的本质其实就是发生网络协议的第四层:TCP/UDP层。AWS,GCP 或者阿里云之类的负载均衡的本质,其实就是在第四层的流量转发,也就是这篇文章所说的中转

中转的解决方案有哪些?
其实有很多解决方案,但是经常被国人所使用就是两个: iptables, haproxy
iptables 是Liunx自带的比较接近底层的服务,支持TCP和UDP. 咱们浏览网页什么的都是TCP,UDP常见于网络游戏。唯一的缺点就是配置麻烦,性能稍差(这个差指的是面向高流量的时候,对于“留学”来说没有任何影响)
HAproxy呢,著名的开源的负载均衡软件,性能高,配置简单,但是只支持UDP. 如果你不玩游戏,那么没有任何影响。

这篇文章主要是讲iptables.

iptables 存在于REHL/Centos的每个发行版中,debian/ubuntu现在新版应该是ufw了,但是不需要着急,跟着往后看就可以了.

iptables 命令十分复杂,而且难于记忆和配置.

在这里我们采用iptables 的管理软件: CSF (https://configserver.com/cp/csf.html)

很多老站长应该对CSF比较熟悉,我从2011年开始使用一直到现在,目前所有的服务器上都部署着CSF来管理iptables

而且我也个人建议:服务器一定要配置好防火墙,如果你对iptables不熟悉,那么简简单单的学会CSF就可以了.

CSF支持的系统:
RedHat Enterprise v6 to v7
CentOS v6 to v7
CloudLinux v6 to v7
Fedora v30
*openSUSE v10, v11, v12
*Debian v8 - v10
*Ubuntu v18 to v19
*Slackware v12


就算debian/ubuntu默认的防火墙改成了ufw也没有, CSF会帮你设置成iptables

以下的内容适用于REHL/Centos, Debian/Ubuntu

CSF 安装:
首先安装CSF需要的组件:
Centos下:
yum install perl-libwww-perl.noarch perl-LWP-Protocol-https.noarc bind-utils perl-Crypt-SSLeay perl-Net-SSLeay perl-LWP-Protocol-https unzip -y


Debian/Ubuntu下:
apt-get install libwww-perl liblwp-protocol-https-perl


然后就可以正常安装CSF了,参照CSF的官方文档就可以:
cd ~
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
cd ~
简单的配置CSF:
CSF的默认配置文件位于/etc/csf,在这个文件夹下需要重点关注这么几个文件:
csf.conf:CSF的默认配置文件,包括打开关闭哪些端口等等,如果你想好好管理整个服务器的安全性,那么我建议你好好的完整读一下。如果没有时间的话,可以用我下面的一键包
csf.allow: 需要白名单的IP. 有的人需要设置一些白名单的IP, 这些IP可以忽略csf.conf的设置,访问所有的服务
csf.redirect: CSF用来管理iptables的流量中转的设置,也是我们的主要编辑的地方.

一键配置csf.conf:
默认的csf.conf的配置其实已经足够了,但是我还是建议你好好阅读一下csf.conf
如果你实在懒的看的话,可以使用我写的一键包cd ~
wget --no-check-certificate -O csfinit.sh https://raw.githubusercontent.com/advertcn/public/master/csfinit.sh
chmod +x csfinit.sh
./csfinit.sh
cd ~

下面开始最精彩的部分: 流量中转。我们只需要简单的编辑csf.redirect就可以。我们先来看看csf.redirect自带的教程:

# The following are the allowed redirection formats
#
# DNAT (redirect from one IP address to a different one):
# IPx|*|IPy|*|tcp/udp          - To IPx redirects to IPy
# IPx|portA|IPy|portB|tcp/udp- To IPx to portA redirects to IPy portB
#
# DNAT examples:
# 192.168.254.62|*|10.0.0.1|*|tcp
# 192.168.254.62|666|10.0.0.1|25|tcp
#
# REDIRECT (redirect from port to a different one):
# IPx|portA|*|portB|tcp/udp    - To IPx to portA redirects to portB
# *|portA|*|portB|tcp/udp      - To portA redirects to portB
#
# REDIRECT examples:
# 192.168.254.60|666|*|25|tcp
# *|666|*|25|tcp


其实这个已经写的很简单明白了. 下面我们来举例说明:
假设我们的中转服务器的IP是149.129.84.7, 使用的中转端口是2288,我们的远程tracker服务器(或者是"留学"服务器)的IP是165.227.29.84, SSH或者“留学”的端口是8822。
也就是说我们想把发往149.129.84.7:2288的流量转发到165.227.29.84的8822端口,那么我们在csf.redirect的最下方添加这么一行就可以了:
149.129.84.7|2288|165.227.29.84|8822|tcp


如下面所示:


这样一行简单的配置,就把流量中转设置好了

这里需要注意的话,大型的cloud服务商,比如说AWS,Azure,GCP,阿里云等等,机器上的IP都是内网IP. 内网IP发出的包在路由器上才会被修改成公网IP. 因为从cloud上,包是从内网IP发出来的。因此在这些服务商上做流量中转,源IP要写成内网IP。举个例子:


这里阿里云香港的机器,ip add 命令显示此服务器的内网IP为172.17.30.224, 从这个IP发出的包在路由器上才会修改成公网IP
因此在csf.redirect里面我们需要这样写:
172.17.30.224|2288|165.227.29.84|8822|tcp




其实很简单,使用"ip add"命令,机器上绑定的是哪个IP,就用哪个IP

在最后,我们需要让csf 使用新的配置, 只需要运行csf -r命令(r 这里是reload 的简称)



很简单,这样就完成一个流量转发.


都有哪些玩法:
1) 利用中转服务器中转我们常用的SSH, 3389以及登录tracker 的HTTP/HTTPS服务
2)留学中转。找一个对国际访问好的服务商来安装留学软件, 比如说vultr,digitalocean, linode, softlayer之类的,然后用中转服务器来中转。你可以只在一个对国际访问好的服务商安装留学软件,但是你可以有很多个中转服务器. 很多大型的留学服务商都是干的。

哪些服务商适合用来做中转cloud?
目前晚高峰阶段能够保证不炸的只有高QoS的CN2 GIA了,不知道什么是CN2 GIA的可以百度下.

南方的同学建议阿里云或者其他的CN2 GIA(比如腾讯云,华为云,rackspace HK等等):
内部监控图:
https://www.icmp.cc/?target=Aliyun.Aliyun_HK

虽然阿里云的香港和新加坡都是CN2 GIA,但是QoS比较低,晚高峰时段跳ping十分严重,即使如此,也是目前对于身处南方的同学的首选,毕竟离的近。就算再跳ping,ping值也不会太高,只要不丢包就可以了
如果只是为了日常管理服务器登录SSH等等,完全可以搞按流量付费的,降低成本。
如果网络要求比较高(比如说数据库服务或者高要求的网站等等),可以使用krypt的新加坡的CN2GIA,QoS级别比较高,比阿里的QoS高很多,基本不丢包,不跳ping
内部监控图:
https://www.icmp.cc/?target=Krypt.Krypt_SG_CN2


中部和北方的同学,可以选择瓦工的DC6 和DC9,三网CN2GIA, QoS比较高. 电信的同学也可以考虑Krypt 的iON洛杉矶
内部监控图:
https://www.icmp.cc/?target=Krypt.Krypt_LA_CN2GIA

当然了,我只是列出来了我熟悉的CN2GIA服务商。你可以去AdvertCN的姐妹站
https://www.icmp.cc
查看主流的cloud或者dedicated服务商对国内的线路的影响









suyee 发表于 2020-3-9 19:54:19

前排支持河马的技术贴,造福论坛会员

imam886 发表于 2020-3-9 20:12:22

好文章,动手操作一下

枸夭 发表于 2020-3-9 23:41:57

点赞 点赞 点赞

残缺的人生 发表于 2020-3-10 18:03:52

frp也挺好用

newmobi 发表于 2020-3-12 12:26:52

技术贴,支持一下

affiliateberry 发表于 2020-4-24 19:22:54

看不懂! 先回帖

gooweel 发表于 2020-6-17 10:43:59

支持 点赞:lol

小白龙 发表于 2020-8-21 19:16:59

hap!r!o!x!y应该是只支持TCP吧

中转真是太好用了:lol

河小马 发表于 2020-8-21 21:48:00

小白龙 发表于 2020-8-21 19:16
hap!r!o!x!y应该是只支持TCP吧

中转真是太好用了



其实用熟了,iptables 比较方便和简单:lol

billwong 发表于 2021-12-17 14:43:45

初看不懂文中意,再看已是文中人。

感谢河马:P

活剑谱 发表于 2022-9-30 15:10:35

我就佩服搞技术的大佬!

proxy888 发表于 2023-9-15 10:15:46

看不懂! 先回帖

agan 发表于 2023-9-17 15:44:13

入圈不久,问一下“留学”是啥意思啊:)

proxy888 发表于 2023-11-6 14:53:59

留学不是得出国嘛;P
页: [1] 2
查看完整版本: 流量中转教程(一) - iptables