當前位置:首頁 » 文件傳輸 » 虛擬機與容器之間的網路訪問
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

虛擬機與容器之間的網路訪問

發布時間: 2023-05-22 14:27:09

① 容器網路 - 與外網訪問

在 容器間通信 一節中,由於兩個 Network Namespace 與主機之間隔離,是無法訪問外網的,那麼如何訪問外網呢。可以想到這樣一種網路方案,因為 veth1 和 veth2 是連通的,所以 veth1 的數據是可以傳遞到 veth2 的,那麼此時如果 veth2 的數據能傳遞給 eth0,藉助 eth0 的外網訪問能力,就能實現 veth1 的外網訪問。

省略容器創建和鏈接命名空間,分別為容器中的網卡 veth1 和主機網卡 veth2 配置ip

可以看到這兩塊網卡能

可以看到,當我們直接 ping 時,不會有 ICMP 報文發出,提示網路不可達。這是因為 10.130.0.34和veth1不在同一網段,在沒有配置網關的情況下,也不知道應該如何發出去。

正常情況下,為了讓 veth1 ping 通 eth0,可以給 veth1 配置默認的路由規則,告訴它如果找不到合適的規則,就把數據包從 veth1 扔給 veth2。

配置好路由規則後,就能夠 ping 通 10.130.0.34 了。

ping 通10.130.0.34 並不代表數據到達了 eth0 網卡 ,因為 linux 內部網路交換和外部不一樣。梳理一下數據流程。

至此,整個 ICMP 通信完成。自始至終網卡 eth0 未參與。

上一部配置好路由,我們測試了 veth1 能夠和主機升備行任意一個 IP 地址通信。本節將藉助 eth0 訪問到網關。

其中的關鍵點在於,如何把 veth2 的數據包傳遞給 eth0

先嘗試 ping 一下網關,然後抓取 veth2 的數據包,發現只有請求報文,沒有響應報文。

再抓取物理網卡(我這里是物理網卡名稱是 enp0s3f0,也就是圖式的 eth0,統一用 eth0 代表物理網卡)上的數據包。發現沒有任何數據包。

為了讓數據包從虛擬網卡 veht2 發到 eth0,需要用到 ip_forward ,也就是啟用內核的數據包轉發功能。數據轉發功能能夠讓內核接收到不屬於本機的數據包時,根據 數據包的目的 ip 地址將數據包通過合適的網卡轉發出去。

sysctl -w net.ipv4.ip_forward=1
ping 網關測試,可以連通,抓取物理網卡信息,同時存在請求和響應報文。

既然 ping 通了網關,就意味著數據包已經轉發出去了,那麼可以訪問區域網其滾培他主機或者公網嗎。

首先測試一下區域網訪問,ping 不通,我們在區域網的 179 這台主機上抓包。可以看到 179 收到了 ICMP 請求包,也將應答包發給了網關。

再抓取一下本機網卡,可以看見本機確實沒有收到 ICMP 應答包。

這個問題就比較有意思,前一節,網關收到了 ICMP 請求,能夠封裝 ICMP 應答包回復給主機,而如果網關收到其他主機的 ICMP 回程報文,則由於網關不能正確傳遞。

其實不傳遞才是正常的,當網關收到 179 發來的 ICMP 應吵嘩答報文時,需要投遞給 192.168.0.101,但是網關上沒有這樣一個匹配的規則,只能走默認路由或者丟棄。
當我們 ping 網關時,猜測應答有一些特殊操作,能夠正確將應答包原路返回 這個問題我暫時也不清楚 。

為了讓數據包能正確的被路由,需要使用到 SNAT 技術。

SNAT 功能比較簡單,就是將源地址在 192.168.0.0/24 這個網段的數據包,將其源地址轉換以後,發送出去,用 iptables 規則就可以實現。
root@merore ~$ iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

此時再 ping 一下其他主機和公網。均能正常訪問。

抓取本機網卡數據包,可以看到發出去的數據包源ip地址都被替換為了實際的物理網卡地址 10.130.0.34

至此,就手動完成了單主機下容器與外網通信的整個流程。

容器網路與外網通信用到的技術

其實這里還遺留了一個問題,在配置 SNAT 之後, 我們能夠理解數據包能正確的發出去,eth0 網卡也能正確的收到回程報文,但此時回程報文的源地址是 10.130.0.179,目的地址是 10.130.0.34 。這樣一個數據包又是如何正確的回傳給 虛擬網卡veth2,然後傳遞 veth1 的呢。可以參考以下鏈接。
https://blog.csdn.net/sinat_33822516/article/details/81088724

