LVS-TUN(ip tunneling)IP隧道

1.TUN(ip tunneling)工作原理

lvs-tun(ip tunneling)(在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址爲CIP,目標IP爲VIP),外層IP首部(源地址爲DIP,目標IP爲RIP))
不修改請求報文的ip首部(cip—vip),而是通過在原有的ip首部(dip–rip),再封裝一個ip首部
1.rip dip vip 全是公網地址
2.rs的網關不能指向dip
3.請求報文必須經由director調度,但響應報文必須不能經由director
4.rs的os必須支持隧道功能

工作流程:
在這裏插入圖片描述

(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
© IPVS比對數據包請求的服務是否爲集羣服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP爲爲DIP,目標IP爲RIP。然後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP
(d) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因爲在外層封裝多了一層IP首部,所以可以理解爲此時通過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP
(e) RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,而且目標是自己的lo接口VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端

TUN模式負載均衡搭建

準備工作:
準備三臺虛擬機server1,2,3,並配置好yum源,並且安裝好ipvsadm套件
將server1作爲lvs調度器,server2,3作爲後臺服務器

在LVS調度器server1上:
1)引入ip隧道模塊

[root@server1 ~]# modprobe ipip
[root@server1 ~]# ip addr show  ##查看模塊是否成功導入,如果有tunl0,說明導入成功
[root@server1 ~]# ip link set up tunl0

在這裏插入圖片描述

2)綁定vip

[root@server1 ~]# ip addr add 172.25.24.100/24 dev tunl0

在這裏插入圖片描述

3)加載rule

[root@server1 ~]# ipvsadm -C  ##清除原有rule
[root@server1 ~]# ipvsadm -A -t 172.25.24.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.2:80 -i
[root@server1 ~]# ipvsadm -a -t 172.25.24.100:80 -r 172.25.24.3:80 -i
[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.24.100:http rr
  -> server2:http                 Tunnel  1      0          0         
  -> server3:http                 Tunnel  1      0          0         
[root@server1 ~]# service ipvsadm save  ##保存rule
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

在這裏插入圖片描述

在後臺服務器server2,3上
1)導入ip隧道模塊並綁定vip

[root@server2 ~]# modprobe ipip
[root@server2 ~]# ip addr add 172.25.24.100/32 dev tunl0
[root@server2 ~]# ip link set up tunl0
[root@server2 ~]# ip addr show
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:9e:a7:2b brd ff:ff:ff:ff:ff:ff
    inet 172.25.24.2/24 brd 172.25.24.255 scope global eth0
    inet6 fe80::5054:ff:fe9e:a72b/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.24.100/32 scope global tunl0

2)查看內核參數關閉反向過濾

sysctl -a | grep rp_filter   ##查看內核參數,關閉反向過濾
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0

sysctl -p  ##立即生效

在這裏插入圖片描述在這裏插入圖片描述

測試:
在這裏插入圖片描述

##ip隧道模塊的刪除

ip addr del 172.25.24.100/24 dev tunl0
ip link set down tunl0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章