lvs-tun原理配置

同样在了解lvs-tun之前了解一些必备的网络知识:
封包:数据要在通讯系统中必须要先经过某些处理,才能在网络当中传递,例如将数据切割为数个区块之后,才能在网络上依照某种通讯协议来传送,这种过程就好像将包裹打包一样,称为分封。算了,这个貌似涉及的内容比较 复杂,改天一起整理一下。
IP隧道技术:是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。
隧道技术是一种数据包封装技术,它是将原始IP包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的IP包)的数据净荷中进行传输。
隧道,实际上是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。发送路由器将被传送的协议包进行封装,经过网络传送,接受路由器解开收到的包,取出原始协议;而在传输过程中的中间路由器并不在意封装的协议是什么。这里的封装协议,称之为传输协议,是跨过网络传输被封装协议的一种协议,IP协议是IOS唯一选择的传输协议。而被封装的协议在此为IPX协议或者AppleTAlk协议,通常可以称之为乘客协议。需要特别注意的是:隧道技术是一种点对点的链接,因而必须在链接的两端配置隧道协议。
Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的):ipip、gre、sit 。这三种隧道技术都需要内核模块 tunnel4.ko 的支持。
ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。至于兼容性,这部分代码已经有很长一段历史了,它的兼容性可以上溯到1.3版的内核。据网上查到信息,Linux的IP-in-IP隧道不能与其他操作系统或路由器互相通讯。它很简单,也很有效。

lb:172.25.67.3 server3 vip:172.25.67.100
rs1:172.25.67.1 server1 vip 172.25.67.100
rs2:172.25.67.2 server2 vip 172.25.67.100
均在同一个网段

配置Load Balance端

ip设置

[root@server3 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:18:70:9b brd ff:ff:ff:ff:ff:ff
    inet 172.25.67.3/24 brd 172.25.67.255 scope global eth0  #本地ip
    inet6 fe80::5054:ff:fe18:709b/64 scope link 
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:ed:6d:9f brd ff:ff:ff:ff:ff:ff
    inet 172.25.67.100/24 brd 172.25.67.255 scope global eth2  #vip
    inet6 fe80::5054:ff:feed:6d9f/64 scope link 
       valid_lft forever preferred_lft forever
制作rule规则
[root@server3 ~]# ipvsadm -C
       valid_lft forever preferred_lft forever
[root@server3 ~]# ipvsadm -A -t 172.25.67.100:80 -s rr
[root@server3 ~]# ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.1:80 -i
[root@server3 ~]# ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.2:80 -i
[root@server3 ~]# /etc/init.d/ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [确定]
[root@server3 ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.67.100:http rr
  -> server1:http                 Tunnel  1      0          0         
  -> server2:http                 Tunnel  1      0          0         
[root@server3 ~]# /etc/init.d/ipvsadm start

rs端配置

将两个rs的网关设置成lb的ip 172.25.67.100

加载ipip隧道模块
[root@server2 ~]# modprobe ipip   #在加载好ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。 使用 ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0 
[root@server2 ~]# ip a
3: tunl0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
添加vip
[root@server2 ~]# ifconfig tunl0 172.25.67.100 netmask 255.255.255.255 up  #配置VIP
[root@server2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:55:3e:83 brd ff:ff:ff:ff:ff:ff
    inet 172.25.67.2/24 brd 172.25.67.255 scope global eth0
    inet6 fe80::5054:ff:fe55:3e83/64 scope link 
       valid_lft forever preferred_lft forever
3: tunl0: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN 
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.67.100/32 brd 172.25.67.100 scope global tunl0

开启路由机制

[root@server2 ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@server2 ~]#sysctl ­p

关闭ARP转发

[root@server2 ~]# echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore 
[root@server2 ~]# echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce
[root@server2 ~]# echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@server2 ~]# echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@server2 ~]# echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
[root@server2 ~]# echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter 
[root@server2 ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
server3同上配置

测试

如图
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值