② docker從容器中怎麼訪問宿主機

例如你的docker環境的虛擬IP是192.168.99.100,那麼宿主機同樣會託管一個和192.168.99.100同網段的虛擬IP,並且會是主IP:192.168.99.1,那麼就簡單了,在容器中訪問192.168.99.1這個地址就等於訪問宿主機。

注意,通過192.168.99.1訪問宿主機,等於換了一個ip,如果資料庫或中間件限制了本機訪問或者做了ip段限制,要記得添加192.168.99.1到白名單。

Docker容器運行的時候有 host 、 bridge 、 none 三種網路可供配置。默認是 bridge ,即橋接網路,以橋接模式連接到宿主機; host 是宿主網路,即與宿主機共用網路; none 則表示無網路,容器將無法聯網。

當容器使用 host 網路時,容器與宿主共用網路,這樣就能在容器中訪問宿主機網路,那麼容器的 localhost 就是宿主機的 localhost 。

(2)虛擬機與容器之間的網路訪問擴展閱讀

宿主機和容器通信原理的問題:

考慮重啟速度:在實際的運維過程中,部分場景下,會出現主機卡死,或者docker進程卡死, 這時,最快恢復業務的方法是重啟主機。

容器在主機重啟後,可以自動恢復,因此可以做到在1到2分鍾內快速恢復業務。這一點太重要了,物理機重啟由於需要做各種硬體檢測,重啟時間一般在5到10分鍾, 虛擬機重啟一般在1分鍾以內 , 物理機顯然無法滿足需求。

重建能力很重要:

容器平台經常需要更新操作系統,或者根據需要調整主機規格。

運行一段時間後,發現內存配置偏少了, 需要添加內存。這時候申請一台新的機器加入到集群中,將舊機器下線即可。

運行多年的 ubuntu 12.04 官方已經不再維護, 需要全量替換,工作量相當大。好的方法就是使用全新的伺服器替換舊伺服器。

當發生故障,主機無法恢復時, 直接申請新伺服器加入集群即可。

③ 2個VMware虛擬機怎麼進行網路連接

首先將所有的虛擬機網路連接方式設為vmnet0,也就是橋接方式!
第二將所有的網卡設在清橋同一網段內,也就是說網路ip和子網掩碼與得到的結果子網號是一個網段。
第三就可以再啟動各個虛擬機的情況之下,互相訪問了,可以ping彼鉛老此應該沒有問題,如果防火槐正升牆沒有問題的話。

④ VMware 下,如何讓虛擬機訪問本地網路

VMWare提供了三種工作模式,它們是bridged(橋接模式)、NAT(網路地址轉換模式)和host-only(主機模式)。要想在網路管理和維護中合理應用它們,你就應該先了解一下這三種工作模式。

1.bridged(橋接模式)

在這種模式下,VMWare虛擬出來的操作系統就像是區域網中的一台獨立的主機,它可以訪問網內任何一台機器。在橋接模式下,你需要手工為虛擬 系統配置IP地址、子網掩碼,而且還要和宿主機器處於同一網段,這樣虛擬系統才能和宿主機器進行通信。同時,由於這個虛擬系統是區域網中的一個獨立的主機 系統,那麼就可以手工配置它的TCP/IP配置信息,以實現通過區域網的網關或路由器訪問互聯網。

使用橋接模式的虛擬系統和宿主機器的關系,就像連接在同一個Hub上的兩台電腦。想讓它們相互通訊,你就需要為虛擬系統配置IP地址和子網掩碼,否則就無法通信。

如果你想利用VMWare在區域網內新建一個虛擬伺服器,為區域網用戶提供網路服務,就應該選擇橋接模式。

2.host-only(主機模式)

在某些特殊的網路調試環境中,要求將真實環境和虛擬環境隔離開,這時你就可採用host-only模式。在host-only模式中,所有的虛擬系統是可以相互通信的,但虛擬系統和真實的網路是被隔離開的。

提示:在host-only模式下,虛擬系統和宿主機器系統是可以相互通信的,相當於這兩台機器通過雙絞線互連。

在host-only模式下,虛擬系統的TCP/IP配置信息(如IP地址、網關地址、DNS伺服器等),都是由VMnet1(host-only)虛擬網路的DHCP伺服器來動態分配的。

