为啥要在CentOS上搞全局代理路由
很多做数据抓取或者批量业务的朋友,可能都遇到过IP被限制的尴尬。单机单IP操作,目标网站稍微敏感点,可能就把你给封了。这时候,如果能通过代理IP的形式,让整个服务器的流量都从代理池子里走,那很多问题就迎刃而解了。CentOS系统稳定,很多服务器都是这个环境,在上面配置全局路由,意味着所有从这台机器出去的请求,都能自动走代理,省去了一个个应用去设置的麻烦,特别适合跑脚本、做采集这些活儿。
实现这个目标,核心就是利用iptables和redsocks这类工具,把服务器的出口流量透明地转发到我们的代理服务器上。这里要强调,我们说的代理IP,是指那些能提供稳定、高效网络中转服务的IP资源,比如全民HTTP提供的各种长效静态IP或隧道代理IP,可不是干别的用的。
准备工作:检查环境和获取代理
在开始动手之前,你得确保你的CentOS服务器能正常联网,拥有root权限。然后,最关键的一步是搞到靠谱的代理IP。这里我推荐用全民HTTP的服务,他们家提供多种类型的国内代理IP,像独享代理IP、长效IP这些,质量比较有保障,响应速度快,也不容易掉线。你根据业务需要,选择HTTP或SOCKS5协议的代理产品就行。
拿到代理后,记下这些关键信息,后面配置要用到:
- 代理服务器地址(比如:123.123.123.123)
- 代理端口(比如:8080)
- 代理协议(HTTP 或 SOCKS5)
- 如果有用户名密码认证,也一并记好
安装必要的软件包
咱们通过yum来安装几个核心的软件。打开终端,用root或者sudo执行下面命令:
yum install -y iptables redsocks
这里,iptables是Linux系统自带的防火墙和包过滤工具,我们用它来做流量转发规则。redsocks是个好东西,它能把TCP连接重定向到SOCKS或HTTP代理,正好符合我们的需求。如果yum源里找不到redsocks,可能需要先配置EPEL源,这个网上教程很多,搜一下就行。
配置redsocks代理转换
安装完redsocks后,需要修改它的配置文件,告诉它你的代理服务器信息。配置文件一般是在/etc/redsocks.conf。
用vi或nano打开这个文件,找到redsocks部分(如果是HTTP代理就找redsocks-http),修改成下面这样(以HTTP代理为例):
redsocks {
local_ip = 0.0.0.0;
local_port = 12345;
ip = 你的代理服务器IP;
port = 你的代理端口;
type = http-connect;
login = "你的用户名";
password = "你的密码";
}
简单解释下:
- local_ip和local_port是redsocks在本地监听的地址和端口,等下iptables会把流量转到这。
- ip和port填你从全民HTTP那边获取的代理IP地址和端口。
- type根据代理协议类型填,http-connect 或者 socks5。
- 如果代理需要认证,就填上login和password。
改完保存,然后启动redsocks服务并设置开机自启:
systemctl start redsocks
systemctl enable redsocks
设置iptables流量转发规则
接下来是重头戏,配置iptables,把服务器的出口流量劫持到redsocks监听的端口上。注意,操作iptables需要root权限,而且规则弄错了可能导致网络断掉,最好在本地操作或者有备用连接。
假设我们不想让SSH连接的流量也走代理(不然你自己可能就连不上服务器了),那么先排除SSH端口(默认22)。然后,我们把所有其他出口的TCP流量都转发到redsocks的本地监听端口(上面例子里的12345)。
执行下面一系列命令:
iptables -t nat -N REDSOCKS 新建一个名叫REDSOCKS的链
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN 排除一些内网地址
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345 剩下的TCP流量重定向到12345端口
iptables -t nat -A OUTPUT -p tcp --dport 22 -j RETURN 排除SSH端口
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS 其他OUTPUT的TCP流量跳转到REDSOCKS链
这一套组合拳下来,基本上就把服务器的TCP出口流量安排明白了,都乖乖地走代理了。
验证全局代理是否生效
配置完了,总得验验货是不是?最简单的方法,就是在服务器上curl一下能显示你公网IP的网站或者服务。
比如:curl http://httpbin.org/ip
如果返回的IP地址是你设置的代理服务器的IP,而不是你服务器真实的公网IP,那就恭喜你,配置成功了!所有从这台机器出去的TCP请求,现在都是通过全民HTTP的代理IP在访问了,不管是wget、curl还是你跑的Python爬虫脚本。
常见问题QA
Q1: 配置完之后,服务器自己都上不了网了咋办?
A: 大概率是iptables规则设置得太狠了,把一些必要的内网通信或者DNS查询也给转发了。检查一下排除规则(RETURN那些条)是不是写对了,特别是DNS用的53端口,如果是UDP协议可能没处理,可以考虑把UDP也排除或者单独处理DNS。
Q2: 我想让某些程序或者IP不走代理,怎么设置?
A: 利用iptables的规则顺序。在跳转到REDSOCKS链之前,先用`-j RETURN`规则把你不想走代理的目标IP或端口排除掉。比如要排除IP 1.2.3.4,就在OUTPUT链里加一条:`iptables -t nat -A OUTPUT -d 1.2.3.4 -j RETURN`。
Q3: 为什么速度感觉有点慢?
A: 代理速度受多方面影响。一是代理服务器本身的网络质量和负载,选择全民HTTP这种提供高速稳定代理服务的商家很重要,他们的长效静态IP和独享IP线路通常更好。二是网络延迟,尽量选择地理位置上离你目标网站或者你服务器较近的代理节点。
Q4: 重启服务器后代理规则没了?
A: 因为你用iptables添加的规则是临时的。需要把当前配置的iptables规则保存下来。CentOS 7+可以用`iptables-save > /etc/sysconfig/iptables`命令保存(如果用了firewalld可能更复杂点),并确保iptables服务开机自启。
在CentOS上配置全局代理路由,其实没啥黑科技,核心就是iptables加redsocks的组合。这套方案能让你服务器的网络请求通过代理IP的形式发出去,非常适合需要大量IP操作的后台业务。关键是代理IP要稳,不然三天两头断线换IP也够头疼的。再次安利一下全民HTTP,他们家静态IP、长效IP还有隧道IP种类多,覆盖广,响应快,能省不少心。好了,教程就到这里,有啥问题欢迎交流!


