1. 程式人生 > >Linux-虛擬網路裝置-LinuxBridge

Linux-虛擬網路裝置-LinuxBridge

基本概念

       bridge是一個虛擬網路裝置,具有網路裝置的特性(可以配置IP、MAC地址等);而且bridge還是一個虛擬交換機,和物理交換機裝置功能類似。網橋是一種在鏈路層實現中繼,對幀進行轉發的技術,根據MAC分割槽塊,可隔離碰撞,將網路的多個網段在資料鏈路層連線起來的網路裝置。
       對於普通的物理裝置來說,只有兩端,從一段進來的資料會從另一端出去,比如物理網絡卡從外面網路中收到的資料會轉發到核心協議棧中,而從協議棧過來的資料會轉發到外面的物理網路中。而bridge不同,bridge有多個埠,資料可以從任何埠進來,進來之後從哪個口出去原理與物理交換機類似,需要看mac地址。
       bridge是建立在從裝置上(物理裝置、虛擬裝置、vlan裝置等,即attach一個從裝置,類似於現實世界中的交換機和一個使用者終端之間連線了一根網線),並且可以為bridge配置一個IP(參考LinuxBridge MAC地址行為

),這樣該主機就可以通過這個bridge裝置與網路中的其他主機進行通訊了。另外它的從裝置被虛擬化為埠port,它們的IP及MAC都不在可用,且它們被設定為接受任何包,最終由bridge裝置來決定資料包的去向:接收到本機、轉發、丟棄、廣播。

作用

       bridge是用於連線兩個不同網段的常見手段,不同網路段通過bridge連線後就如同在一個網段一樣,工作原理很簡單就是L2資料鏈路層進行資料包的轉發。

工作原理

基本原理圖如下(來源於網路):


這裡寫圖片描述

資料流向(來源於網路):

這裡寫圖片描述

      bridge和route比較相似,都可以用來分發網路資料包,它們的本質不同在於:route在L3網路層,使用路由協議、bridge在L2資料鏈路層,通過學習和快取在鏈路上傳輸的資料包中的源地址以及物理層的輸入埠:
  • 收到新資料包時,記錄源MAC地址和輸入埠

  • 根據資料包中的目的MAC地址查詢本地快取,如果能找到對應的MAC地址記錄

  • 若發現記錄不在本地網路,直接丟棄資料包
  • 若發現記錄存在對應的埠,則將資料包直接從該埠轉發出去
  • 如果本地快取中不存在任何記錄,則在本網段中進行廣播。

這裡寫圖片描述

因此,通過Linux bridge來實現打通容器網路是一個非常有效的方法,同步bridge,我們可以做到:
  • 連線同宿主機內所有容器的虛擬網路
  • 打通容器內網與外網,通過bridge將資料轉發到真實的往裡網絡卡eth0中。

常用命令

brctl

安裝與配置

#安裝bridge-utils軟體包,並載入bridge模組和開啟核心轉發。
root@ubuntu
:/home/sunld# apt-get install bridge-utils root@ubuntu:/home/sunld# modprobe bridge root@ubuntu:/home/sunld# echo "1">/proc/sys/net/ipv4/ip_forward

命令顯示

[email protected]:/home/sunld# brctl
Usage: brctl [commands]
commands:
    addbr       <bridge>        add bridge
    delbr       <bridge>        delete bridge
    addif       <bridge> <device>   add interface to bridge
    delif       <bridge> <device>   delete interface from bridge
    hairpin     <bridge> <port> {on|off}    turn hairpin on/off
    setageing   <bridge> <time>     set ageing time
    setbridgeprio   <bridge> <prio>     set bridge priority
    setfd       <bridge> <time>     set bridge forward delay
    sethello    <bridge> <time>     set hello time
    setmaxage   <bridge> <time>     set max message age
    setpathcost <bridge> <port> <cost>  set path cost
    setportprio <bridge> <port> <prio>  set port priority
    show        [ <bridge> ]        show a list of bridges
    showmacs    <bridge>        show a list of mac addrs
    showstp     <bridge>        show bridge stp info
    stp         <bridge> {on|off}   turn stp on/off

