日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化...

發布時間:2024/4/18 linux 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

網絡虛擬化技術(一): Linux網絡虛擬化

2018-12-11

01 March 2013

筆者現在在做云計算的網絡設計,涉及到上百臺服務器與交換機,在實測前必須進行原型測試,但是我只有一個工作用開發機,本文介紹一種方法,使用這一臺機器模擬數十臺服務器以及路由器的網絡環境。

Linux的網絡虛擬化是LXC項目中的一個子項目,LXC包括文件系統虛擬化,進程空間虛擬化,用戶虛擬化,網絡虛擬化,等等 [1],這里使用LXC的網絡虛擬化來模擬多個網絡環境。

創建虛擬網絡環境

使用命令

$ ip netns add net0

可以創建一個完全隔離的新網絡環境,這個環境包括一個獨立的網卡空間,路由表,ARP表,ip地址表,iptables,ebtables,等等。總之,與網絡有關的組件都是獨立的。

ip命令需要root權限的,但是由于本文大量使用ip命令,于是筆者給ip命令添加了capability,使普通用戶也能使用ip命令

使用命令

$ ip netns listnet0

可以看到我們剛才創建的網絡環境

進入虛擬網絡環境

使用命令

$ ip netns exec net0 `command`

我們可以在 net0 虛擬環境中運行任何命令

$ ip netns exec net0 bash$ ip ad1: lo: mtu 65536 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

這樣我們可以在新的網絡環境中打開一個shell,可以看到,新的網絡環境里面只有一個lo設備,并且這個lo設備與外面的lo設備是不同的,之間不能互相通訊。

連接兩個網絡環境

新的網絡環境里面沒有任何網絡設備,并且也無法和外部通訊,就是一個孤島,通過下面介紹的這個方法可以把兩個網絡環境連起來,簡單的說,就是在兩個網絡環境之間拉一根網線

$ ip netns add net1

先創建另一個網絡環境net1,我們的目標是把net0與net1連起來

$ ip link add type veth$ ip ad1: lo: mtu 65536 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:0081: veth0: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 12:39:09:81:3a:dd brd ff:ff:ff:ff:ff:ff82: veth1: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 32:4f:fd:cc:79:1b brd ff:ff:ff:ff:ff:ff

這里創建連一對veth虛擬網卡,類似pipe,發給veth0的數據包veth1那邊會收到,發給veth1的數據包veth0會收到。就相當于給機器安裝了兩個網卡,并且之間用網線連接起來了

$ ip link set veth0 netns net0$ ip link set veth1 netns net1

這兩條命令的意思就是把veth0移動到net0環境里面,把veth1移動到net1環境里面,我們看看結果

$ ip ad1: lo: mtu 65536 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00$ ip netns exec net0 ip ad1: lo: mtu 65536 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:0081: veth0: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 12:39:09:81:3a:dd brd ff:ff:ff:ff:ff:ff$ ip netns exec net1 ip ad1: lo: mtu 65536 qdisc noop state DOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:0082: veth1: mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 32:4f:fd:cc:79:1b brd ff:ff:ff:ff:ff:ff

veth0 veth1已經在我們的環境里面消失了,并且分別出現在net0與net1里面。下面我們簡單測試一下net0與net1的聯通性

$ ip netns exec net0 ip link set veth0 up$ ip netns exec net0 ip address add 10.0.1.1/24 dev veth0$ ip netns exec net1 ip link set veth1 up$ ip netns exec net1 ip address add 10.0.1.2/24 dev veth1

分別配置好兩個設備,然后用ping測試一下聯通性:

$ ip netns exec net0 ping -c 3 10.0.1.2PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.64 bytes from 10.0.1.2: icmp_req=1 ttl=64 time=0.101 ms64 bytes from 10.0.1.2: icmp_req=2 ttl=64 time=0.057 ms64 bytes from 10.0.1.2: icmp_req=3 ttl=64 time=0.048 ms--- 10.0.1.2 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 1999msrtt min/avg/max/mdev = 0.048/0.068/0.101/0.025 ms

一個稍微復雜的網絡環境

創建虛擬網絡環境并且連接網線

ip netns add net0ip netns add net1ip netns add bridgeip link add type vethip link set dev veth0 name net0-bridge netns net0ip link set dev veth1 name bridge-net0 netns bridgeip link add type vethip link set dev veth0 name net1-bridge netns net1ip link set dev veth1 name bridge-net1 netns bridge

在bridge中創建并且設置br設備

ip netns exec bridge brctl addbr brip netns exec bridge ip link set dev br upip netns exec bridge ip link set dev bridge-net0 upip netns exec bridge ip link set dev bridge-net1 upip netns exec bridge brctl addif br bridge-net0ip netns exec bridge brctl addif br bridge-net1

然后配置兩個虛擬環境的網卡

ip netns exec net0 ip link set dev net0-bridge upip netns exec net0 ip address add 10.0.1.1/24 dev net0-bridge

ip netns exec net1 ip link set dev net1-bridge upip netns exec net1 ip address add 10.0.1.2/24 dev net1-bridge

測試

$ ip netns exec net0 ping -c 3 10.0.1.2PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.64 bytes from 10.0.1.2: icmp_req=1 ttl=64 time=0.121 ms64 bytes from 10.0.1.2: icmp_req=2 ttl=64 time=0.072 ms64 bytes from 10.0.1.2: icmp_req=3 ttl=64 time=0.069 ms--- 10.0.1.2 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 1999msrtt min/avg/max/mdev = 0.069/0.087/0.121/0.025 ms

配置lldpd檢查線路鏈接情況

隨著虛擬網絡環境增加,環境中網卡數量也在不斷增加,經常會忘記環境中哪些網卡連接到哪里,通過 lldp [2] 協議,我們可以清楚看到每個網卡連接到了哪些環境中的哪個網卡。

github 上有一個 lldp 在 linux 下的開源實現 [3],通過在每個環境中起一個 lldp daemon,我們就可以實時查看每個網卡的連接情況

Bridge 上 lldp 的數據

總結

以上是生活随笔為你收集整理的网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。