1、NAT原理总结
NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链
NAT作用:修改请求报文/响应报文的源/目标IP
NAT类型:
- SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装。方法,修改请求报文源IP,将源IP修改成能上外网的IP,实现本地主机访问外部网络。例如路由器
- DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),但隐藏真实IP。方法,修改请求报文:修改目标IP,将目标IP修改成内网服务器IP。
- PNAT: port nat,端口和IP都进行修改
2、iptables实现SNAT和DNAT,并对规则持久保存。
实现SNAT和DNAT都需要开启内核数据转发功能
[root@firewall ~]#cat /etc/sysctl.conf
net.ipv4.ip_forward=1
SNAT使用方法
SNAT:基于nat表的target,适用于固定的公网IP
SNAT选项:
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
SNAT格式:
iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j SNAT --to-source ExtIP
范例:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.126.83
DNAT使用方法
DNAT:nat表的target,适用于端口映射,即可重定向到本机,也可以支持重定向至不同主机的不同端口,但不支持多目标,即不支持负载均衡功能
DNAT选项:
--to-destination [ipaddr[-ipaddr]][:port[-port]]
DNAT 格式:
iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --todestination InterSeverIP[:PORT]
范例:
iptables -t nat -A PREROUTING -d 192.168.126.83 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.84:80
iptables规则持久保存:
CentOS 7,8
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
#将规则覆盖保存至/etc/sysconfig/iptables文件中
service iptables save
加载规则
1.CentOS 7,8 重新载入预存规则文件中规则:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
iptables-restore选项
-n, --noflush:不清除原有规则
-t, --test:仅分析生成规则集,但不提交
2.CentOS 6:
service iptables restart #会自动从/etc/sysconfig/iptables 重新载入规则
开机自动重载规则
1.用脚本保存各iptables命令;让此脚本开机后自动运行
/etc/rc.d/rc.local文件中添加脚本路径 /PATH/TO/SOME_SCRIPT_FILE
用规则文件保存各规则,开机时自动载入此规则文件中的规则
在/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
2.定义Unit File, CentOS 7,8 可以安装 iptables-services 实现iptables.service
范例: CentOS 7,8 使用 iptables-services
[root@centos8 ~]#yum -y install iptables-services
[root@centos8 ~]#cp /etc/sysconfig/iptables{,.bak}
#保存现在的规则到文件中方法1
[root@centos8 ~]#/usr/libexec/iptables/iptables.init save
#保存现在的规则到文件中方法2
iptables-save > /etc/sysconfig/iptables
#开机启动
[root@centos8 ~]#systemctl enable iptables.service
3、LVS调度算法总结
静态算法:经根据算法本身进行调度,不关注真是服务器负载状态
- RR:roundrobin(轮询):将请求依次分配到每个真是服务器。
- WRR:Weighted RR(带权重轮询):根据每个真实服务器到权重占总权重到比例来分配请求。
- SH:Source Hashing(源地址哈希调度),实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。
- DH:Destination Hashing;(目标地址哈希调度),第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态算法:主要根据每真实服务器当前的负载状态及调度算法进行调度,负载值(Overhead)较小的真是服务器将被调度。
- LC:least connections (最小链接调度)适用于长连接应用,始终往链接数最少的真实服务器上调度
Overhead=activeconns*256+inactiveconns
负载=活动链接数*256+非活动链接
- WLC:Weighted LC(带权重最小链接调度)默认调度方法,
Overhead=(activeconns*256+inactiveconns)/weight
负载=(活动链接数*256+非活动链接)/权重
- SED(初始链接权重优先)
Overhead=(activeconns+1)*256/weight
负载=(活动链接+1)*256/权重
- NQ:Never Queue,第一轮均匀分配,后续SED
- LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
内核版本 4.15 版本后新增调度算法:
- FO(加权故障转移)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志位)的且权重最高的真实服务器,进行调度。FO因为有标记位,可以逐步升级服务器
- OVF(连接溢出)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。