建立bridge

#增加一個網橋
root@ubuntu:/home/sunld# brctl addbr br0
#將現有網絡卡連線到往前,由於該網絡卡開啟了混雜模式,可以不需要配置IP,因為bridge工作在L2鏈路層
root@ubuntu:/home/sunld# ifconfig eth0 0.0.0.0 promisc
root@ubuntu:/home/sunld# ifconfig eth1 0.0.0.0 promisc
root@ubuntu:/home/sunld# brctl addif br0 eth0 eth1
#檢視已有網橋
root@ubuntu:/home/sunld# brctl show
root@ubuntu:/home/sunld# bridge link
#給bridge配置IP
root@ubuntu:/home/sunld# ifconfig br0 10.10.1.1 netmask 255.255.0.0 up

刪除bridge

root@ubuntu:/home/sunld# brctl delbr br0

關閉生成樹

#關閉生成樹協議,減少資料包汙染
root@ubuntu:/home/sunld# brctl stp br0 off

配置bridge開機啟用

root@ubuntu:/home/sunld# echo "modprobe bridge">>/etc/rc.local

#配置eth0 eth1 br0開機啟動,eth0,eth1未設定IP資訊,在啟動br0網絡卡時,開啟了eth0,eth1的混雜模式,並橋接了它們。
vim /etc/network/interfaces

auto lo eth0 eth1 br0
iface lo inet loopback
iface br0 inet static
address 10.10.10.1
netmask 255.255.0.0
gateway 10.10.10.254
pre-up ip link set eth0 promisc on
pre-up ip link set eth1 promisc on
pre-up echo "1">/proc/sys/net/ipv4/ip_forward   
bridge_ports eth0 eth1

一步一步實現bridge

建立bridge

root@ubuntu:~# ip link add br-sunld08-test type bridge
root@ubuntu:~# ip link set dev br-sunld08-test up

       當建立一個bridge時,它是一個獨立的網路裝置,只有一個埠連線者協議棧,其他埠什麼都沒有連線,此時bridge沒有任何實際功能,如下圖所示:

[email protected]:~# ip link show br-sunld08-test
48: br-sunld08-test: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/ether 1a:7b:cf:3b:08:53 brd ff:ff:ff:ff:ff:ff
[email protected]:~# brctl show br-sunld08-test
bridge name bridge id       STP enabled interfaces
br-sunld08-test     8000.000000000000   no

部署圖如下:


這裡寫圖片描述

建立veth並連線到br-sunld08-test上

建立

#建立veth
root@ubuntu:~# ip link add test-veth08 type veth peer name test-veth09
#配置IP
root@ubuntu:~# ifconfig test-veth08 192.168.209.135/24 up
root@ubuntu:~# ifconfig test-veth09 192.168.209.136/24 up
#啟動裝置
root@ubuntu:~# ip link set dev  test-veth08 up
root@ubuntu:~# ip link set dev  test-veth09 up
#把test-veth08連線到br-sunld08-test
root@ubuntu:~# ip link set dev test-veth08 master br-sunld08-test
#檢視資訊
root@ubuntu:~# bridge link | grep test-veth08
50: test-veth08 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br-sunld08-test state forwarding priority 32 cost 2 

部署圖


這裡寫圖片描述

發生的變化

