IP隧道(IP tunneling)是将一个IP报文封装在另外一个IP报文的技术,这可使得目标为一个IP地址的数据报文能被封装和转发到另外一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态创建的,隧道一端有一个IP地址,另外一端也有惟一的IP地址html
过程:apache
1.客户端将访问vip报文发送给LVS服务器;vim
2.LVS服务器将请求报文从新封装,发送给后端真实服务器;后端
3.后端真实服务器将请求报文解封,在确认自身有vip以后进行请求处理;服务器
4.后端真实服务器在处理完数据请求后,直接响应客户端。网络
要求: 负载均衡
1.lvs和后端真实服务器上都要有vip。curl
2.不会成为瓶颈。tcp
3.请求的报文不能太大。工具
实验环境:
Load Balance:172.25.45.1
Virtual IP: 172.25.45.100
server2(RS): 172.25.45.2
server3(RS): 172.25.45.3
modprobe ipip #添加隧道
ip link set up tunl0 #激活隧道
ip addr add 172.25.45.100 dev tunl0 #添加虚拟IP
ip addr #查看IP
vim /etc/yum.repos.d/rhel-source.repo
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.45.250/rhel6.5/LoadBalancer
gpgcheck=0
yum install ipvsadm -y
/etc/init.d/ipvsadm start #开启服务
ipvsadm -C
ipvsadm -A -t 172.25.45.100:80 -s rr
ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.2:80 -i #给vip添加rip,使用TUN模式
ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.3:80 -i
/etc/init.d/ipvsadm save #保存策略
ipvsadm -ln #查看策略
ipvsadm -lnc #查看调度IP状况
yum install httpd -y
vim /var/www/html/index.html
<h1>server2</h1>
/etc/init.d/httpd start
modprobe ipip #加载模块
ip link set up tunl0
ip addr add 172.25.45.100/32 dev tunl0 #添加虚拟IP
ip addr #查看ip
由于设置172.25.45.100/32做为vip,不能够和外部通讯,因此设用arptables将其的访问所有DROP,出去的包所有为转为本机的ip
yum install arptables_jf -y
arptables -F #清空策略
arptables -A IN -d 172.25.45.100 -j DROP 拒绝172.25.4.100的访问
arptables -A OUT -s 172.25.45.100 -j mangle --mangle-ip-s 172.25.45.2 #因为tcp三次握手缘由,因此出去的时候仍要以vip地址出去才会实现握手,而真正将数据传输给客户端的就是realserver, mangle参数就是这个功能
/etc/init.d/arptables_jf save #保存策略
arptables -L #查看策略
rp_filter参数的做用:
1. 减小DDoS攻击
校验数据包的反向路径,若是反向路径不合适,则直接丢弃数据包,避免过多的无效链接消耗系统资源。
2. 防止IP Spoofing
校验数据包的反向路径,若是客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。
sysctl -a|grep .rp_filter #将过滤出的打开着的.rp_filter所有关闭
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
为何要修改这个参数呢?是由于:
rp_filter参数用于控制系统是否开启对数据包源地址的校验。
有三个值,0、一、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每一个进来的数据包,校验其反向路径是不是最佳路径。若是反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每一个进来的数据包,校验其源地址是否可达,即反向路径是否能通(经过任意网口),若是反向路径不一样,则直接丢弃该数据包。
在物理机中执行 for i in {1..10};do curl 172.25.45.100;done ,出现轮询即配置生效
调度器处的状况:
实验环境:
继续使用以前的环境,将server3的ip更改成172.25.254.3
Load Balance:172.25.45.1 172.25.254.45
Virtual IP: 172.25.45.100
server2(RS): 172.25.45.2
server3(RS): 172.25.254.3
ip addr add 172.25.254.3/24 dev eth0
ip addr del 172.25.45.3/24 dev eth0
ip addr
vim /etc/sysconfig/arptables
更改假装策略,将172.25.45.3更改成172.25.254.3
/etc/init.d/arptables_jf restart
arptables -L
route add default gw 172.25.254.45 #将RS网关指向物理机的ip地址
route -n
ip addr add 172.25.254.45/24 dev eth0
ipvsadm -ln
ipvsadm -d -t 172.25.45.100:80 -r 172.25.45.3:80
ipvsadm -a -t 172.25.45.100:80 -r 172.25.254.3:80 -i
ipvsadm -ln
在物理机中执行 for i in {1..10};do curl 172.25.45.100;done ,出现轮询即配置生效