单独一台机器测试Open×××加密隧道的问题和解决
其實這篇文章和Open×××的關系倒不是很大,只是通過Open×××測試時暴露出的問題。這篇文章里面倒是包含了很多IP路由以及conntrack的細節內容。
?????? 有時候,為了節省機器,我希望在一臺設備上模擬多個設備,當然,使用網絡命名空間是可以的,但是我的內核版本不支持...所以我希望使用純協議棧的方法來 做到。此時需要解決的問題并不比程序員在編寫多線程程序時要少。你要知道什么是共享的,什么是獨享的,什么時候什么字段會被什么模塊修改...諸如此類, 不一而足...
?????? 先不談Open×××,僅僅考慮一臺機器上兩個網卡的情況,如果你ping一個網卡上配置的地址,事實上結果是不會經過這個網卡的,因為在路由模塊中,協 議棧會發現這事實上是自己和自己通信,因此會直接bypass掉真實網卡。現在加入Open×××,我希望的是數據包通過下面這個圖上所標示的路徑發出 去,但事實上沒有,原因的注釋也在圖中:
無論你怎么用Open×××進行隔離,協議棧還是會發現tun1上的IP是本地IP之一。事實 上,conntrack1和conntrack2也是相同的保存在同一處的同一個conntrack。雖然是同一個conntrack,但是卻在同一臺機 器上被處理了兩次,是為conntrack1和conntrack2。雖然這沒有什么問題,但是我不是把conntrack模塊給改了嗎?改了之后就有問 題了,因為我把route信息cache在了conntrack結構體中,這樣一來,上面conntrack1和conntrack2的路由信息明顯不可 能是同一個,所以就會有問題。在這個場景下,不能用conntrack來cache路由信息。
?????? 上圖所示,錯誤原因也已經給出了,一些額外的分析也做過了,那么正確的方式應該是什么樣的呢?下圖給出:
轉載于:https://blog.51cto.com/dog250/1601785
總結
以上是生活随笔為你收集整理的单独一台机器测试Open×××加密隧道的问题和解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结对开发:电梯调度(2)
- 下一篇: VisualVM远程连接Linux服务器