當test-veth08連線到br-sunld08-test時發生的變化:

  • br-sunld08-test和test-veth08連線起來,並且是雙向的通道

  • 協議棧和test-veth08之間變成單向通道,協議棧能發資料給test-veth08,但是test-veth08從外面收到的資料不能轉發給協議棧

  • br-sunld08-test的mac地址變成了test-veth08的mac地址(可以通過 ip a檢視

    相當於bridge在test-veth08和協議棧之間做了一次攔截,將test-veth08本來要轉發給協議棧的資料攔截,全部轉發給了bridge,同時bridge也可以向test-veth08傳送資料。

連通性


注意:對於非debian系統,這裡有可能ping不通,主要是因為核心中的一些ARP相關配置導致sunld-veth1不返回ARP應答包,如ubuntu上就會出現這種情況,解決辦法如下:

root@ubuntu:/home/sunld# echo 1 > /proc/sys/net/ipv4/conf/test-veth08/accept_local
root@ubuntu:/home/sunld# echo 1 > /proc/sys/net/ipv4/conf/test-veth09/accept_local
root@ubuntu:/home/sunld# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
root@ubuntu:/home/sunld# echo 0 > /proc/sys/net/ipv4/conf/test-veth08/rp_filter
root@ubuntu:/home/sunld# echo 0 > /proc/sys/net/ipv4/conf/test-veth09/rp_filter

通過test-veth08 ping test-veth09:ping不通

[email protected]:~# ping -c 4 192.168.209.136 -I test-veth08
PING 192.168.209.136 (192.168.209.136) from 192.168.209.135 test-veth08: 56(84) bytes of data.
From 192.168.209.135 icmp_seq=1 Destination Host Unreachable
From 192.168.209.135 icmp_seq=2 Destination Host Unreachable
From 192.168.209.135 icmp_seq=3 Destination Host Unreachable
From 192.168.209.135 icmp_seq=4 Destination Host Unreachable

檢視資料包

#由於test-veth08的arp快取裡沒有test-veth09的mac地址,所以ping之前先發出arp請求
#從test-veth09上抓包來看,test-veth09收到了arp請求,並且返回了應答
[email protected]:/home/sunld# tcpdump -n -i test-veth09
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on test-veth09, link-type EN10MB (Ethernet), capture size 262144 bytes
00:22:38.369683 ARP, Request who-has 192.168.209.136 tell 192.168.209.135, length 28
00:22:38.369698 ARP, Reply 192.168.209.136 is-at 6a:11:bf:6b:21:8f, length 28
#從veth0上抓包來看,資料包也發出去了,並且也收到了返回
[email protected]:/home/sunld# tcpdump -n -i test-veth08
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on test-veth08, link-type EN10MB (Ethernet), capture size 262144 bytes
00:22:11.736906 ARP, Request who-has 192.168.209.136 tell 192.168.209.135, length 28
00:22:11.736918 ARP, Reply 192.168.209.136 is-at 6a:11:bf:6b:21:8f, length 28
#再看br0上的資料包,發現只有應答 
root@ubuntu:/home/sunld# tcpdump -n -i br-sunld08-test
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br-sunld08-test, link-type EN10MB (Ethernet), capture size 262144 bytes
00:24:48.601526 ARP, Reply 192.168.209.136 is-at 6a:11:bf:6b:21:8f, length 28


從上面的抓包可以看出,去和回來的流程都沒有問題,問題就出在test-veth08收到應答包後沒有給協議棧,而是給了br-sunld08-test,於是協議棧得不到test-veth09的mac地址,從而通訊失敗。

bridge配置IP

通過上面的分析可以看出,給test-veth08配置IP沒有意義,因為就算協議棧傳資料給test-veth08,應當包也回不來。這裡我們將test-veth08的ip配置給bridge。

root@ubuntu:~# ip addr del 192.168.209.135/24 dev test-veth08
root@ubuntu:~# ip addr add 192.168.209.135/24 dev br-sunld08-test

部署圖


這裡寫圖片描述

連通性

[email protected]:~# ping -c 4 192.168.209.136 -I br-sunld08-test
PING 192.168.209.136 (192.168.209.136) from 192.168.209.135 br-sunld08-test: 56(84) bytes of data.
64 bytes from 192.168.209.136: icmp_seq=1 ttl=64 time=0.238 ms
64 bytes from 192.168.209.136: icmp_seq=2 ttl=64 time=0.089 ms
64 bytes from 192.168.209.136: icmp_seq=3 ttl=64 time=0.243 ms
64 bytes from 192.168.209.136: icmp_seq=4 ttl=64 time=0.139 ms

但ping閘道器還是失敗,因為這個bridge上只有兩個網路裝置,分別是192.168.209.135和192.168.209.136,br0不知道192.168.209.1在哪。

[email protected]:~# ping -c 4 192.168.209.2 -I br-sunld08-test
PING 192.168.209.2 (192.168.209.2) from 192.168.209.135 br-sunld08-test: 56(84) bytes of data.
^C
--- 192.168.209.2 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2000ms

將物理網絡卡繫結到bridge

root@ubuntu:~# ip link set dev eth0 master br-sunld08-test
root@ubuntu:~# bridge link 
2: eth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br-sunld08-test state forwarding priority 32 cost 4 
50: test-veth08 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br-sunld08-test state forwarding priority 32 cost 2 

       bridge根本不區分接入進來的是物理裝置還是虛擬裝置,對於bridge來說都是一樣,都是網路裝置,所以當eth0加入bridge之後,和test-veth08的功能一樣,從外面網路收到的資料包將無條件的轉發給br0,自己變成一根網線。
       這時通過eth0 平閘道器則失敗,由於bridge通過eth0這根網線連線上了外面的物理機,所以連線到bridge上的裝置可以ping通閘道器。這裡連線到bridge的裝置是test-veth09和自己veth1是通過veth0這根網線連上去的,而br0可以理解為自己有一塊自帶的網絡卡。

刪除物理網絡卡的IP

由於eth0已經變成了和網線差不多的功能,所以在eth0上配置IP已經沒有什麼意義了,並且還會影響協議棧的路由選擇,比如如果上面ping的時候不指定網絡卡的話,協議棧有可能優先選擇eth0,導致ping不通,所以這裡需要將eth0上的IP去掉。

部署圖


這裡寫圖片描述

bridge是否需要必須配置IP

核心實現

工作過程

如下圖所示(圖片來源於網路):


這裡寫圖片描述

注意事項

IP地址

當一個裝置attach到bridge上時,該裝置上的IP則變為無效,Linux不在使用那個IP在三層接受資料。此時應該把該裝置的IP賦值給bridge裝置。

資料流向

對於一個被attach到bridge上的裝置來說,只有當它收到資料時,此包資料才會被轉發到bridge上,進而完成查詢表廣播等後續操作。當請求是傳送型別時,資料是不會被轉發到bridge上的,它會定址下一個傳送出口。使用者在配置網路時經常忽略這一點從而造成網路故障。

應用場景

vm


這裡寫圖片描述

docker


這裡寫圖片描述

其他

LinuxBridge MAC地址行為

#建立bridge,檢視預設mac
root@ubuntu:~# ip link add br-mac type bridge
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether f6:b0:c9:7c:04:1d brd ff:ff:ff:ff:ff:ff
#建立裝置veth
root@ubuntu:~# ip link add mac-veth01 type veth peer name mac-veth02
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether f6:b0:c9:7c:04:1d brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff

#attach mac-veth01(大MAC)
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50(自動變為mac-veth01的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff

#attach mac-veth02(小MAC)
root@ubuntu:~# ip link set dev mac-veth02 master br-mac
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether 92:a2:23:d5:88:56(變化為小mac,mac-veth02的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether 92:a2:23:d5:88:56 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff

#增加mac-veth02的mac
root@ubuntu:~# ifconfig mac-veth02 hw ether de:ee:ff:8d:0c:51
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50(變化為小mac,mac-veth01的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff
#更改br-mac的mac(大mac)
root@ubuntu:~# ifconfig br-mac hw ether de:ee:ff:8d:0c:52
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:52(變化為指定的mac) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff

#設定br-mac same as mac-veth01,mac-veth02 mac減小
root@ubuntu:~# ifconfig br-mac hw ether de:ee:ff:8d:0c:50
root@ubuntu:~# ifconfig mac-veth02 hw ether de:ee:ff:8d:0c:49
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50(和設定的mac一樣,不變) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff

#增加mac-veth01的mac
root@ubuntu:~# ifconfig mac-veth01 hw ether de:ee:ff:8d:0c:51
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50(mac不變) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
#增加新的裝置
root@ubuntu:~# ip link add mac-veth03 type veth peer name mac-veth04
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50 brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
23: mac-veth04: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 46:62:dd:cd:4f:41 brd ff:ff:ff:ff:ff:ff
24: mac-veth03: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether c6:3f:65:95:e0:93 brd ff:ff:ff:ff:ff:ff
#attach mac-veth04(小mac)
root@ubuntu:~# brctl addif br-mac mac-veth04
20: br-mac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether de:ee:ff:8d:0c:50(不變) brd ff:ff:ff:ff:ff:ff
21: mac-veth02: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:49 brd ff:ff:ff:ff:ff:ff
22: mac-veth01: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether de:ee:ff:8d:0c:51 brd ff:ff:ff:ff:ff:ff
23: mac-veth04: <BROADCAST,MULTICAST> mtu 1500 qdisc noop master br-mac state DOWN group default qlen 1000
    link/ether 46:62:dd:cd:4f:41 brd ff:ff:ff:ff:ff:ff
24: mac-veth03: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether c6:3f:65:95:e0:93 brd ff:ff:ff:ff:ff:ff

結論

br0如果沒有指定hw MAC, br0的MAC地址會根據bridge中port的變化,自動選擇port中最小的一個MAC地址作為br0的MAC地址。br0只能指定port中有的interface的MAC作為br0的MAC地址。

參考資料

相關推薦

Linux-虛擬網路裝置-LinuxBridge

基本概念        bridge是一個虛擬網路裝置,具有網路裝置的特性(可以配置IP、MAC地址等);而且bridge還是一個虛擬交換機,和物理交換機裝置功能類似。網橋是一種在鏈路層實現中繼,對幀進行轉發的技術,根據MAC分割槽塊,可隔離碰撞,將網路的多個

Linux-虛擬網路裝置-veth pair

基本概念 Virtual Ethernet Cable Bidirectional FIFO Often used to cross namespaces        Linux container 中用到一個叫做veth的東西,這是一種新的裝置,專門

Linux-虛擬網路裝置-OpenvSwitch(持續更新)

概述      OpenvSwitch,簡稱OVS是一個虛擬交換軟體,主要用於虛擬機器VM環境,作為一個虛擬交換機,支援Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。 在虛擬化平臺上,OVS 可以為動態變化的端

Linux虛擬網路裝置之bridge(橋)

繼前兩篇介紹了tun/tap和veth之後,本篇將介紹Linux下常用的一種虛擬網路裝置,那就是bridge(橋)。本篇將通過實際的例子來一步一步解釋bridge是如何工作的。什麼是bridge?首先,bridge是一個虛擬網路裝置,所以具有網路裝置的特徵,可以配置IP

Linux】Ubuntu14.04虛擬網路裝置TUN安裝

1、檢測系統中是否存在TUN模組,ctrl+alt+t開啟Ubuntu終端,輸入: ①modinfo tun modinfo: ERROR: Module tun not found. ②modprobe tun lsmod | grep tun 沒有任何輸出 就是說沒有

Linux系統網路裝置啟動和禁止“ifconfig eth0 up/down”命令的跟蹤

前面文章講了Linux系統的ethtool框架的一些東西,是從使用者空間可以直觀認識到的地方入手。同樣,本文從Linux系統絕大部分人都熟悉的“ifconfig eth0 up”命令來跟蹤一下此命令在核心中的發生了什麼事情。由於ifconfig啟動(up)和禁止(down)

Linux驅動-網路裝置(1)

1.Linux網路裝置驅動結構 Linux網路裝置驅動體系分為四層,從上往下依次為 網路協議介面層,網路裝置介面層,裝置驅動功能層,網路裝置與媒介層 這裡值得一提的是Linux網路裝置體系和TCP,IP協議棧之間的關係.下圖是TCP/IP結構圖 Linux網路驅

網路虛擬化之linux虛擬網路基礎

1 linux虛擬網路基礎 1.1 Device 在linux裡面devic(裝置)與傳統網路概念裡的物理裝置(如交換機、路由器)不同,Linux所說的裝置,其背後指的是一個類似於資料結構、核心模組或裝置驅動這樣的含義。就是說device可能只是軟體系統裡的一個驅動,一個函式介面。 1.2 Tap Tap位於

linux虛擬機器網路配置

本文網路配置以CentOS-6.9系統為例  1.輸入命令vim  /etc/sysconfig/network-scripts/ifcfg-eth0 開啟配置檔案,沒有vim的可用vi或者nano 2.將ONBOOT=no改成yes,NM_CONTROLLED=yes改為no 3.

Linux 上的基礎網路裝置詳解

Linux 抽象網路裝置簡介 和磁碟裝置類似,Linux 使用者想要使用網路功能,不能通過直接操作硬體完成,而需要直接或間接的操作一個 Linux 為我們抽象出來的裝置,既通用的 Linux 網路裝置來完成。一個常見的情況是,系統裡裝有一個硬體網絡卡,Linux 會在系統裡為其生成一個網路裝置例

Linux 學習之路 --------ip地址虛擬網路

// ifconfig 檢視IP地址 網路資訊   我的IP  39.161.136.25 ①     為網絡卡臨時配置IP地址 ifconfig eth0 39.161.136.5 (netmask /255.255.255.0&n

Linux--虛擬機器的網路,DNS的設定及nmcli命令

虛擬機器的網路 實驗目標: 讓node1連線主機上網 實驗過程: 1.檢查真機是否連線網路 2給desktop配置閘道器並重啟網路 3開啟真機防火牆和路由功能 實驗結果: desktop可以ping通百度ip 實驗糾錯思路: DNS DNS 的全稱是 Domain N

linux驅動開發-第11部分-5.11.網路裝置驅動介紹》

《linux驅動開發-第11部分-5.11.網路裝置驅動介紹》 第一部分、章節目錄 5.11.1.網路裝置驅動概述 5.11.2.虛擬網絡卡驅動分析1 5.11.3.虛擬網絡卡驅動分析2 5.11.4.DM9000驅動原始碼分析1 5.11.5.DM9000驅動原始碼分析2 第二部分

虛擬機器Linux作業系統網路配置

本人使用的工具:         虛擬化工具使用的VMware,相關參考資料https://mp.csdn.net/postedit/84617285         Linux作業系統版本CentOS6.5.m

Linux虛擬機器使用物理機網路

通過VMware安裝的虛擬機器,以centos7.1為例,三種方式中的一種。 1、首先在Windows系統下開啟命令列介面:win+R–>cmd回車,輸入IPconfig檢視IP以及子網閘道器等,注意虛擬機器這一欄 即VMware Network Adapter VMnet8.如圖:

Linux虛擬機器與主機網路連線配置與檔案傳輸

網路配置 對於VMware虛擬機器 1. 設定linux系統的網路配置,如下(NAT為預設配置,這裡採用這一配置) 2. 主機中配置本地連線-屬性-共享-勾選紅框配置項,如下:     3.重啟虛擬機器。 4.虛擬機器中終端輸入:ifconfig 檢視虛擬機器ip地址,如下

Linux】---vmware虛擬網路配置(NAT模式)及不能ping通主機和百度

nat模式配置 nat模式配置,虛擬機器可以訪問百度 首先本機閘道器不能喝VMNET8一個閘道器 本機的IP及閘道器   VMnet8的設定 虛擬機器編輯器設定,需要和VMnet8在同一個閘道器下 虛擬機器的設定 此

虛擬機器Linux靜態網路設定

探索背景:VMWare wordstation pro 12,虛擬機器系統Centos-7.3,root使用者操作 1、NAT方式連線,閘道器設定成192.168.100.2(自己在虛擬機器外設定的) 2、登入Linux,進入/etc/sysconfig/network-

VirtualBox 設定虛擬機器網路 以及內建的linux系統 網路靜態ip的配置 包含有線和無線兩種方式

我們討論一下如何在Linux中設定網路連線,配置網路連線最基本的涉及到IP地址、掩碼、閘道器和DNS設定,一般情況下系統設定好以上資訊後就可以接入網路了,這裡介紹了Linux在文字模式下通過修改配置檔案來配置基本網路連線,涉及到更多的網路配置方法請參閱相關的書籍,本文只供Linu

linux 網路裝置驅動之alloc_etherdev

最近在看網路驅動時,發現這個函式: struct net_device *netdev; netdev = alloc_etherdev(sizeof(synopGMACPciNetworkAdapter)); 順著這個函式進行追蹤: #define allo