DIP:192.168.199.230
VIP:192.168.199.235
RIP:192.168.199.231(232)
负载均衡器:
0 1 2 3 4 5 |
[root@LVS001 ~]# sysctl -w net.ipv4.ip_forward=0 net.ipv4.ip_forward = 0 [root@LVS001 ~]# ifconfig eth1:1 192.168.199.235 netmask 255.255.255.0 up [root@LVS001 ~]# ipvsadm -A -t 192.168.199.235:80 -s wrr -p 20 [root@LVS001 ~]# ipvsadm -a -t 192.168.199.235:80 -r 192.168.199.232:80 -i -w 1 [root@LVS001 ~]# ipvsadm -a -t 192.168.199.235:80 -r 192.168.199.231:80 -i -w 1 |
LB脚本
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/bin/bash # Author:Byrd # Version:0.1 # Site:note.t4x.org # Contact:root#t4x.org VIP=( 192.168.199.235 ) RIP=( 192.168.199.231 ) start() { if [ `ipvsadm -Ln | wc -l` -gt 3 ]; then ipvsadm -C fi for ((i=0;i<${#VIP[*]};i++)) do ifconfig eth0:$i ${VIP[$i]}/24 up #route add -host ${VIP[$i]} dev eth0 ipvsadm --set 30 5 60 ipvsadm -A -t ${VIP[$i]}:80 -s wrr for ((p=0;p<${#RIP[*]};p++)) do ipvsadm -a -t ${VIP[$i]}:80 -r ${RIP[$p]}:80 -i -w 1 done done } stop() { for ((i=0;i<${#VIP[*]};i++)) do ifconfig eth0:$i ${VIP[$i]}/24 down #route add -host ${VIP} dev eth0 #ipvsadm --set 30 5 60 ipvsadm -D -t ${VIP[$i]}:80 done } case "$1" in start) start && exit 0 ;; stop) stop || exit 2 ;; *) echo "USAGE: $0 start|stop" ;; esac |
Real-Server:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[root@RealServer001 ~]# /sbin/modprobe ipip [root@RealServer001 ~]# modinfo tun #确认内核是否有tun模块 filename: /lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/tun.ko alias: char-major-10-200 license: GPL author: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com> description: Universal TUN/TAP device driver srcversion: B81D2A0EFFDD495B07C94AB depends: vermagic: 2.6.32-358.el6.x86_64 SMP mod_unload modversions [root@RealServer001 ~]# modprobe tun #加载内核模块 [root@RealServer001 ~]# lsmod | grep tun tun 17031 0 tunnel4 2943 1 ipip [root@RealServer001 ~]# ifconfig tunl0 192.168.199.235 netmask 255.255.255.255 broadcast 192.168.199.235 [root@RealServer001 ~]# ifconfig tunl0 up [root@RealServer001 ~]# route add -host 192.168.199.235 dev tunl0 [root@RealServer001 ~]# echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce [root@RealServer001 ~]# echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore [root@RealServer001 ~]# echo "0" >/proc/sys/net/ipv4/conf/tunl0/rp_filter [root@RealServer001 ~]# echo "1" >/proc/sys/net/ipv4/conf/tunl0/forwarding [root@RealServer001 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore [root@RealServer001 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce |
REAL服务脚本:(Centos6.4测试通过)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#!/bin/bash # Author:Byrd # Version:0.1 # Site:note.t4x.org # Contact:root#t4x.org VIP=( 192.168.199.235 ) RIP=( 192.168.199.231 ) start() { if [ `lsmod | grep tun | wc -l` -lt 2 ] ; then /sbin/modprobe ipip /sbin/modprobe tun fi modprobe tun ifconfig tunl0 up for ((i=0;i<${#VIP[*]};i++)) do ifconfig tunl0 up ifconfig tunl0:$i ${VIP[$i]} netmask 255.255.255.255 broadcast ${VIP[$i]} done echo "2" >/proc/sys/net/ipv4/conf/tunl0/arp_announce echo "1" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/tunl0/rp_filter echo "1" >/proc/sys/net/ipv4/conf/tunl0/forwarding echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce } stop() { if [ `ifconfig | grep tunl | wc -l` -eq 0 ]; then exit 0 else for ((i=0;i<${#VIP[*]};i++)) do ifconfig tunl0:$i ${VIP[$i]} down done ifconfig tunl0 down echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_announce echo "0" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore echo "1" >/proc/sys/net/ipv4/conf/tunl0/rp_filter echo "0" >/proc/sys/net/ipv4/conf/tunl0/forwarding echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce fi } case "$1" in start) start && exit 0 ;; stop) stop || exit 2 ;; *) echo "Usage $0 start|stop" ;; esac |
可能错误:
0 1 2 3 4 5 6 |
[root@RealServer001 ~]# ifconfig tun10 192.168.199.235 broadcast 192.168.199.235 netmask 255.255.255.255 up SIOCSIFADDR: No such device tun10: unknown interface: No such device SIOCSIFBRDADDR: No such device tun10: unknown interface: No such device SIOCSIFNETMASK: No such device tun10: unknown interface: No such device |
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。SourceByrd's Weblog-https://note.t4x.org/system/systemlinux-virtual-server-tunneling/
我们利用IP隧道技术将请求报文封装转 发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。 VS/TUN的体系结构如图4所示,各个服务器将VIP地址配置在自己的IP隧道设备上。
它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发 现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
在这里需要指出,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道究竟是哪一台服务器处理的。 SourceByrd's Weblog-https://note.t4x.org/system/systemlinux-virtual-server-tunneling/
官方文档:http://www.linuxvirtualserver.org/zh/lvs4.html
参考:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=20696973&id=3174034
参考:http://www.linuxdiyf.com/viewarticle.php?id=302455
参考:http://blog.163.com/qiantu1986@126/blog/static/359226692011722833453/
参考:http://zh.linuxvirtualserver.org/node/225SourceByrd's Weblog-https://note.t4x.org/system/systemlinux-virtual-server-tunneling/
SourceByrd's Weblog-https://note.t4x.org/system/systemlinux-virtual-server-tunneling/