溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux源進(jìn)源出與iproute2

發(fā)布時(shí)間:2020-08-06 19:27:52 來(lái)源:網(wǎng)絡(luò) 閱讀:6153 作者:Jx戰(zhàn)壕 欄目:建站服務(wù)器

  最近在給客戶做解決方案的時(shí)候遇到這么一個(gè)場(chǎng)景也給自己埋了個(gè)坑這里記錄一下。

具體需求如下

  1. 現(xiàn)在客戶國(guó)內(nèi)服務(wù)器和國(guó)外的防火墻已經(jīng)內(nèi)網(wǎng)打通

  2. 客戶在國(guó)內(nèi)有臺(tái)WEB服務(wù)器要通過(guò)國(guó)外的一臺(tái)防火墻訪問(wèn)外網(wǎng)

  3. 需要從國(guó)外防火墻上能夠回源到國(guó)內(nèi)的WEB服務(wù)器即能夠通過(guò)防火墻訪問(wèn)到WEB服務(wù)的80端口

  4. 國(guó)內(nèi)WEB服務(wù)器有自己的公網(wǎng)地址需要能夠進(jìn)行管理

 因?yàn)橐婚_(kāi)始客戶沒(méi)有提出第3條要回源的需求當(dāng)時(shí)給客戶設(shè)計(jì)的方案是

  1. 把客戶國(guó)內(nèi)機(jī)器的默認(rèn)路由扔給國(guó)外的防火墻

  2. 國(guó)外防火墻上做SNAT把來(lái)自內(nèi)網(wǎng)網(wǎng)段的流量映射出去。

3. 在國(guó)內(nèi)機(jī)器上添加靜態(tài)路由把客戶的管理網(wǎng)段扔給國(guó)內(nèi)的網(wǎng)關(guān)。

大致拓?fù)鋱D如下

Linux源進(jìn)源出與iproute2

  這里有一點(diǎn)因?yàn)闊o(wú)法確定客戶國(guó)內(nèi)的管理地址網(wǎng)段所以在國(guó)內(nèi)WEB服務(wù)器C上刷了一個(gè)全國(guó)路由表的靜態(tài)路由默認(rèn)路由優(yōu)先級(jí)低于靜態(tài)路由所以國(guó)內(nèi)用戶訪問(wèn)C的時(shí)候還是通過(guò)國(guó)內(nèi)的網(wǎng)關(guān)出TCP連接能夠正常建立。

  然而這時(shí)候客戶又提出需要從國(guó)外服務(wù)器上進(jìn)行回源測(cè)試一下回源的質(zhì)量也就是要通過(guò)防火墻訪問(wèn)到WEB服務(wù)的80端口。我心想這個(gè)簡(jiǎn)單呀在防火墻上做一個(gè)DNAT映射把訪問(wèn)防火墻80端口的映射給WEB服務(wù)器的80端口上。于是說(shuō)干就干.....做完配置之后進(jìn)行測(cè)試瞬間懵逼了我在辦公網(wǎng)國(guó)內(nèi)地址測(cè)試防火墻的80端口死活不通一直報(bào)錯(cuò)"TIMEOUT"直接測(cè)試國(guó)內(nèi)服務(wù)器的外網(wǎng)地址的80端口和內(nèi)網(wǎng)地址的80端口是OK的也就是說(shuō)web服務(wù)訪問(wèn)正常但為什么我訪問(wèn)防火墻的80端口不行呢

  于是進(jìn)行各種測(cè)試折騰半天發(fā)現(xiàn)一個(gè)現(xiàn)象能從國(guó)外正常訪問(wèn)防火墻80端口而國(guó)內(nèi)不可以。抓包的時(shí)候發(fā)現(xiàn)WEB服務(wù)器已經(jīng)收到了我的http請(qǐng)求而且已經(jīng)進(jìn)行了回包但是服務(wù)器的回包并沒(méi)有和我正常建立連接。看現(xiàn)象應(yīng)該是斷在了TCP的第二次和第三次握手中間。

Linux源進(jìn)源出與iproute2

  這時(shí)候才恍然大悟?yàn)槭裁碩CP連接沒(méi)有建立呢因?yàn)槲沂菄?guó)內(nèi)地址發(fā)起的防火墻80訪問(wèn)通過(guò)防火墻請(qǐng)求到后端WEB服務(wù)器的時(shí)候因?yàn)榉?wù)器上有國(guó)內(nèi)的路由回包的時(shí)候是從國(guó)內(nèi)網(wǎng)關(guān)出的而不是從防火墻出了導(dǎo)致回包的源地址變成了國(guó)內(nèi)網(wǎng)關(guān)地址所以TCP連接建立不起來(lái)了。通俗解釋就是A發(fā)出請(qǐng)求訪問(wèn)B結(jié)果D給做出了回應(yīng)A認(rèn)為不是他想要的所以不認(rèn)了TCP連接建立不起來(lái)。圖解如下

Linux源進(jìn)源出與iproute2

  為了解決這個(gè)問(wèn)題總結(jié)一句話就是需要解決源進(jìn)源出的問(wèn)題從哪個(gè)口進(jìn)來(lái)的流量讓他從哪個(gè)口出去。因?yàn)閃EB服務(wù)器C相當(dāng)于有兩個(gè)網(wǎng)關(guān)出口就需要在C上控制流量的走向。于是這里想到了可以通過(guò)iproute2或iptables來(lái)實(shí)現(xiàn)我這里其實(shí)本質(zhì)上還是路由的控制所以用iproute2來(lái)實(shí)現(xiàn)顯得更為合理而且性能效果上會(huì)更好。

  簡(jiǎn)單介紹下iproute2:

iproute2linux下管理控制TCP/IP網(wǎng)絡(luò)和流量控制的新一代工具包旨在替代老派的工具鏈net-tools即大家比較熟悉的ifconfigarproutenetstat等命令。兩套工具本質(zhì)的區(qū)別,是net-tools是通過(guò)procfs(/proc)ioctl系統(tǒng)調(diào)用去訪問(wèn)和改變內(nèi)核網(wǎng)絡(luò)配置而iproute2則通過(guò)netlink套接字接口與內(nèi)核通訊。

  我這里的解決辦法如下:

假設(shè)我的國(guó)內(nèi)WEB服務(wù)器的外網(wǎng)地址是192.168.1.254/30GW:192.168.1.253。

內(nèi)網(wǎng)地址192.168.10.2 Default GW192.168.10.1

  1. 保持默認(rèn)路由10.1不變還是通過(guò)國(guó)外防火墻出網(wǎng)。

  2. 在WEB服務(wù)器上新建路由表"china",添加策略如下

# echo "1 china" >> cat /etc/iproute2/rt_tables
# ip route add 192.168.1.252/30 dev em1 src 192.168.1.254 table china
# ip route add default via 192.168.1.253 dev em1 table china
# ip rule add from 192.168.1.254 table china

3. 刪除之前添加的全國(guó)路由表。

4. 可以把路由策略寫(xiě)進(jìn)網(wǎng)卡或者rc.local配置文件里保證開(kāi)機(jī)后依然生效。

最后:附一個(gè)iproute2的51cto上翻譯的參考鏈接地址:

http://os.51cto.com/art/201409/450886.htm

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI