拓扑图如下:
环境:5台主机
一台:客户端 eth0 :仅主机 192.168.0.6/24 GW:192.168.0.200
一台:router
eth0:NAT:10.0.0.200/24
eth1:仅主机 192.168.0.200/24
启用IP_FORWARD
一台:LVS
eth0:NAT:DIP:10.0.0.8/24 GW:10.0.0.200
两台RS:
RS1:eth0:NAT:10.0.0.7/24 GW:10.0.0.200
RS2:eth0:NAT:10.0.0.17/24 GW:10.0.0.200
#所有主机禁用iptables和selinux #internet主机环境 [root@internet ~]#hostname internet [root@internet ~]#hostname -I 192.168.0.6 [root@internet ~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.200 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 #路由器的网络配置 [root@router ~]#echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf [root@router ~]#sysctl -p [root@router network-scripts]#cat ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.200 PREFIX=24 ONBOOT=yes MACADDR=00:0C:29:DD:D9:E2 [root@router network-scripts]#cat ifcfg-eth1 DEVICE=eth1 NAME=eth1 BOOTPROTO=static IPADDR=192.168.0.200 PREFIX=24 ONBOOT=yes MACADDR=00:0C:29:DD:D9:EC #RS1的网络配置 [root@rs1 ~]#hostname rs1 [root@rs1 ~]#hostname -I 10.0.0.7 [root@rs1 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.7 PREFIX=24 GATEWAY=10.0.0.200 DNS1=223.6.6.6 DNS2=180.76.76.76 ONBOOT=yes [root@rs1 ~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.200 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [root@rs1 ~]#yum install -y httpd [root@rs1 ~]#systemctl enable --now httpd [root@rs1 ~]#hostname -I > /var/www/html/index.html [root@rs1 ~]#ping 192.168.0.6 -c3 PING 192.168.0.6 (192.168.0.6) 56(84) bytes of data. 64 bytes from 192.168.0.6: icmp_seq=1 ttl=128 time=0.817 ms 64 bytes from 192.168.0.6: icmp_seq=2 ttl=128 time=0.493 ms 64 bytes from 192.168.0.6: icmp_seq=3 ttl=128 time=0.688 ms [root@rs1 ~]#curl 10.0.0.7 10.0.0.7 #RS2 的网络配置 [root@rs2 ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=static IPADDR=10.0.0.17 PREFIX=24 GATEWAY=10.0.0.200 ONBOOT=yes DNS1=223.6.6.6 DNS2=180.76.76.76 MACADDR=00:0C:29:47:74:99 [root@rs2 ~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.200 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [root@rs2 ~]#yum -y install httpd [root@rs2 ~]#systemctl enable --now httpd [root@rs2 ~]#hostname -I > /var/www/html/index.html [root@rs2 ~]#curl 10.0.0.17 10.0.0.17 [root@rs2 ~]#ping 192.168.0.6 -c1 PING 192.168.0.6 (192.168.0.6) 56(84) bytes of data. 64 bytes from 192.168.0.6: icmp_seq=1 ttl=128 time=1.32 ms [root@rs2 ~]#curl 10.0.0.17 10.0.0.17 #LVS的网络配置 [root@lvs ~]#hostname lvs [root@lvs ~]#hostname -I 10.0.0.8 [root@lvs ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes IPADDR=10.0.0.8 PREFIX=24 GATEWAY=10.0.0.200 DNS1=223.6.6.6 DNS2=180.76.76.76 [root@lvs ~]#route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.200 0.0.0.0 UG 100 0 0 eth0 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 [root@lvs ~]#ping 192.168.0.6 -c1 PING 192.168.0.6 (192.168.0.6) 56(84) bytes of data. 64 bytes from 192.168.0.6: icmp_seq=1 ttl=63 time=0.869 ms
#RS1的IPVS配置 [root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs1 ~]#ifconfig lo:1 10.0.0.100/32 [root@rs1 ~]#ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 10.0.0.100/0 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:d6:9a:19 brd ff:ff:ff:ff:ff:ff inet 10.0.0.7/24 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fed6:9a19/64 scope link valid_lft forever preferred_lft forever #RS2的IPVS配置 [root@rs2 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@rs2 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@rs2 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@rs2 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs2 ~]#ifconfig lo:1 10.0.0.100/32 [root@rs2 ~]#ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 10.0.0.100/0 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:47:74:99 brd ff:ff:ff:ff:ff:ff inet 10.0.0.17/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe47:7499/64 scope link valid_lft forever preferred_lft forever
#在LVS上添加VIP [root@lvs ~]#ifconfig lo:1 10.0.0.100/32 [root@lvs ~]#ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 10.0.0.100/0 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:95:ad:91 brd ff:ff:ff:ff:ff:ff inet 10.0.0.8/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe95:ad91/64 scope link valid_lft forever preferred_lft forever #实现LVS 规则 [root@lvs ~]#dnf -y install ipvsadm [root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr #A:在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器 [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7:80 -g #a:在内核虚拟服务器表的一条记录里添加一条新的真实服务器 [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17:80 -g #g,–gatewayin:指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式) [root@lvs ~]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.17:80 Route 1 0 0
4.测试访问
[root@internet ~]#curl 10.0.0.100 10.0.0.17 [root@internet ~]#curl 10.0.0.100 10.0.0.7