LVS/TUN的连接调度和管理与 LVS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

以上介绍来自于互联网

看一下我们的测试小案例: 

tun_server:
eth0:192.168.1.241
eth1: 10.0.2.20
vip:192.168.1.204
 
real_server1:
eth0:192.168.1.229
eth1:10.0.2.22
 
real_server2:
eth0:192.168.1.224
eth1:10.0.2.23
 

对vip访问通过点对点的方式传递给realserver,然后由realserver直接返回给客户端

tun_server配置:

XML/HTML代码
  1. # cat lvs_tun.sh   
  2. #!/bin/bash  
  3. vip=192.168.1.204  
  4. RS1=192.168.1.229  
  5. RS2=192.168.1.224  
  6. ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255  
  7. route add -host $vip dev tunl0  
  8. echo "0" >/proc/sys/net/ipv4/ip_forward  
  9. echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects  
  10. echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects  
  11. echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects  
  12. ipvsadm -C  
  13. ipvsadm -A -t $vip:80 -s wlc  
  14. ipvsadm -a -t $vip:80 -r $RS1 -i  
  15. ipvsadm -a -t $vip:80 -r $RS2 -i  
  16. /etc/init.d/ipvsadm save  
  17. /etc/init.d/ipvsadm restart  

real_server配置:

XML/HTML代码
  1. # cat tun.sh   
  2. #!/bin/bash  
  3. vip=192.168.1.204  
  4. ifconfig tunl0 $vip broadcast $vip netmask 255.255.255.255 up  
  5. echo '0' > /proc/sys/net/ipv4/ip_forward  
  6. echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore  
  7. echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce  
  8. echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore  
  9. echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce  
  10. echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter  
  11. echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter  

注意,虚拟机上测试时,realserver的防火墙一定要关闭!

测试:

XML/HTML代码
  1. [root@localhost ~]# ipvsadm -lcn  
  2. IPVS connection entries  
  3. pro expire state       source             virtual            destination  
  4. TCP 14:52  ESTABLISHED 192.168.1.228:59864 192.168.1.204:80   192.168.1.224:80  
  5. TCP 00:01  CLOSE       192.168.1.228:59863 192.168.1.204:80   192.168.1.224:80  
  6. TCP 00:01  CLOSE       192.168.1.228:59861 192.168.1.204:80   192.168.1.224:80  
  7. TCP 00:02  CLOSE       192.168.1.228:59862 192.168.1.204:80   192.168.1.229:80  
  8. TCP 14:52  ESTABLISHED 192.168.1.228:59865 192.168.1.204:80   192.168.1.229:80  
  9. [root@localhost ~]# ipvsadm -ln --rate  
  10. IP Virtual Server version 1.2.1 (size=4096)  
  11. Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS  
  12.   -> RemoteAddress:Port  
  13. TCP  192.168.1.204:80                    0        3        0      450        0  
  14.   -> 192.168.1.224:80                    0        1        0      228        0  
  15.   -> 192.168.1.229:80                    0        1        0      222        0  
  16. [root@localhost ~]# ipvsadm -l  
  17. IP Virtual Server version 1.2.1 (size=4096)  
  18. Prot LocalAddress:Port Scheduler Flags  
  19.   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
  20. TCP  192.168.1.204:http wlc  
  21.   -> 192.168.1.224:http           Tunnel  1      1          1           
  22.   -> 192.168.1.229:http           Tunnel  1      1          1    

本来想打realserver的防火墙,结果还是杯具了,操作是这样的:

XML/HTML代码
  1. iptables -I INPUT -i tun+ -j ACCEPT  
  2. iptables -I OUTPUT -o tun+ -j ACCEPT  
  3. iptables -I FORWARD -i tun+ -j ACCEPT  
  4. iptables -I FORWARD -o tun+ -j ACCEPT  
XML/HTML代码
  1. # iptables -vnL  
  2. Chain INPUT (policy DROP 318 packets, 37640 bytes)  
  3.  pkts bytes target     prot opt in     out     source               destination           
  4.     0     0 ACCEPT     all  --  tun+   *       0.0.0.0/0            0.0.0.0/0             
  5.     0     0 ACCEPT     all  --  *      *       127.0.0.1            127.0.0.1             
  6.   114  8928 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED   
  7.     0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp flags:!0x17/0x02   
  8.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80   
  9.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22   
  10.     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0             
  11. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)  
  12.  pkts bytes target     prot opt in     out     source               destination           
  13.     0     0 ACCEPT     all  --  *      tun+    0.0.0.0/0            0.0.0.0/0             
  14.     0     0 ACCEPT     all  --  tun+   *       0.0.0.0/0            0.0.0.0/0             
  15.     0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED   
  16.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x04 limit: avg 1/sec burst 5   
  17.     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8 limit: avg 1/sec burst 5   
  18.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 limit: avg 1/sec burst 5   
  19. Chain OUTPUT (policy ACCEPT 1 packets, 108 bytes)  
  20.  pkts bytes target     prot opt in     out     source               destination           
  21.     0     0 ACCEPT     all  --  *      tun+    0.0.0.0/0            0.0.0.0/0             
  22.    96 13576 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED   
  23.     0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80   
  24.     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0             
  25. Chain icmp_allowed (0 references)  
  26.  pkts bytes target     prot opt in     out     source               destination           
  27.     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 11   
  28.     0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           icmp type 8   
  29.     0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0  

测试后,结果发现还是有问题:

XML/HTML代码
  1. # ipvsadm -lcn  
  2. IPVS connection entries  
  3. pro expire state       source             virtual            destination  
  4. TCP 00:32  SYN_RECV    192.168.1.228:60069 192.168.1.204:80   192.168.1.229:80  
  5. TCP 14:48  ESTABLISHED 192.168.1.228:60070 192.168.1.204:80   192.168.1.224:80  
  6. TCP 00:32  SYN_RECV    192.168.1.228:60068 192.168.1.204:80   192.168.1.229:80  
  7. TCP 00:53  SYN_RECV    192.168.1.228:60077 192.168.1.204:80   192.168.1.229:80  
  8. TCP 00:32  SYN_RECV    192.168.1.228:60066 192.168.1.204:80   192.168.1.229:80  
  9. TCP 00:32  SYN_RECV    192.168.1.228:60067 192.168.1.204:80   192.168.1.229:80  
  10. TCP 01:25  FIN_WAIT    192.168.1.228:60065 192.168.1.204:80   192.168.1.224:80  
  11. TCP 00:32  SYN_RECV    192.168.1.228:60064 192.168.1.204:80   192.168.1.229:80  

状态:SYN_RECV 都是不成功的,有待进一步研究!

除非特别注明,鸡啄米文章均为原创
转载请标明本文地址:http://www.jizhuomi.com/software/365.html
2014年9月30日
作者:鸡啄米 分类:软件开发 浏览: 评论:0