nat模式原理中的要点:
请求到达调度器,ipvs对比数据包请求是否为集群服务,若是,修改数据包的目标ip地址为后端服务器ip,然后将数据包发至POSTROUTING链。此时报文的源ip为cip(客户端),目标ip为Rip(后端真实)
返回时:
调度器将源ip修改为自己的vip,然后相应给客户端。此时报文的源ip为vip,目标ip为cip。
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
ipv6:
echo 0 > /proc/sys/net/ipv6/conf/all/accept_redirects
echo 0 > /proc/sys/net/ipv6/conf/default/accept_redirects
echo 0 > /proc/sys/net/ipv6/conf/eth0/accept_redirects
永久生效:
在/etc/sysctl.conf中增加,或者修改:
net.ipv4.conf.eth0.send_redirects= 0
net.ipv4.conf.eth1.send_redirects= 0
net.ipv4.conf.lo.send_redirects= 0
net.ipv4.conf.default.send_redirects= 0
net.ipv4.conf.all.send_redirects= 0
ipv6:
net.ipv4.conf.eth0.accept_redirects= 0
net.ipv4.conf.eth1.accept_redirects= 0
net.ipv4.conf.lo.accept_redirects= 0
net.ipv4.conf.default.accept_redirects= 0
net.ipv4.conf.all.accept_redirects= 0
执行:
sysctl -p
立即生效。
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
使用MASQUERADE可以不用指定snat的ip了,它会随着eth0的出口的ip的变化,自动读取eth0变化后的ip,做出相应调整。
ipvsadm -C //清除内核虚拟服务器中的所有记录
ipvsadm -A //在内核的虚拟服务器中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
ipvsadm -a //在内核虚拟服务器表的一条记录里添加一条新的真实服务器
ipvsadm -t //说明提供的是tcp的服务 [vip:port]
ipvsadm -u //提供的是udp的服务 [vip:port]
ipvsadm -r //真实的服务器[Real-server:port]
-m //指定lvs的工作模式为nat模式
-w //真实服务器的权值
-s //使用调度算法,默认wlc
-g //指定lvs的工作模式为直接路由模式,Dr模式
ifconfig eth0 $vip broadcast $vip netmask 255.255.255.255
在lvs中,虚拟ip地址与网络接口地址大大不同,这点需要特别注意。虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255,因为有若干个机器要使用同一个IP地址,用本身做广播地址和把子网掩码设置成4个255就不会造成IP地址冲突了,否则lvs将不能正常访问请求。
当子网掩码是255.255.255.255时,表示这个地址为受限广播,是不被路由发送,但是会送到相同物理网段上的所有主机,用于主机配置过程中ip数据包的目的地址。
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
以上是临时性的。先说参数意义:
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否返回arp响应。
arp_ignore主要取值有0,1,2:
0:响应任意网卡上接收到的对本机ip地址的arp请求(包括lo换回地址)
1:只响应目的IP地址在接收网卡上的本地地址的arp请求:
2:只响应目的地址为接收网卡上的本地地址的arp请求,并且arp请求的源ip必须和接收网卡同网段。
arp_announce:
控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源Ip:
2:当arp_announce参数配置为2时,eth2网卡发起arp请求时,源IP地址会选择eth2网卡自身的IP地址:
永久生效:
编辑配置文件:
vim /etc/sysctl.conf
增加:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
立即生效:
sysctl -p
lvs可以实现负载均衡,但是不能够实现健康检查,当一个rs出现故障,lvs仍会发送数据包给它,但是有了keepalived,keepalived会进行健康检查,还可以解决lvs调度器单点故障的问题,实现高可用。
配置文件可以看我写的第一篇:
https://blog.csdn.net/qq_37369726/article/details/91127148