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算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。