lvs tun模式

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  


你可能感兴趣的:(linux,LVS,TUN)