歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 在Hyper-V中實現windows與linux共享上網

在Hyper-V中實現windows與linux共享上網

日期:2017/3/1 18:01:19   编辑:Linux技術

相信不少讀者都會做(或者曾經做過)這麼一項活動——把一個Linux系統安裝到Windows系統下的虛擬機軟件中,然後在Windows這個大環境中對Linux進行學習或者一些實驗操作。在進行這麼一項活動時,不知道各位讀者是否感受到網絡連通的重要性(這裡指外網的Internet),而事實上,無論是在虛擬機中還是在真實的物理機上“玩”Linux,(外網)網絡都扮演著一個非常重要的角色。試想一下,當我們的Linux無法(外網)網路,這時我們又需要安裝一個gcc編譯器,各位讀者會怎麼做?采用源碼編譯?我想,gcc的編譯安裝這並不是一般人所能夠做到的。采用rpm包安裝?那光解決rpm包的依賴性就可能要折騰不少的時間。采用yum,並且把源指向安裝光盤?這,確實是可以解決gcc的安裝問題。但是,各位讀者是否又想過這麼一個問題,雖然Linux的安裝光盤確實已經為我們提供了不少的軟件包,但是一個安裝光盤才有多大呀,CentOS 6.4的安裝光盤也就只有那個四個來G,這就意味著,光盤並不是萬能的,還會有不少的軟件我們是無法從光盤中獲取的,比如Mono,我們就必須自己從官網中下載一個並自己編譯安裝。(外網)網絡是如此的重要,我們是不能夠失去它的,哪怕是在虛擬機中也不例外。

在現實生活中,虛擬機軟有非常多的種類,比較有名並且常用的有VM、VirtualBox等。如果各位正在閱讀此文的讀者是使用VM機作為自己的Linux虛擬機的,那麼你們是幸福的,因為VM這款軟件做得非常好,它自帶的NAT技術一下子就可以幫各位讀者解決聯網問題,換句話說,只要作為大環境的Windows可以正常的訪問網絡,那麼只需要在VM的網卡設置用選擇“nat”選項或者采用“8號網卡(vmnet8)”,安裝在VM中的Linux就已經獲得了訪問(外網)網絡的權利了,用戶完全無需為了網絡的事情而煩惱和折騰。
但是,既然在本文中是選擇了Hyper-V作為虛擬機軟件,那就代表著我們就沒有VM那麼幸福了,我們還得自己折騰一番才能爭取到獲得網絡訪問這個權利。

好的,正是進入主題,本文中,我們將討論研究:

1、本文網絡背景的介紹

2、如何在Linux中添加一張新網卡

3、如何實現Linux在Hyper-V中實現與Windows的共享寬帶上網

4、TTL檢測(路由封殺)網絡環境的應對策略

1、當前實驗網絡背景的介紹

之前在網絡中心常駐時,上網賬號理論上是用不完的,當虛擬機中Linux想訪問網絡時,我們所采取的辦法是正常的撥號上網,一台Linux要上網就撥一個號,十台Linux上網就撥十個號,通過這個方法,虛擬機中所有的Linux都能夠訪問網絡。不過,這種方法是異常“奢侈”的,並且對於大部分讀者來說也是非常不現實的。各位讀者更多的則是像我當前的情況,從網絡中心中撤離出來,回到宿捨,一共也就那麼一個上網賬號(還是自己花錢供養的),只能供一個主機同一時間訪問網絡的需要。

此外,當前的環境除了只有一個寬帶賬號的限制外,由於這裡是一個校園網(包括許多高校的校園網、寬帶小區或者部分地區電信、聯通寬帶用戶),它們都會有防蹭網(路由器封殺)的這麼一個功能,還真的只是一個寬帶賬號只能供一個主機訪問網絡(在這裡,VM用戶仍然不用擔心這個問題)。

想要讓Hyper-V中的Linux能夠訪問網絡,各位讀者可以通過一以下幾個辦法:

A、多開幾個上網賬號(非常耗費金錢)

B、買一個放封的路由(一次投資,多次回報,還是個不錯的選擇)

C、參考本文中的方法(雖不能保證一定能夠成功,不過仍然值得一試,不行再采用前一種辦法)

2、為Linux添加一塊網卡

