TUN简介
是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
简单的LVS/TUN架构图
模拟下用户访问百度的情况:
1.用户在浏览器输入http://www.baidu.com, 用户的电脑通过网络询问DNS,www.baidu.com域名的IP地址。
2.DNS服务器通过用户的地址,在服务器列表里选择一个可能是距离用户最近的LVS虚拟服务IP地址或者一个按照轮询策略的地址。
可以用ping www.baidu.com,能看到会返回一个IP地址,这个IP地址就是我们DNS返回给我们的地址。也可以用dig命令,能够看到www.baidu.com 实际对应了3个IP地址
3.用户浏览器通过DNS获得的IP地址,访问LVS服务器
4.进入LVS/TUN模式,LVS将数据包提供给APACHE或者nginx构建的反向代理服务器;
5.反向代理服务器最终将请求送给应用服务器;
6.应用服务器完成用户请求之后,通过反向代理服务器直接返回给用户,而不需要通过LVS服务器。
优点
TUN模式可以解决DR模式下不能跨网段的问题,甚至可以跨公网进行。
一、在server1上:
ip addr
添加隧道tun:
ip addr add 172.25.3.100/24 dev tunl0
ip link set up dev tunl0
ip addr ##查看是否添加上 tunl0
添加规则:
yum install ipvsadm -y
ipvsadm -A -t 172.25.3.100:80 -s rr
ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.2:80 -i
ipvsadm -a -t 172.25.3.100:80 -r 172.25.3.3:80 -i
禁用rp_filter内核和打开内部路由
vim /etc/sysctl.conf ##更改设置
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
sysctl -p ###查看配置
二、在server2上:
安装arptables_jf
因为设置172.25.3.100/24作为vip,不可以和外部通信,所以设用arptables将其的访问全部DROP,出去的包全部转化为本机的ip
添加策略:
yum install arptables_jf
arptables -A IN -d 172.25.3.100 -j DROP
arptables -A OUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.2
arptables -L -n ###查看策略添加情况
/etc/init.d/arptables_jf save
禁用rp_filter内核和打开内部路由
vim /etc/sysctl.conf ##更改设置
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
sysctl -p ###刷新
添加隧道tun:
ip addr add 172.25.3.100/24 dev tunl0
ip link set up dev tunl0
ip addr ##查看是否添加上 tunl0
三、在server3中:
安装arptables_jf
因为设置172.25.3.100/24作为vip,不可以和外部通信,所以设用arptables将其的访问全部DROP,出去的包全部转化为本机的ip
添加策略:
yum install arptables_jf
arptables -A IN -d 172.25.3.100 -j DROP
arptables -A OUT -s 172.25.3.100 -j mangle --mangle-ip-s 172.25.3.3
arptables -L -n ###查看策略添加情况
/etc/init.d/arptables_jf save
禁用rp_filter内核和打开内部路由
vim /etc/sysctl.conf ##更改设置
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
sysctl -p ###刷新
添加隧道tun:
ip addr add 172.25.3.100/24 dev tunl0
ip link set up dev tunl0
ip addr ##查看是否添加上 tunl0
在真机中访问:
Curl 172.25.3.100 ##出现轮询即ok