LVS 當前應用主要采用 DR 和 NAT 模式,但這 2 種模式要求 RealServer 和 LVS在同一個 vlan中,導致部署成本過高;
TUNNEL 模式雖然可以跨 vlan,但RealServer上需要部署 ipip 模塊等, 網絡拓撲上需要連通外網,較復雜,不易運維。
為了解決上述問題,我們在 LVS 上添加了一種新的轉發模式:FULLNAT
該模式和 NAT 模式的區別是: Packet IN 時,除了做 DNAT,還做 SNAT(用戶 ip->內網 ip),從而實現LVS-RealServer 間可以跨 vlan 通訊, RealServer 只需要連接到內網
FULLNAT 將作為一種新工作模式(同 DR/NAT/TUNNEL),實現如下功能:
1. Packet IN 時,目標 ip 更換為 realserver ip,源 ip 更換為 內網 local ip;
2. Packet OUT 時,目標 ip 更換為 client ip,源 ip 更換為 vip;
注: Local ip 為一組內網 ip 地址;
性能要求,和 NAT 比, 正常轉發性能下降<10%;
關於NAT和FULLNAT的區別如下圖所示:
nat模式下報文變化
發送 接收
cip ---> vip
cip ---> rip ( DNAT )
rip ---> cip
vip ---> cip ( SNAT )
fullnat模式下報文變化:
發送 接收
cip ---> vip
lip ---> rip ( SNAT + DNAT )
rip ---> lip
vip ---> cip ( SNAT + DNAT )
注釋:
- cip為客戶端的地址
- vip為虛擬地址
- rip為真實的服務器
- lip為本地地址
- SNAT為來源地址轉換
- DNAT為目的地址轉換
FULLNAT一個最大的問題是:RealServer無法獲得用戶IP;為了解決這個問題我們提出了TOA的概念,主要原理是:將client address放到了TCP Option里面帶給后端RealServer,RealServer上通過toa內核模塊hack了getname函數,給用戶態返回TCP Option中的client ip。
TOA (address of tcp option)-插入 client ip
1. 該功能只有 fullnat 才會用
2. 和 tcp 協議相關
LVS可以防御DDOS 4層標志位攻擊,其中,synproxy是用於防御synflood攻擊的模塊
參考資料:https://github.com/alibaba/LVS/tree/master/docs
http://blog.sina.com.cn/s/blog_620c47630102v2iz.html