正式進入到我們的實驗,為了不對當前的Linux環境造成干擾,我們決定采用為Linux添加一張新的網卡來進行我們當前的這個實驗。

首先,先確保Hyper-V的“虛擬交換機管理器”中存在一個屬性為“內部”適配器(如果沒有,則需要自己添加一個,這裡采用一張已有的網卡,各位讀者不必為了這麼長的名字而糾結)。

然後為Linux虛擬機添加一張網卡:

在這裡,有幾點是需要注意的:

(1)、虛擬交換機中請務必要選擇“內部”屬性的適配器(在這裡選擇的是剛剛新建的那張,名為:“Windows phone ……”)

(2)、添加硬件時,建議選擇“舊版的網絡適配器”,以防止一些版本的Linux系統缺少對新版網卡的驅動。

然後啟動我們的Linux系統,直接使用“setup”設置網卡:

我們發現剛才新增的網卡是並沒有被Linux識別的(在這裡,我們使用的是CentOS 6.4 X86_64 版本,其他發行版的Linux可能會有所出入),我們需要手動的添加一個網卡配置文件。添加方法非常簡單,進入“/etc/sysconfig/network-scripts/”目錄,然後執行“cp ifcfg-eth0 ifcfg-eth1”(把eth0的配置文件再拷貝一份到eth1中),然後使用vi編輯器打開剛剛拷貝得到的“ifcfg-eth1”配置文件:

然後對該配置文件作出以下修改:

(1)、把“DEVICE”中由eth0改為eth1

(2)、刪除“HWADDR”這一行(刪除配置文件記錄的網卡硬件地址)

(3)、刪除“UUID”這一行(刪除配置文件中硬件的唯一標識)

然後保存並退出。

繼續使用vi編輯器打開“/etc/udev/rules.d/70-persistent-net.rules”,然後把裡面的所有內容清空,保存並退出後重啟Linux。

現在再setup就可以看到新添加的網卡了。

好的。就這樣,我們成功的為Linux添加了一張新網卡。

3、對Hyper-V中的Linux賦予網絡訪問的權利

上一個小節中,我們添加了一張“內部”屬性的適配器,現在我們把Windows中的寬帶連接共享到這張“內部”適配器,讓Linux能夠共享Windows中的網絡。

打開Windows中的“網絡連接”:

裡面有非常之多的網絡適配器,這些大家都不用管,只需要留意圖中兩個藍色框起來的適配器,一個為“寬帶連接”(也就是Windows中的寬帶連接),另一個是“vEthement(Internal Ethernet……)”(也就是在Hyper-V中新建的那一張內部網絡適配器)。

在“寬帶連接”中點擊右鍵,選擇“屬性”,打開設置窗口,打開“共享”這個選項卡,勾上“允許其他網絡用戶通過此計算機的Internet連接來連接”,“家庭網絡連接”這個下拉菜單中選擇剛剛我們新建的“內部”網絡適配器。

點擊確定保存退出,斷開當前的Windows寬帶連接,重新撥號之後,剛才的設置即可生效。

然後繼續設置我們的“內部”適配器的IP,如圖所示,只要隨意的設置一個與寬帶連接不同網段的IP即可

然後,在Linux中的eth1網卡設置中采用DHCP的方式獲取IP地址(有興趣的讀者可以分別嘗試使用靜態IP的方式和DHCP的方式獲取Linux的IP,然後再對比一下“/etc/resolv”中的不同)

保存退出,並執行“service network restart”重啟網絡配置

現在嘗試一下看能不能解析“www.baidu.com”的域名

嗯,非常好,我們的百度域名能夠正常的解析,由於域名解析需要連網到DNS服務器,現在能夠看到解析,這就表示,我們的Linux已經能夠連網,具有網絡訪問的能力了。

4、應對撥號服務器的TTL檢測

或許有一些讀者遇過這麼一種情況:現在有一個寬帶的上網賬號,由於某些原因(比如添置了一些新電腦之類的),想讓幾台電腦都能夠共享這個寬帶賬號來上網,結果從電腦城中買回來一個路由器,非常正確的設置好相關的參數之後,竟然發現沒有辦法浏覽網頁,從路由器中的數據包監控中還發現,數據包不斷的發送出去,卻一個數據包都沒有辦法接收到。把路由器拿回電腦城中,路由器在哪裡又能夠正常的使用。

