实验环境准备:
node1:CentOS6.5 作为dr转发主机
单网卡:eth0上配置DIP:172.16.18.1 eth0:0上配置VIP:172.16.18.2
ipvsadm版本 :ipvsadm-1.26-2.el6
node2:CentOS6.5
单网卡:eth0上配置RIP1:172.16.18.10 lo:0上配置VIP:172.16.18.2
node3:CentOS6.5
单网卡:eth0上配置RIP2:172.16.18.20 lo:0上配置VIP:172.16.18.2
实验模型:dr
dr类型的特性:
1、保证前端路由将目标地址为VIP的报文统统发往Director,而不能是RS;
解决方案:
(1) 静态地址绑定:在前端路由器上操作 。问题:未必有路由操作权限
(2) aprtables :在防火墙上设置VIP的所有响应都无法出来。
(3) 修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求;
2、RS可以使用私有地址;但也可以使用公网地址,此时可通过互联网通过RIP对其直接访问;
3、RS跟Director必须在同一物理网络中;
4、请求报文经由Director,但响应报文必须不能经过Director;
5、不支持端口映射;
6、RS可以是大多数常见的OS;
7、RS的网关绝不允许指向DIP;
本实验模型采用的就是第三中解决方案。修改内核参数,将VIP配置在lo的别名上。eth0接受到的数据响应强制提交给lo,再由lo转发给eth0出去。
内核参数:
arp_announce :对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式0
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
实验内容:
配置node1节点:作为
[root@node1 ~]# ifconfig eth0 172.16.18.1/16 #配置DIP地址。
[root@node1 ~]# ifconfig eth0:0 172.16.18.2/16 #配置VIP地址
配置node2节点:
[root@node2 ~]# ifconfig eth0 172.16.18.10/16 #配置RIP地址
配置web服务:
为其添加一个页面。
[root@node2 ~]# vim /var/www/html/index.html
<h1>node2.aolens.com</h1>
service httpd start
[root@node2 ~]# curl http://172.16.18.10 #访问OK
<h1>node2.aolens.com</h1>
配置node2 的内核参数。
在内核中限定只要响应不是从eth0来的就不予以响应,限制eth0只把eth0自己的地址通告给网络,而不是将所有拥有的地址通告给网络。
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node2 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@node2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
再来配置lo:0上的VIP地址。
[root@node2 ~]# ifconfig lo:0 172.16.18.2 netmask 255.255.255.255 broadcast 172.16.18.2 up
配置node3:
[root@node3 ~]# ifconfig eth0 172.16.18.20/16 #配置RIP地址
[root@node2 ~]# vim /var/www/html/index.html
<h1>node3.aolens.com</h1>
service httpd start
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@node3 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
[root@node3 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
再来配置lo:0上的VIP地址。
[root@node3 ~]# ifconfig lo:0 172.16.18.2 netmask 255.255.255.255 broadcast 172.16.18.2 up
[root@node3 ~]# route add -host 172.16.18.2 dev lo:0 #添加路由指定
下来我们来配置node1上的ipvs规则。
[root@node1 ~]# ipvsadm -A -t 172.16.18.2:80 -s rr
[root@node1 ~]# ipvsadm -a -t 172.16.18.2:80 -r 172.16.18.10 -w 1 -g
[root@node1 ~]# ipvsadm -a -t 172.16.18.2:80 -r 172.16.18.20 -w 1 -g
访问172.16.18.2得到返回结果。
模型2:
如果RIP和VIP不属于同一网段
实验环境:
node1:CentOS6.5 作为dr转发主机
单网卡:eth0上配置DIP:192.168.1.9 eth0:0上配置VIP:172.16.18.2
node2:CentOS6.5
单网卡:eth0上配置RIP1:192.168.1.10 lo:0上配置VIP:172.16.18.2
node3:CentOS6.5
单网卡:eth0上配置RIP2:192.168.1.20 lo:0上配置VIP:172.16.18.2
实验内容:
在node1上配置:
ifconfig eth0 192.168.1.9/24 #DIP
ifconfig eth0:0 172.16.18.2/16 #VIP
配置node2 :
ifconfig eth0 192.168.1.10/24 #RIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.18.2 netmask 255.255.255.255 broadcast 172.16.18.2 up
route add -host 172.16.18.2 dev lo:0 #添加路由指定
route add default gw 192.168.1.1 #指向网关
配置node3 :
ifconfig eth0 192.168.1.20/24 #RIP
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.18.2 netmask 255.255.255.255 broadcast 172.16.18.2 up
route add -host 172.16.18.2 dev lo:0 #添加路由指定
route add default gw 192.168.1.1 #指向网关
下来我们来配置node1上的ipvs规则。
ipvsadm -A -t 172.16.18.2:80 -s rr
ipvsadm -a -t 172.16.18.2:80 -r 192.168.1.10 -w 1 -g
ipvsadm -a -t 172.16.18.2:80 -r 192.168.1.20 -w 1 -g
访问结果: