相信不少讀者都會做(或者曾經(jīng)做過)這么一項活動——把一個Linux系統(tǒng)安裝到Windows系統(tǒng)下的虛擬機軟件中,然后在Windows這個大環(huán)境中對Linux進行學(xué)習(xí)或者一些實驗操作。在進行這么一項活動時,不知道各位讀者是否感受到網(wǎng)絡(luò)連通的重要性(這里指外網(wǎng)的Internet),而事實上,無論是在虛擬機中還是在真實的物理機上“玩”Linux,(外網(wǎng))網(wǎng)絡(luò)都扮演著一個非常重要的角色。試想一下,當(dāng)我們的Linux無法(外網(wǎng))網(wǎng)路,這時我們又需要安裝一個gcc編譯器,各位讀者會怎么做?采用源碼編譯?我想,gcc的編譯安裝這并不是一般人所能夠做到的。采用rpm包安裝?那光解決rpm包的依賴性就可能要折騰不少的時間。采用yum,并且把源指向安裝光盤?這,確實是可以解決gcc的安裝問題。但是,各位讀者是否又想過這么一個問題,雖然Linux的安裝光盤確實已經(jīng)為我們提供了不少的軟件包,但是一個安裝光盤才有多大呀,CentOS 6.4的安裝光盤也就只有那個四個來G,這就意味著,光盤并不是萬能的,還會有不少的軟件我們是無法從光盤中獲取的,比如Mono,我們就必須自己從官網(wǎng)中下載一個并自己編譯安裝。(外網(wǎng))網(wǎng)絡(luò)是如此的重要,我們是不能夠失去它的,哪怕是在虛擬機中也不例外。
在現(xiàn)實生活中,虛擬機軟有非常多的種類,比較有名并且常用的有VM、VirtualBox等。如果各位正在閱讀此文的讀者是使用VM機作為自己的Linux虛擬機的,那么你們是幸福的,因為VM這款軟件做得非常好,它自帶的NAT技術(shù)一下子就可以幫各位讀者解決聯(lián)網(wǎng)問題,換句話說,只要作為大環(huán)境的Windows可以正常的訪問網(wǎng)絡(luò),那么只需要在VM的網(wǎng)卡設(shè)置用選擇“nat”選項或者采用“8號網(wǎng)卡(vmnet8)”,安裝在VM中的Linux就已經(jīng)獲得了訪問(外網(wǎng))網(wǎng)絡(luò)的權(quán)利了,用戶完全無需為了網(wǎng)絡(luò)的事情而煩惱和折騰。
但是,既然在本文中是選擇了Hyper-V作為虛擬機軟件,那就代表著我們就沒有VM那么幸福了,我們還得自己折騰一番才能爭取到獲得網(wǎng)絡(luò)訪問這個權(quán)利。
好的,正是進入主題,本文中,我們將討論研究:
1、本文網(wǎng)絡(luò)背景的介紹
2、如何在Linux中添加一張新網(wǎng)卡
3、如何實現(xiàn)Linux在Hyper-V中實現(xiàn)與Windows的共享寬帶上網(wǎng)
4、TTL檢測(路由封殺)網(wǎng)絡(luò)環(huán)境的應(yīng)對策略
1、當(dāng)前實驗網(wǎng)絡(luò)背景的介紹
之前在網(wǎng)絡(luò)中心常駐時,上網(wǎng)賬號理論上是用不完的,當(dāng)虛擬機中Linux想訪問網(wǎng)絡(luò)時,我們所采取的辦法是正常的撥號上網(wǎng),一臺Linux要上網(wǎng)就撥一個號,十臺Linux上網(wǎng)就撥十個號,通過這個方法,虛擬機中所有的Linux都能夠訪問網(wǎng)絡(luò)。不過,這種方法是異常“奢侈”的,并且對于大部分讀者來說也是非常不現(xiàn)實的。各位讀者更多的則是像我當(dāng)前的情況,從網(wǎng)絡(luò)中心中撤離出來,回到宿舍,一共也就那么一個上網(wǎng)賬號(還是自己花錢供養(yǎng)的),只能供一個主機同一時間訪問網(wǎng)絡(luò)的需要。
此外,當(dāng)前的環(huán)境除了只有一個寬帶賬號的限制外,由于這里是一個校園網(wǎng)(包括許多高校的校園網(wǎng)、寬帶小區(qū)或者部分地區(qū)電信、聯(lián)通寬帶用戶),它們都會有防蹭網(wǎng)(路由器封殺)的這么一個功能,還真的只是一個寬帶賬號只能供一個主機訪問網(wǎng)絡(luò)(在這里,VM用戶仍然不用擔(dān)心這個問題)。
想要讓Hyper-V中的Linux能夠訪問網(wǎng)絡(luò),各位讀者可以通過一以下幾個辦法:
A、多開幾個上網(wǎng)賬號(非常耗費金錢)
B、買一個放封的路由(一次投資,多次回報,還是個不錯的選擇)
C、參考本文中的方法(雖不能保證一定能夠成功,不過仍然值得一試,不行再采用前一種辦法)
2、為Linux添加一塊網(wǎng)卡
正式進入到我們的實驗,為了不對當(dāng)前的Linux環(huán)境造成干擾,我們決定采用為Linux添加一張新的網(wǎng)卡來進行我們當(dāng)前的這個實驗。
首先,先確保Hyper-V的“虛擬交換機管理器”中存在一個屬性為“內(nèi)部”適配器(如果沒有,則需要自己添加一個,這里采用一張已有的網(wǎng)卡,各位讀者不必為了這么長的名字而糾結(jié))。
然后為Linux虛擬機添加一張網(wǎng)卡:
在這里,有幾點是需要注意的:
(1)、虛擬交換機中請務(wù)必要選擇“內(nèi)部”屬性的適配器(在這里選擇的是剛剛新建的那張,名為:“Windows phone ……”)
(2)、添加硬件時,建議選擇“舊版的網(wǎng)絡(luò)適配器”,以防止一些版本的Linux系統(tǒng)缺少對新版網(wǎng)卡的驅(qū)動。
然后啟動我們的Linux系統(tǒng),直接使用“setup”設(shè)置網(wǎng)卡:
我們發(fā)現(xiàn)剛才新增的網(wǎng)卡是并沒有被Linux識別的(在這里,我們使用的是CentOS 6.4 X86_64 版本,其他發(fā)行版的Linux可能會有所出入),我們需要手動的添加一個網(wǎng)卡配置文件。添加方法非常簡單,進入“/etc/sysconfig/network-scripts/”目錄,然后執(zhí)行“cp ifcfg-eth0 ifcfg-eth1”(把eth0的配置文件再拷貝一份到eth1中),然后使用vi編輯器打開剛剛拷貝得到的“ifcfg-eth1”配置文件:
然后對該配置文件作出以下修改:
(1)、把“DEVICE”中由eth0改為eth1
(2)、刪除“HWADDR”這一行(刪除配置文件記錄的網(wǎng)卡硬件地址)
(3)、刪除“UUID”這一行(刪除配置文件中硬件的唯一標識)
然后保存并退出。
繼續(xù)使用vi編輯器打開“/etc/udev/rules.d/70-persistent-net.rules”,然后把里面的所有內(nèi)容清空,保存并退出后重啟Linux。
現(xiàn)在再setup就可以看到新添加的網(wǎng)卡了。
好的。就這樣,我們成功的為Linux添加了一張新網(wǎng)卡。
3、對Hyper-V中的Linux賦予網(wǎng)絡(luò)訪問的權(quán)利
上一個小節(jié)中,我們添加了一張“內(nèi)部”屬性的適配器,現(xiàn)在我們把Windows中的寬帶連接共享到這張“內(nèi)部”適配器,讓Linux能夠共享Windows中的網(wǎng)絡(luò)。
打開Windows中的“網(wǎng)絡(luò)連接”:
里面有非常之多的網(wǎng)絡(luò)適配器,這些大家都不用管,只需要留意圖中兩個藍色框起來的適配器,一個為“寬帶連接”(也就是Windows中的寬帶連接),另一個是“vEthement(Internal Ethernet……)”(也就是在Hyper-V中新建的那一張內(nèi)部網(wǎng)絡(luò)適配器)。
在“寬帶連接”中點擊右鍵,選擇“屬性”,打開設(shè)置窗口,打開“共享”這個選項卡,勾上“允許其他網(wǎng)絡(luò)用戶通過此計算機的Internet連接來連接”,“家庭網(wǎng)絡(luò)連接”這個下拉菜單中選擇剛剛我們新建的“內(nèi)部”網(wǎng)絡(luò)適配器。
點擊確定保存退出,斷開當(dāng)前的Windows寬帶連接,重新?lián)芴栔?,剛才的設(shè)置即可生效。
然后繼續(xù)設(shè)置我們的“內(nèi)部”適配器的IP,如圖所示,只要隨意的設(shè)置一個與寬帶連接不同網(wǎng)段的IP即可
然后,在Linux中的eth1網(wǎng)卡設(shè)置中采用DHCP的方式獲取IP地址(有興趣的讀者可以分別嘗試使用靜態(tài)IP的方式和DHCP的方式獲取Linux的IP,然后再對比一下“/etc/resolv”中的不同)
保存退出,并執(zhí)行“service network restart”重啟網(wǎng)絡(luò)配置
現(xiàn)在嘗試一下看能不能解析“www.baidu.com”的域名
嗯,非常好,我們的百度域名能夠正常的解析,由于域名解析需要連網(wǎng)到DNS服務(wù)器,現(xiàn)在能夠看到解析,這就表示,我們的Linux已經(jīng)能夠連網(wǎng),具有網(wǎng)絡(luò)訪問的能力了。
4、應(yīng)對撥號服務(wù)器的TTL檢測
或許有一些讀者遇過這么一種情況:現(xiàn)在有一個寬帶的上網(wǎng)賬號,由于某些原因(比如添置了一些新電腦之類的),想讓幾臺電腦都能夠共享這個寬帶賬號來上網(wǎng),結(jié)果從電腦城中買回來一個路由器,非常正確的設(shè)置好相關(guān)的參數(shù)之后,竟然發(fā)現(xiàn)沒有辦法瀏覽網(wǎng)頁,從路由器中的數(shù)據(jù)包監(jiān)控中還發(fā)現(xiàn),數(shù)據(jù)包不斷的發(fā)送出去,卻一個數(shù)據(jù)包都沒有辦法接收到。把路由器拿回電腦城中,路由器在哪里又能夠正常的使用。
如果各位讀者遇到了這種現(xiàn)象,并且排除了路由器故障這一問題之后,那就只能證明了一件事:當(dāng)前的網(wǎng)路環(huán)境中存在對路由器使用的封殺,也就是在撥號服務(wù)器中有TTL的檢測(當(dāng)然,想要封殺路由器的使用方法有很多種,比較常用而且比較流行的辦法就是采用TTL的檢測,在本文中也是只針對TTL檢測采取解決措施)。
關(guān)于什么是TTL值,各位讀者可以用網(wǎng)上搜索詳細的資料。在這里我只簡單的解說一下:我們的數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸,從一個網(wǎng)段的網(wǎng)絡(luò)傳輸?shù)搅硗庖粋€網(wǎng)段的網(wǎng)絡(luò),這是需要路由器在其中發(fā)揮作用的,但是一個由多網(wǎng)段所組成的網(wǎng)絡(luò)往往是非常龐大的(比如Internet),如果數(shù)據(jù)包沒有一個傳輸次數(shù)的限制,那么就有可能發(fā)生這么一個事件:“數(shù)據(jù)包不斷的在網(wǎng)絡(luò)中傳來傳去,走遍了整個網(wǎng)絡(luò),并且還不斷的重復(fù)這個動作”。這樣,不僅使得網(wǎng)絡(luò)的擁塞程度一下子大增甚至把整個網(wǎng)絡(luò)擠垮,并且發(fā)送這個數(shù)據(jù)包的主機還無法獲知這個數(shù)據(jù)包是否可達(也就是是否找到接收方或者接收方到底是否存在)。因此,為了解決這么一個問題,我們在發(fā)送數(shù)據(jù)包的時候,都會在數(shù)據(jù)包中設(shè)置一個TTL值,每當(dāng)這個數(shù)據(jù)包經(jīng)過一個路由器進行轉(zhuǎn)發(fā),數(shù)據(jù)包中的TTL值就會減1,直到數(shù)據(jù)包中的TTL值變?yōu)?,路由器就會自動的認為這個數(shù)據(jù)包是不可達的并自把這個數(shù)據(jù)包丟棄。
針對TTL值的這一個特性,只要在撥號服務(wù)器中增加一個TTL值的檢測,只要用戶是采用路由器上網(wǎng)的(具有放封功能的或者刷了放封固件的除外),到達撥號服務(wù)器中的數(shù)據(jù)包的TTL值就不是默認的TTL值(Windows默認的TTL為128,Linux默認的TTL值為64),如果在撥號服務(wù)器中再做這么一個小動作:“把所有不是默認TTL值的數(shù)據(jù)包全部丟棄”,這樣就達到了對路由器封殺的效果。也就是各位讀者在路由器的數(shù)據(jù)包監(jiān)測中所看到的不斷有數(shù)據(jù)包發(fā)出卻一個數(shù)據(jù)包都沒有辦法收到的原因。
在本文中所介紹的Hyper-V共享上網(wǎng)中就遇到了這么一個問題(不一定所有讀者都會遇到),比如我想從網(wǎng)上下載一個東西:
雖然DNS能夠解析域名,但是卻無法從網(wǎng)上下載東西。造成此現(xiàn)象的其中的原因就是:共享上網(wǎng)的原理跟使用路由器一樣,而當(dāng)前的校園網(wǎng)對路由器的使用有封殺。
要解決TTL檢測并封殺路由器使用的方法比較直接,那就是修改數(shù)據(jù)包從網(wǎng)卡送出時的TTL值。
針對本文中的配置,我用excel畫了一個簡單的原理圖,當(dāng)虛擬機中的Linux通過eth1發(fā)送出一個數(shù)據(jù)包,該數(shù)據(jù)包會被發(fā)送到“內(nèi)部”適配器中,然后“內(nèi)部”適配器會充當(dāng)一個路由的功能,把數(shù)據(jù)包轉(zhuǎn)發(fā)到寬帶連接中,接著,寬帶連接也同樣的充當(dāng)同樣的功能,把數(shù)據(jù)包轉(zhuǎn)發(fā)出去。這里就存在著一個簡單的算術(shù)題:“Windows默認的TTL值為128,也就是從寬帶連接中出來的數(shù)據(jù)包必須是128的才不會被撥號服務(wù)器丟棄,而數(shù)據(jù)包每經(jīng)過一次路由的轉(zhuǎn)發(fā)TTL值就會減1,問從eth0中出來的數(shù)據(jù)包是多少時數(shù)據(jù)包才不會被撥號服務(wù)器丟棄?”聰明的讀者一定能給很快的計算得出答案——130!?。?/p>
好的,既然我們已經(jīng)計算出合適的TTL值,我們二話不多說的去設(shè)置Linux的數(shù)據(jù)包TTL值。我們只需使用vi編輯器打開“/etc/sysctl.conf”,然后再最后的地方添加上這么一句“net.ipv4.ip_default_ttl=130”,然后保存退出并重啟網(wǎng)絡(luò)。
這樣,我們就可以突破了當(dāng)前網(wǎng)絡(luò)對路由器使用的封殺了。
瞧,這就可以下載東西了。
同時,這里還有一項需要讀者們非常注意的地方:要時時刻刻的警惕seLinux和iptables所產(chǎn)生的作用,在本文中,如果這兩項開啟了的話,同樣是無法下載東西的。各位讀者要切記了。
至此,Linux(CentOS)如何在Hyper-V中實現(xiàn)與Windows寬帶共享上網(wǎng)就到此結(jié)束了。