為了透傳用戶ip到后端server, proxy機器需要解決兩個問題:
1.在創建到后端server的套接字時, 將用戶ip作為套接字的源ip,從而讓后端server看到;
2.后端server在回包時, 能夠將目的地為用戶ip的回包,返回給proxy機器,而proxy機器能夠將該包,從網卡驅動(鏈路層)收下來,並正確遞交給應用層的haproxy進程
為了解決這兩個問題,haproxy進程和所在機器需要做三個事情:
1.haproxy進程在創建到后端server的tcp套接字時,開啟IP_TRANSPARENT選項, 並綁定用戶ip為源ip;
2.后端server修改路由規則,將目的地為用戶ip的回包,路由給proxy機器;
3.proxy機器在處理回包時, 在ip層, 由TProxy通過結合netfilter/iptables, 對該回包做一些小動作,將該回包的skb->sk = sk(sk為haproxy進程創建的對應套接字),從而讓tcp層能夠根據skb->sk, 將該回包遞交給haroxy進程進行處理,最終返回給客戶端。
---------------------
作者:frockee
來源:CSDN
原文:https://blog.csdn.net/frockee/article/details/78641188
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!