查詢該容器的eth0網卡
㈠ 查看linux 系統 當前使用的網卡
watch cat /proc/net/dev
看下哪張網卡的流量變化大一般就是哪張網卡是在線使用的
網卡禁用啟用要確定在線服務的網卡下,免得把伺服器給斷網了
ifup eth1 激活eth1網卡
ifdown eth1 關閉eth1網卡
如果要完全禁用網卡
vi /etc/sysconfig/network-scripts/ifcfg-eth1
onboot=NO
㈡ 怎麼在linux 系統下查看網卡狀態信息
方法一:
ethtool eth0 採用此命令可以查看到網卡相關的技術指標。
(不一定所有網卡都支持此命令)
ethtool -i eth1 加上 -i 參數查看網卡驅動。
可以嘗試其它參數查看網卡相關技術參數。
方法二:
也可以通過dmesg | grep eth0 等看到網卡名字(廠家)等信息。
通過查看 /etc/sysconfig/network-scripts/ifcfg-eth0 可以看到當前的網卡配置包括IP、網關地址等信息。
當然也可以通過ifconfig命令查看。
㈢ 命令查看,怎麼沒有網卡eth0,或者eth1等等
CentOS下找不到eth0設備的解決方法
問題描述:
ifconfig命令無法找到eth0設備,且/etc/sysconfig/network-scripts/中只有ifcfg-lo文件,而沒有ifcfg-eth0。
臨時解決方法一:
使用命令ifconfig eth0 192.168.1.x可以正常設置eth0的IP,該方法僅為臨時處理辦法,系統重啟後即失效了。
永久解決方法二:
1、在/etc/sysconfig/network-scripts/目錄下新建ifcfg-eth0文件;
2、正確設置ifcfg-eth0的DEVICE、BOOTPROTO、ONBOOT、IPADDR、GATEWAY、DNS1、DOMAIN、NETMASK、NETWORK、NAME等等,比如:
DEVICE=eth0
㈣ 如何在Linux 下查看網卡硬體信息
方法一:
ethtool eth0 採用此命令可以查看到網卡相關的技術指標
(不一定所有網卡都支持此命令)
ethtool -i eth1 加上 -i 參數查看網卡驅動
可以嘗試其它參數查看網卡相關技術參數
方法二:
也可以通過dmesg | grep eth0 等看到網卡名字(廠家)等信息
通過查看 /etc/sysconfig/network-scripts/ifcfg-eth0 可以看到當前的網卡配置包括IP、網關地址等信息。
當然也可以通過ifconfig命令查看。
㈤ 在Redhat Linux9.0 中查詢網卡信息的命令是什麼
ifconfig命令查看網卡的信息。
舉例說明:
#ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:F3:3B:F2
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:78 errors:0 dropped:0 overruns:0 frame:0
TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:11679 (11.4 Kb) TX bytes:14077 (13.7 Kb)
Interrupt:10 Base address:0x1080
第一行:連接類型:Ethernet(乙太網)HWaddr(硬體mac地址)
第二行:網卡的IP地址、子網、掩碼
第三行:UP(代表網卡開啟狀態)RUNNING(代表網卡的網線被上)MULTICAST(支持組播)MTU:1500(最大傳輸單元):1500位元組
第四、五行:接收、發送數據包情況統計
第七行:接收、發送數據位元組數統計信息。
㈥ linux如何查看本機乙太網卡名
ifconfig 就可以看
這個是看當前系統啟動了的網卡信息的 類似eth0 eth1等等
如果沒有啟動的話 可以到/etc/sysconfig/network-scripts去看配置文件
cat ifcfg-eth0 或 cat ifcfg-eth1
用ifup eth0可以將網卡啟動
1
㈦ 單host下Docker的默認網路配置
本文用到的環境如下:
host: centos7
docker: 通過 yum install -y docker 安裝,版本號為1.10.3
docker鏡像:
# Version: 0.0.1 FROM ubuntu:latest MAINTAINER paul liu "[email protected]" RUN apt-get update RUN apt-get install -y net-tools RUN apt-get install -y iputils-ping CMD /bin/bash
場景圖:
我的host主機接有無線路由器,通過ADSL撥號上網,網卡eth0固定IP為192.168.0.200,網關為路由器的IP 192.168.0.1。
在host上安裝docker,並運行容器。
通過以下命令安裝docker,
yum install -y docker
啟用docker,
systemctl start docker
然後在host主機運行 ifconfig 或 ip a 命令,可以看到除去host原有的網卡eth0和回環lo外,多了個docker0。
docker0 IP為172.17.0.1,所在的網段默認為B類私網地址172.17.0.0/16。可以將docker0看做是host主機的一塊虛擬網卡。這樣host主機就等同於配置了雙網卡,兩塊網卡之間可以通信,但前提是啟用ip_forward。
這是docker0的第一個身份。
運行兩個容器docker1,docker2,然後在host主機上運行 brctl show 查看,
這里可以看出docker0的第二個身份,一個虛擬交換機。每運行一個容器,就會產生一對veth,其中一端連接到docker0上,另一端連接到容器的eth0上。這樣,所有連接到docker0的容器組成了一個區域網。如下圖:
在host主機上運行 ifconfig ,也會發現多了兩個veth這樣的網路介面。
在host主機上運行 ip addr show veth6d9a691 ,可以查看到該veth具有mac地址,這也正說明了docker0的虛擬交換機的身份,交換機是通過mac地址通信的,連接到交換機的設備必須具有mac地址。
由於docker0自身也具有mac地址,這個與純二層交換機是不同的,並且綁定了IP 172.17.0.1,容器默認把docker0作為了網關。也就是docker0還兼具路由的功能,因此可以把docker0看做是一個三層交換機,可以做二層數據包轉發,也可以做三層路由轉發。
在容器中運行 route -n 查看路由如下:
在host主機上運行 route -n 查看路由如下:
在host中,訪問本網段192.168.0.0是通過eth0轉發數據包的,訪問172.17.0.0網段是通過docker0轉發數據包的,而對於其他如公網是通過eth0將數據包轉發給網關192.168.0.1,再由該網關進行數據包轉發的,比如上網。
在容器中運行 ping sohu.com 或 ping 192.168.0.200 都可以ping通。
默認情況下,不需要再額外做任何配置,在一台host主機上,通過docker0,各容器之間可以互通,並且可以通過host的eth0連接外網。
通俗的講,通過docker0組成了一個網段為172.17.0.0/16的乙太網,docker容器發起請求時,如果是相同網段則經由docker0轉發到目標機器,如果是不同網段,則經由docker0,轉發到host的另一塊網卡eth0上,由eth0負責下一步的數據包轉發,比如公網地址。
下面進一步分析一下報文是怎麼發送到外面的。
容器內部發送一條公網請求報文,通過eth0,在veth被接收。此時報文已經來到了主機上,通過查詢主機的路由表( route -n ),如果發現報文應該通過主機的eth0,從默認網關發送出去,那麼報文就被從docker0轉發給主機的eth0,但前提是首先啟用ip_forward功能,才能在host主機的docker0和eth0兩個網卡間傳遞數據包。
由於目標地址並不屬於host主機所在網段,那麼會匹配機器上的 iptables中的nat表POSTROUTING鏈中的規則。
在host主機運行命令 iptables -L -n -t nat --line-numbers ,查看nat表,這里只看POSTROUTING鏈:
第一行中說明,對於源地址為172.17.0.0/16網段的數據包,發出去之前通過MQSQUERADE偽裝。linux內核會修改數據包源地址為host主機eth0的地址(也就是192.168.0.200),然後把報文轉發出去。對於外部來說,報文是從主機eth0發送出去的。
區域網內的機器由於都是私有IP,是無法直接訪問互聯網的(數據包可以發出去,但回不來。)如果要上網,除了可以通過硬體路由器,也可以通過軟體路由,在iptables的nat表中的POSTROUTING鏈中添加SNAT規則。
測試一下,在host主機運行命令 iptables -t nat -D POSTROUTING 1 將第一條規則刪掉,那麼在容器中就運行命令 ping sohu.com 就ping不通了。但仍然可以ping通host主機。
在host主機運行命令以下命令恢復:
iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -o eth0 -j SNAT --to-source 192.168.0.200
或者
iptables -t nat -I POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
關於SNAT和MASQUERADE,這篇文章已經有過描述,可以參考: Docker前傳之linux iptables
新建一Dockerfile,用以運行nginx容器:
# Version: 0.0.1 FROM paulliu/ubuntu_ip RUN apt-get install -y nginx EXPOSE 80
在host主機運行構建命令構建鏡像 docker build -t paulliu/nginx .
在host主機運行容器啟動命令 docker run -d -p 80 --name nginx1 paulliu/nginx nginx -g "daemon off;"
在host主機查看容器的埠映射 docker port nginx1 80
在host主機運行命令 iptables -nat -L -n 可以看到在PREROUTING鏈中多了以下DNAT規則:
也就是在容器啟動時通過 -p 80 將host主機192.168.0.200:32773映射為容器172.17.0.4:80。
注意:docker容器每次啟動時獲取的IP地址未必是一樣的,而且 -p 80 是在host主機上隨機選擇一個埠號進行映射,每次啟動的埠號也未必是一樣的。但iptables中相關的規則是自動變更的。
在host主機運行 curl localhost:32773 或者在其他主機運行 curl 192.168.0.200:32773 結果如下:
㈧ 在linux下如何通過命令查網卡配置
在linux下通過命令查網卡配置的方法如下:
1、首先在電腦上打開Linux系統,然後進入Linux系統的終端窗口。
㈨ Docker容器間網路互聯原理,講不明白算我輸
如上紅字所描述:同一個宿主機上的不同容器之間的網路如何互通的???
我們安裝完docker之後,docker daemon會為我們自動創建3個網路,如下:
其實docker有4種網路通信模型,分別是:bridge、host、none、container
默認的使用的網路模型是bridge,也是我們生產上會使用到的網路模型。
下文中跟大家分享docker容器互通原理到時候呢,用到的也是bridge網路模型
另外,當我們安裝完docker之後,docker會為我們創建一個叫docker0的網路設備
通過ifconfig命令可以查看到它,看起來它貌似和eth0網路地位相當,像是一張網卡。然而並不是,docker0其實是一個Linux網橋
何以見得?可以通過下面的命令查看操作系統上的網橋信息
那大家怎麼理解Linux網橋的概念呢?
其實大家可以把docker0理解成一台虛擬的交換機!然後像下面這樣類比著理解,就會豁然開朗
1、它好比是大學在機房上課時,老師旁邊的那個大大的交換機設備。
2、把機房裡的電腦都連接在交換機上,類比成docker 容器作為一台設備都連接著宿主機上的docker0。
3、把交換機和機房中的機器的ip在同一個網段,類比成docker0、和你啟動的docker容器的ip也同屬於172網段。
類比成這樣:
我們剛才做類比理解docker0的時候說:把機房裡的電腦都連接在交換機上,類比成docker 容器作為一台設備都連接著宿主機上的docker0。那具體的實現落地實現用的是啥技術呢?
答案是:veth pair
veth pair的全稱是:virtual ethernet,就是虛擬的乙太網卡。
說到乙太網卡大家都不陌生呀,不就是我們常見的那種叫eth0或者是ens的網路設備嗎?
那這個veth pair是怎麼玩的呢?有啥用呢?大家可以看下面這張圖
veth-pair設備總是會成對的出現,用於連接兩個不同network-namespace.
就上圖來說,從network-namespace1的veth0中發送的數據會出現在 network-namespace2的veth1設備中。
雖然這種特性很好,但是如果出現有多個容器,你就會發現組織架構會越來越復雜,越來越亂
不過好在我們已經循序漸進的了解Linux網橋(docker0),以及這里的veth-pair設備,於是我們可以把整體的架構圖重新繪製成下面這樣
因為不同容器有自己隔離後的network-namespace所以他們都有自己的網路協議棧
那我們能不能找到容器裡面的網卡和物理機上的哪張卡是一對網路vethpair設備呢?
如下:
回到宿主機
意思是就是說,容器545ed62d3abf的eth0網卡和宿主機通過ip addr命令查看的網路設備標號55的設備組成一對vethpair設備,彼此流量互通!
先看個簡單的,同一個區域網中的不同主機A、B之間是如何互聯交換數據的。如下圖
那,既然是同一個區域網中,說明A、B的ip地址在同一個網段,如上圖就假設它們都在192.168.1.0網段。
還得再看下面這張OSI 7層網路模型圖。
主機A向主機B發送數據,對主機A來說數據會從最上層的應用層一路往下層傳遞。比如應用層使用的http協議、傳輸層使用的TCP協議,那數據在往下層傳遞的過程中,會根據該層的協議添加上不同的協議頭等信息。
根據OSI7層網路模型的設定,對於接受數據的主機B來說,它會接收到很多數據包!這些數據包會從最下層的物理層依次往上層傳遞,依次根據每一層的網路協議進行拆包。一直到應用層取出主機A發送給他的數據。
那麼問題來了,主機B怎麼判斷它收到的數據包是否是發送給自己的呢?萬一有人發錯了呢?
答案是:根據MAC地址,邏輯如下。
那對於主機A來說,它想發送給主機B數據包,還不能讓主機B把這個數據包扔掉,它只能中規中矩的按乙太網網路協議要求封裝將要發送出去的數據包,往下傳遞到數據鏈路層(這一層傳輸的數據要求,必須要有目標mac地址,因為數據鏈路層是基於mac地址做數據傳輸的)。
那數據包中都需要哪些欄位呢?如下:
其中的dst ip好說,我們可以直接固定寫,或者通過DNS解析域名得到目標ip。
那dst mac怎麼獲取呢?
這就不得不說ARP協議了! ARP其實是一種地址解析協議,它的作用就是:以目標ip為線索,找到目的ip所在機器的mac地址。也就是幫我們找到dst mac地址!大概的過程如下幾個step
推薦閱讀:白日夢的DNS筆記
簡述這個過程:主機A想給主機B發包,那需要知道主機B的mac地址。
嗯,在arp協議的幫助下,主機A順利拿到了主機B的mac地址。於是數據包從網路層流轉到數據鏈路層時已經被封裝成了下面的樣子:
根據OIS7層網路模型,我們都知道數據包經過物理層發送到機器B,機器B接收到數據包後,再將數據包向上流轉,拆包。流轉到主機B的數據鏈路層。
那主機B是如何判斷這個在數據鏈路層的包是否是發給自己的呢?
答案前面說了,根據目的mac地址判斷。
這個例子比較簡單,dst ip就是主機B的本機ip 所以它自己會處理這個數據包。
那數據包處理完之後是需要給主機A一個響應包,那問題又來了,響應包該封裝成什麼樣子呢?對主機B來說響應包也需要src ip、src mac、dst ip、dst mac
同樣的道理,響應包也會按照如下的邏輯被主機A接受,處理。
這一次,讓我在網路告訴你,當你請求 www..com 時都發生了什麼?
有了上面那些知識儲備呢?再看我們今天要探究的問題,就不難了。
如下紅字部分:同一個宿主機上的不同容器是如何互通的?
那我們先分別登陸容器記錄下他們的ip
先看實驗效果:在9001上curl9002
實驗結果是網路互通!
我們再完善一下上面的圖,把docker0、以及兩個容器的ip補充上去,如下圖:
那兩台機器之前要通信是要遵循OSI網路模型、和乙太網協議的。
我們管172.17.0.2叫做容器2
我們管172.17.0.3叫做容器3
比如我們現在是從:容器2上curl 容器3,那麼容器2也必須按照乙太網協議將數據包封裝好,如下
那現在的問題是容器3的mac地址是多少?
容器2會先查自己的本地緩存,如果之前沒有訪問過,那麼緩存中也沒有任何記錄!
不過沒關系,還有arp機制兜底,於是容器2會發送arp請求包,大概如下
容器2會查詢自己的路由表,將這個arp請求從自己的gateway發送出去
我們發現容器2的網關對應的網路設備的ip就是docker0的ip地址,並且經由eth0發送出去!
哎?eth0不就是我們之前說的veth-pair設備嗎?
並且我們通過下面的命令可以知道它的另一端對應著宿主機上的哪個網路設備:
而且我們可以下面的小實驗,驗證上面的觀點是否正確
所以說從容器2的eth0出去的arp請求報文會同等的出現在宿主機的第53個網路設備上。
通過下面的這張圖,你也知道第53個網路設備其實就是下圖中的veth0-1
所以這個arp請求包會被發送到docker0上,由docker0拿到這個arp包發現,目標ip是172.17.0.3並不是自己,所以docker0會進一步將這個arp請求報文廣播出去,所有在172.17.0.0網段的容器都能收到這個報文!其中就包含了容器3!
那容器3收到這個arp報文後,會判斷,哦!目標ip就是自己的ip,於是它將自己的mac地址填充到arp報文中返回給docker0!
同樣的我們可以通過抓包驗證,在宿主機上
於是容器2就拿到了容器3的mac地址,乙太網數據包需要的信息也就齊全了!如下:
再之後容器2就可以和容器3正常互聯了!
容器3會收到很多數據包,那它怎麼知道哪些包是發給自己的,那些不是呢?可以參考如下的判斷邏輯