设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 3316|回复: 1

Linux 单台服务器多IP出口出网 均衡负载 爬虫CDN端口多IP回源的方法 nth模块 iptables数据流向图

[复制链接]
 成长值: 339

签到天数: 4738 天

[LV.Master]伴坛终老

发表于 2018/2/5 03:15 | 显示全部楼层 |阅读模式 |Google Chrome 64.0.3282.119|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
环境:服务器配有:主ip:192.168.1.195与192.168.1.196/197/198/199 四个额外扩展ip

希望:实现对外发送请求时,对方看到我的出口ip每次都是不一样的,共五个ip同时使用轮训负载作为出口IP

方案:iptables的nth模块
注意设置好出网端口和网卡eth0,例如cdn一般使用80端口(下方使用的是25端口,有需要自己改),主IP不知道如何排除195使用,仅用扩展IP,下面教程会同时使用五个IP一起轮训负载。
  1. /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 4 --packet 0 -j SNAT --to-source 192.168.1.196
  2. /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 4 --packet 1 -j SNAT --to-source 192.168.1.197
  3. /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 4 --packet 2 -j SNAT --to-source 192.168.1.198
  4. /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp --dport 25 -o eth0 -m statistic --mode nth --every 4 --packet 3 -j SNAT --to-source 192.168.1.199
复制代码


如果使用80端口出向负载的话,可以用这个命令来尝试
  1. curl myip.ipip.net
复制代码


效果图
QQ图片20180205032921.png

参考:netfilter的数据包流向图
nfk-traversal.png

参考:iptables的数据包流向图
213457974.gif

这个就是有个毛病
主ip一起出去了。。
可能影响,被引起流量攻击,引起DNS无法解析,45S超时,被运营商黑洞导致部分程序响应失败等问题。

如果提示,代表你的vps为openvz虚拟化,是不支持的,可以先尝试联系工单客服打开,沟通不行的话,需要更换xen或者kvm等更高级虚拟化vps服务器。
iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
之后在尝试命令,OJBK,可以用了
我这台openvz是两个IP地址的,直接命令一键回源端口80和443端口都自动走均很负载,every改成2即可,主IP是.12,写一条.13足够
  1. /sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp -m multiport --dport 80,443 -o venet0 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source 192.157.201.13
复制代码

要下次开机后永久生效记得保存下
  1. service iptables save
  2. chkconfig iptables on
复制代码


打印已经保存的nat规则
  1. cat /etc/sysconfig/iptables | grep 'A POSTROUTING'
复制代码



openvz服务器购买注册地址:https://www.budgetvm.com/account/aff.php?aff=1184


部分参考:http://www.run-debug.com/?p=508


2020年4月4日20:13:49
补充,后期了解到,every代表次数,,比如服务器4个IP,指定2个IP走端口就写--every 1 --every 2两行,packet貌似是几个数据包执行一次?packet值所以应该始终为0,所以有时候会跳到主IP。。。或者多个IP只写一行的情况,但是因为every用的2也是跳主IP就是这个毛病

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 66 天

[LV.6]常住居民II

发表于 2021/8/14 23:05 | 显示全部楼层 |Google Chrome 92.0.4515.131|Windows 10
补充:如果不开放端口会导致kangle 无法打开
还有下面红色的是网卡名称别搞错了
/sbin/iptables -t nat -I POSTROUTING -m state --state NEW -p tcp -m multiport --dport 80,443 -o venet0 -m statistic --mode nth --every 2 --packet 0 -j SNAT --to-source 192.157.201.13
iptables -P INPUT ACCEPT   
iptables -P OUTPUT ACCEPT  
service iptables save
附带一个出错的
centos 7 中没有iptables 和service iptables save 指令使用失败问题解决方案
1.任意运行一条iptables防火墙规则配置命令:

iptables -P OUTPUT ACCEPT  

2.对iptables服务进行保存:

service iptables save  

如果上述命令执行失败报出:The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.

解决方法:
systemctl stop firewalld 关闭防火墙
yum install iptables-services 安装或更新服务
再使用systemctl enable iptables 启动iptables
最后 systemctl start iptables 打开iptables

再执行service iptables save

3.重启iptables服务:

service iptables restart

执行完毕之后/etc/syscofig/iptables文件就有了

再附加一个规则自定义防火墙端口
iptables -F /* 清除所有规则 */
iptables -A INPUT -p tcp --dport 22 -j ACCEPT /*允许包从22端口进入*/
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT /*允许从22端口进入的包返回*/
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT /* 域名解析端口,一般不开 */
iptables -A INPUT -p udp --sport 53 -j ACCEPT /* 域名解析端口,一般不开 */
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT /*允许本机访问本机*/
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT /*允许所有IP访问80端口*/
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables /*保存配置*/
iptables -L /* 显示iptables列表 */
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/12/24 09:39 , Processed in 0.115831 second(s), 24 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表