1、NAT原理总结

NAT技术是将报文中的源地址或者目的地址更换为指定地址或者指定地址池的一种技术,可以有效的隐藏内部地址,只将可以公开的public address公布出去。
根据修改的地址不同,可分为SNAT和DNAT
SNAT
修改报文中的源地址,一般适用于私网内部访问公网
DNAT
修改报文中的目的地址,一般适用于私网提供服务给外部网络访问
根据地址转换的不同,可分为静态地址转换,动态地址转换,以及PAT(多路复用)
静态地址转换是一个私网地址对一个公网地址
动态地址转换是一个私网地址对一个公网地址池,可以指定一个地址池转换,每次转换的地址可以不相同。
PAT是在NAT的基础上加上了端口,可以让一个公网地址的端口对应不同的私网地址,可以有效节约公网资源。

2、iptables实现SNAT和DNAT,并对规则持久保存。

开启转发功能
[root@zuoye4 network-scripts]# vi /etc/sysctl.conf 
[root@zuoye4 network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
SNAT配置
[root@zuoye4 network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.120.0/24 -d 10.0.0.100 -j SNAT --to-source 10.0.0.103
DNAT配置
[root@zuoye4 ~]# iptables -t nat -A PREROUTING -d 192.168.120.100 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80

规则永久保存
[root@zuoye4 ~]# mkdir -p /iptables/rule/
[root@zuoye4 ~]# iptables-save > /iptables/rule/0908.rule
[root@zuoye4 ~]# cat /iptables/rule/0908.rule 
# Generated by iptables-save v1.4.21 on Wed Sep  8 14:16:48 2021
*nat
:PREROUTING ACCEPT [8:1346]
:INPUT ACCEPT [7:1286]
:OUTPUT ACCEPT [4:240]
:POSTROUTING ACCEPT [4:240]
-A PREROUTING -d 192.168.120.100/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80
-A POSTROUTING -s 192.168.120.0/24 -d 10.0.0.100/32 -j SNAT --to-source 10.0.0.103
COMMIT
# Completed on Wed Sep  8 14:16:48 2021
加载规则
[root@zuoye4 ~]# iptables-restore < /iptables/rule/0908.rule
SNAT测试
[root@zuoye3 ~]# curl 10.0.0.100
test
[root@zuoye3 ~]# curl 10.0.0.100
test
[root@zuoye1 ~]# tail /var/log/httpd/access_log 
192.168.120.102 - - [08/Sep/2021:14:08:04 +0800] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0"
10.0.0.103 - - [08/Sep/2021:14:09:20 +0800] "GET / HTTP/1.1" 200 5 "-" "curl/7.29.0
DNAT测试
[root@zuoye3 ~]# curl 10.0.0.100
test
[root@zuoye3 ~]# curl 192.168.120.100
test

3、LVS调度算法总结

LVS调度算法
静态方法
仅根据算法本身进行调度
1、RR:roundrobin,轮询,将请求依次发送到每个服务器
2、WRR:Weighted RR,加权轮询,根据权重分配请求
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度 
1、LC:least connections 适用于长连接应用,始终往链接数最少的真实服务器上调度
2、WLC:Weighted LC,默认调度方法
3、SED:Shortest Expection Delay,初始连接高权重优先
4、NQ:Never Queue,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS
FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度
OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实
服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。
一个可用的真实服务器需要同时满足以下条件:
未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值
其权重值不为零