如果你想利用VMWare創建一個與網內其他機器相隔離的虛擬系統,進行某些特殊的網路調試工作,可以選擇host-only模式。

3.NAT(網路地址轉換模式)

使用NAT模式,就是讓虛擬系統藉助NAT(網路地址轉換)功能,通過宿主機器所在的網路來訪問公網。也就是說,使用NAT模式可以實現在虛擬 系統里訪問互聯網。NAT模式下的虛擬系統的TCP/IP配置信息是由VMnet8(NAT)虛擬網路的DHCP伺服器提供的,無法進行手工修改,因此虛 擬系統也就無法和本區域網中的其他真實主機進行通訊。採用NAT模式最大的優勢是虛擬系統接入互聯網非常簡單,你不需要進行任何其他的配置,只需要宿主機 器能訪問互聯網即可。

如果你想利用VMWare安裝一個新的虛擬系統,在虛擬系統中不用進行任何手工配置就能直接訪問互聯網,建議你採用NAT模式。

提示:以上所提到的NAT模式下的VMnet8虛擬網路,host-only模式下的VMnet1虛擬網路,以及bridged模式下的 VMnet0虛擬網路,都是由VMWare虛擬機自動配置而生成的,不需要用戶自行設置。VMnet8和VMnet1提供DHCP服務,VMnet0虛擬 網路則不提供

⑤ 如何設置實現虛擬機與主機之間相互通信

1、Bridged方式

虛擬系統的IP可以設置成與本機系統在同一個網段,虛擬機相當於網路內部一個獨立的機器,與本機共同插在一個Hub上,網路內的其他機器可以訪問虛擬機,虛擬機也可以訪問做此網路內其他機器,當然與本機的互訪也不成問題。

主機拔掉網線後,虛擬機無法與主機通過網路的方式進行通訊。

2、NAT方式(需要用vmnet8)

使用VMware提供的NAT和DHCP服務,虛擬機使用主機中過的虛擬網卡Vmnet8作為網關,這種方式可以實現主機和虛擬機通信基胡埋,虛擬機也能夠訪問互聯網,但是互聯網不能訪問虛擬機。

只需要設置虛擬機的網路為DHCP,就可以ping通Vmnet8了。

也可以手動設置IP,ip設置與vmnet8同網段,gateway,netmask,broadcast設置與vmnet8相同,dns設置與主機相同。

如果使用NAT方式:確保Eidt-Virtual Network Editor中的DHCP處於Start狀態

3、host-only方式(需要用vmnet1)

只能進行虛搏螞擬機和主機之間的網路通信,虛擬機不能訪問外部網路。

將虛擬機ip設置與vmnet1同網段,gateway設置成vmnet1的ip,其餘設置與vmnet1相同,dns設置與主機相同

對於所有的聯網方式:注意關閉防火牆

⑥ VirtualBox四種網路連接方式

VirtualBox中有4種網路連接方式:

VMWare中有三種,其實他跟VMWare 的網路連接方式都是一樣概念,只是比VMWare多了Internal方式。

下圖說明了這四種方式的區別:

NAT:Network Address Translation,網路地址轉換
NAT模式是最簡單的實現虛擬機上網的方式,可以這樣理解:

虛擬機與主機的關系 :只能單向訪問,虛擬機可以通過網路訪問到主機,主機無法通過網路訪問到虛擬機。
虛擬機與網路中其他主機的關系 :只能單向訪問,虛擬機可以訪問到網路中其他主機,其他主機不能通過網路訪問到虛擬機。
虛擬機與虛擬機的關系 :相互不能訪問,虛擬機與虛擬機各自完全獨立,相互間無法通過網路訪問彼此。

特點
1、如果主機可以上網,虛擬機可以上網
2、虛擬機之間不能ping通
3、虛擬機可以ping通主機(此時ping虛擬機的網關,即是ping主機)
4、主機不能ping通虛擬機

應用場景
虛擬機只要求可以上網,無其它特殊要求,滿足最一般需求。

ip樣式
ip 10.0.2.15
網關 10.0.2.2
注意此處的網關在不同虛擬機中可能是同答檔一個值,但是這歸屬於不同的NAT Engine,因此實際上各個虛擬機用的不是同一個網關。

原理
虛擬機的請求傳遞給NAT Engine,由它來利用主機進行對外的網路訪問,返回的數據包再由NAT Engine給虛擬機。

網橋模式,可以這樣理解:

虛擬機與主機的關系 :可以相互訪問,因為虛擬機在真實網路段中有獨立IP,主機與虛擬機處於同一網路段中,彼此可以通過各自IP相互訪問。

