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