眾所周知,
ROS在多個(gè)運(yùn)營(yíng)商接入環(huán)境下配置策略路由的 DNS cache 一直是個(gè)難題
原因是 一個(gè)ros 只有一個(gè) cache 。在多個(gè)isp接入下必須指定一個(gè)isp為主DNS。這樣就造成了主DNS將90%的dns請(qǐng)求解析為該isp的線路請(qǐng)求。(大多數(shù)網(wǎng)站都有雙isp接入)
如果是一條大帶寬 主isp + 若干 小帶寬 備用isp 做策略路由,這樣解析就是最合理的結(jié)構(gòu)。
但是如果是 多條同等帶寬的isp,比如 100M電信接入 + 100M網(wǎng)通接入,那么采用 ROS 的 DNS cache 勢(shì)必會(huì)造成一條線路分擔(dān)了主isp的絕大部分流量。而另一個(gè)isp線路則很閑的尷尬局面。
在這種情況下,好像只有放棄ros 的 dns cache方案。采用客戶端部分配置電信dns,部分配置網(wǎng)通dns (比如奇數(shù)編號(hào)的機(jī)器配置電信dns,偶數(shù)編號(hào)的機(jī)器配置網(wǎng)通dns)的無(wú)奈舉措。
這就有幾個(gè)問(wèn)題。一是客戶端挨個(gè)配置dns的行為畢竟太繁瑣。就算用dhcp,也無(wú)法保證 同一時(shí)間 配置電信dns 的機(jī)器 ,和配置網(wǎng)通dns 的機(jī)器開機(jī)數(shù)量相等。
二是萬(wàn)一某個(gè)dns掛掉,無(wú)法無(wú)縫平滑的使用其他dns進(jìn)行替換。大多數(shù)win客戶機(jī)dns只能寫兩個(gè),而且win下的dns解析可靠性和效率大家都懂的。
有沒有一個(gè)完美的方法,在幾乎不增加其他硬件成本的情況下,既可以使用ros的dns cache, 客戶機(jī)填寫路由器的ip 就能 電信+網(wǎng)通 dns均衡負(fù)載,甚至客戶機(jī)亂填一個(gè)dns地址也能被劫持并成功均衡,更甚至可以自由的調(diào)整不同isp的dns分配比例呢?
現(xiàn)設(shè)定ROS 內(nèi)網(wǎng)卡 IP 為 192.168.0.1,DNS 設(shè)置為 電信dns1,電信dns2,電信dns3。。。
同一個(gè)dns cache不能設(shè)置不同的isp,以免出現(xiàn)解析混亂的情況。
在內(nèi)網(wǎng)其他任意一個(gè)服務(wù)器上用單網(wǎng)卡橋接的方式虛擬一個(gè)ROS,ip 為 192.168.0.2 ,DNS cache設(shè)置為 網(wǎng)通dns1,網(wǎng)通dns2,網(wǎng)通dns3。。。
在主ROS上 用 PCC 按源地址均分 排除192.168.0.2以外,劫持客戶機(jī)的 dns 請(qǐng)求
/ip firewall nat
add action=dst-nat chain=dstnat dst-port=53 per-connection-classifier=src-address:2/0 protocol=udp src-address=!192.168.0.2 to-addresses=192.168.0.2
add action=dst-nat chain=dstnat dst-port=53 per-connection-classifier=src-address:2/1 protocol=udp src-address=!192.168.0.2 to-addresses=192.168.0.1
這樣無(wú)論客戶機(jī)的dns如何填寫,二分之一的客戶機(jī)的DNS請(qǐng)求就被劫持到了虛擬ros的 網(wǎng)通dns 緩存上。
另二分之一的 客戶機(jī)DNS 請(qǐng)求 劫持在主ROS的 電信 dns緩存上。
當(dāng)然,如果所有客戶機(jī)dns都默認(rèn) 192.168.0.1 那也可以省略掉第二行代碼。
另外,如果把PCC規(guī)則設(shè)置為 src-address-and-port,那么是按請(qǐng)求連接來(lái)均分。這樣帶寬利用更平均。不過(guò)這樣就會(huì)出現(xiàn) 同一個(gè)客戶機(jī)同一個(gè)網(wǎng)站第一個(gè)窗口走電信線,第二個(gè)窗口走網(wǎng)通線。也許會(huì)出現(xiàn)一些網(wǎng)站驗(yàn)證方面的未知問(wèn)題。
本帖隱藏的內(nèi)容
如果電信和網(wǎng)通的帶寬不對(duì)稱。比如一條100M 一條 150M 則只需要在PCC上調(diào)整比例為相應(yīng)的 2 :3 就可。
因?yàn)樘摂M的ROS只做dns緩存用,不做包轉(zhuǎn)發(fā)。這樣虛擬32M內(nèi)存就足夠。對(duì)cpu的要求也是極少極少。內(nèi)網(wǎng)任意一臺(tái)服務(wù)器的閑置資源即可完成?;静挥米鲇布系耐度搿>唧w的操作可用VMware.com " target="_blank" class="relatedlink">vmware來(lái)虛擬,批處理開機(jī)運(yùn)行。這里就不贅述了。
補(bǔ)充1:樓下有人問(wèn)能否單個(gè)ROS DNS cache 來(lái)完成。其實(shí)仔細(xì)想想就不可能了。ROS先天就只有一個(gè)DNS Cache 池。這樣一個(gè)Cache中如果塞滿了不同了運(yùn)營(yíng)商的DNS解析,很容易造成解析混亂的情況發(fā)生。別說(shuō)是均衡負(fù)載了,正常的DNS都會(huì)受到影響。反映出來(lái)就是很多網(wǎng)頁(yè)打不開或者打開很慢。這個(gè)已經(jīng)有很多人領(lǐng)教過(guò)了。唯一的可能就是期盼mikrotik 官方在后續(xù)的ros 版本中增設(shè)多個(gè) DNS Cache池
補(bǔ)充2:多于2個(gè)isp出口 可以虛擬 ros3 ros4。。。 如法炮制。 如果他們其中的一個(gè)掛了怎么辦? 只需要在主ros 簡(jiǎn)單的加上 netwatch 判斷通斷,如果掛掉則關(guān)閉相應(yīng)的dns劫持。
目前在ROS5.2X 生產(chǎn)環(huán)境中運(yùn)行良好