如果各位讀者遇到了這種現象,並且排除了路由器故障這一問題之後,那就只能證明了一件事:當前的網路環境中存在對路由器使用的封殺,也就是在撥號服務器中有TTL的檢測(當然,想要封殺路由器的使用方法有很多種,比較常用而且比較流行的辦法就是采用TTL的檢測,在本文中也是只針對TTL檢測采取解決措施)。

關於什麼是TTL值,各位讀者可以用網上搜索詳細的資料。在這裡我只簡單的解說一下:我們的數據包在網絡中的傳輸,從一個網段的網絡傳輸到另外一個網段的網絡,這是需要路由器在其中發揮作用的,但是一個由多網段所組成的網絡往往是非常龐大的(比如Internet),如果數據包沒有一個傳輸次數的限制,那麼就有可能發生這麼一個事件:“數據包不斷的在網絡中傳來傳去,走遍了整個網絡,並且還不斷的重復這個動作”。這樣,不僅使得網絡的擁塞程度一下子大增甚至把整個網絡擠垮,並且發送這個數據包的主機還無法獲知這個數據包是否可達(也就是是否找到接收方或者接收方到底是否存在)。因此,為了解決這麼一個問題,我們在發送數據包的時候,都會在數據包中設置一個TTL值,每當這個數據包經過一個路由器進行轉發,數據包中的TTL值就會減1,直到數據包中的TTL值變為0,路由器就會自動的認為這個數據包是不可達的並自把這個數據包丟棄。

針對TTL值的這一個特性,只要在撥號服務器中增加一個TTL值的檢測,只要用戶是采用路由器上網的(具有放封功能的或者刷了放封固件的除外),到達撥號服務器中的數據包的TTL值就不是默認的TTL值(Windows默認的TTL為128,Linux默認的TTL值為64),如果在撥號服務器中再做這麼一個小動作:“把所有不是默認TTL值的數據包全部丟棄”,這樣就達到了對路由器封殺的效果。也就是各位讀者在路由器的數據包監測中所看到的不斷有數據包發出卻一個數據包都沒有辦法收到的原因。

在本文中所介紹的Hyper-V共享上網中就遇到了這麼一個問題(不一定所有讀者都會遇到),比如我想從網上下載一個東西:

雖然DNS能夠解析域名,但是卻無法從網上下載東西。造成此現象的其中的原因就是:共享上網的原理跟使用路由器一樣,而當前的校園網對路由器的使用有封殺。

要解決TTL檢測並封殺路由器使用的方法比較直接,那就是修改數據包從網卡送出時的TTL值。

針對本文中的配置,我用excel畫了一個簡單的原理圖,當虛擬機中的Linux通過eth1發送出一個數據包,該數據包會被發送到“內部”適配器中,然後“內部”適配器會充當一個路由的功能,把數據包轉發到寬帶連接中,接著,寬帶連接也同樣的充當同樣的功能,把數據包轉發出去。這裡就存在著一個簡單的算術題:“Windows默認的TTL值為128,也就是從寬帶連接中出來的數據包必須是128的才不會被撥號服務器丟棄,而數據包每經過一次路由的轉發TTL值就會減1,問從eth0中出來的數據包是多少時數據包才不會被撥號服務器丟棄?”聰明的讀者一定能給很快的計算得出答案——130!!!

好的,既然我們已經計算出合適的TTL值,我們二話不多說的去設置Linux的數據包TTL值。我們只需使用vi編輯器打開“/etc/sysctl.conf”,然後再最後的地方添加上這麼一句“net.ipv4.ip_default_ttl=130”,然後保存退出並重啟網絡。

這樣,我們就可以突破了當前網絡對路由器使用的封殺了。

瞧,這就可以下載東西了。

同時,這裡還有一項需要讀者們非常注意的地方:要時時刻刻的警惕seLinux和iptables所產生的作用,在本文中,如果這兩項開啟了的話,同樣是無法下載東西的。各位讀者要切記了。

至此,Linux(CentOS)如何在Hyper-V中實現與Windows寬帶共享上網就到此結束了。

Copyright © Linux教程網 All Rights Reserved