虛擬機於網路中其他主機的關系 :可以相互訪問,同樣因為虛擬機在真實網路段中有獨立IP,虛擬機與所有網路其他主機處於同一網路段中,彼此可以通過各自IP相互訪問。

虛擬機與虛擬機的關系 :可以相互訪問,原因同上。

特點
1、如果主機可以上網,虛擬機可以上網
2、虛擬機之間可以ping通
3、虛擬機可以ping通主機
4、主機可以ping通虛擬機

以上各點基於一個前提:主機可以上網
5、如果主機不可以上網,所有1-4特點均無

應用場景
虛擬機要求可以上網,且虛擬機完全模擬一台實體機。

ip樣式
ip 與本機ip在同一網段內
網關 與本機網關相同

原理
通過主機網卡,架設一條橋,直接連入到網路中。它使得虛擬機能被分配到一個網路中獨立的IP,所有網路功能完全和在網路中的真實機器一樣扒廳。

(虛擬機是通過主機所在網路中的DHCP服務得到ip地址的,所以按理來說,兩者是完全獨立的,但事實卻是虛擬機是沒有獨立硬體的,它還是要依靠主機的網卡,因此,主機要斷開網路,虛擬機也就沒法拿到ip了,所以所有特點就全消失了)

內網模式,顧名思義就是內部網路模式:

虛擬機與網路中其他主機的關系:不能相互訪問,理由同上。

虛擬機與虛擬機的關系 :可以相互訪問,前提是在設置網路時,兩台虛擬機設置同一網路名稱。如上配置圖中,名稱為intnet。

特清此亂點
1、虛擬機不可以上網
2、虛擬機之間可以ping通
3、虛擬機不能ping通主機
4、主機不能ping通虛擬機

應用場景
讓各台虛擬機處於隔離的區域網內,只讓它們相互通信,與外界(包括主機)隔絕。

虛擬機ip配置要點
對於XP自動獲取ip即可,但對於linux,必須 手動配置ip和子網掩碼 ,手動配置時需保證各個虛擬機ip在同一網段。

ip樣式
ip 169.254.147.9
子網掩碼 255.255.0.0

默認網關

原理
各個虛擬機利用VirtualBox 內置的DHCP伺服器 得到ip,數據包傳遞不經過主機所在網路,因此安全性高,防止外部抓包。

主機模式,這是一種比較復雜的模式,需要有比較扎實的網路基礎知識才能玩轉。可以說前面幾種模式所實現的功能,在這種模式下,通過虛擬機及網卡的設置都可以被實現。

我們可以理解為Guest在主機中 模擬出一張專供虛擬機使用的網卡 ,所有虛擬機都是連接到該網卡上的,我們可以通過設置這張網卡來實現上網及其他很多功能,比如(網卡共享、網卡橋接等)。

虛擬機與主機的關系 :默認不能相互訪問,雙方不屬於同一IP段,host-only網卡默認IP段為192.168.56.X 子網掩碼為255.255.255.0,後面的虛擬機被分配到的也都是這個網段。通過網卡共享、網卡橋接等,可以實現虛擬機於主機相互訪問。

虛擬機與網路主機的關系 :默認不能相互訪問,原因同上,通過設置,可以實現相互訪問。

虛擬機與虛擬機的關系 :默認可以相互訪問,都是同處於一個網段。

特點

1、虛擬機不可以上網。
2、虛擬機之間可以ping通。
3、虛擬機可以ping通主機。(注意這里虛擬機與主機ping通是指通過主機的名為VirtualBox Host-Only Network的網卡,因此ip是該網卡ip 192.168.56.1,而不是你現在正在上網所用的ip。)
4、主機可以ping通虛擬機。(注意這里是指主機通過VirtualBox Host-Only Network的網卡ping通虛擬機,使用你現在正在上網所用的網卡是ping不通的。)

應用場景

在主機無法上網的情況下(主機可以上網的情況下可以用host-only,也可以用橋接),需要搭建一個模擬區域網,所有機器可以互訪。

ip樣式
ip 與本機VirtualBox Host-Only Network的網卡ip在同一網段內(默認192.168.56.*)
網關 本機VirtualBox Host-Only Network的網卡ip(默認192.168.56.1)

原理
通過VirtualBox Host-Only Network網卡進行通信,虛擬機以此ip作為網關,因此模擬了一個本機與各個虛擬機的區域網,如名稱所指。