linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验
namespace(命名空間)和cgroup是軟件容器化(想想Docker)趨勢中的兩個主要內(nèi)核技術(shù)。簡單來說,cgroup是一種對進程進行統(tǒng)一的資源監(jiān)控和限制,它控制著你可以使用多少系統(tǒng)資源(CPU,內(nèi)存等)。而namespace是對全局系統(tǒng)資源的一種封裝隔離,它通過Linux內(nèi)核對系統(tǒng)資源進行隔離和虛擬化的特性,限制了您可以看到的內(nèi)容。
Linux 3.8內(nèi)核提供了6種類型的命名空間:Process ID (pid)、Mount (mnt)、Network (net)、InterProcess Communication (ipc)、UTS、User ID (user)。例如,pid命名空間內(nèi)的進程只能看到同一命名空間中的進程。mnt命名空間,可以將進程附加到自己的文件系統(tǒng)(如chroot)。在本文中,我只關(guān)注網(wǎng)絡(luò)命名空間 Network (net)。
網(wǎng)絡(luò)命名空間為命名空間內(nèi)的所有進程提供了全新隔離的網(wǎng)絡(luò)協(xié)議棧。這包括網(wǎng)絡(luò)接口,路由表和iptables規(guī)則。通過使用網(wǎng)絡(luò)命名空間就可以實現(xiàn)網(wǎng)絡(luò)虛擬環(huán)境,實現(xiàn)彼此之間的網(wǎng)絡(luò)隔離,這對于云計算中租戶網(wǎng)絡(luò)隔離非常重要,Docker中的網(wǎng)絡(luò)隔離也是基于此實現(xiàn)的,如果你已經(jīng)理解了上面所說的,那么我們進入正題,介紹如何使用網(wǎng)絡(luò)命名空間。
linux網(wǎng)絡(luò)虛擬化: network namespace 簡介及實驗
準備工作以及環(huán)境:
系統(tǒng):centos 7系統(tǒng)(因為namespace是linux 內(nèi)核3.8開始支持的,所以要想進行本文的實驗,請用linux內(nèi)核3.8及以上版本)
安裝iproute(yum install iproute2,其他平臺請自行下載iproute2工具)
注意:本文作者使用ip命令,因為它已成為Linux中的首選網(wǎng)絡(luò)工具,舊的ifconfig,route等命令也已經(jīng)被淘汰了。請注意,ip命令需要root權(quán)限,因此ip命名要以root用戶身份運行或預(yù)先添加sudo。
1.新增一個網(wǎng)絡(luò)命名空間(名稱netns1)
# ip netns add netns0
解釋:從系統(tǒng)的角度來看,當通過clone()系統(tǒng)調(diào)用創(chuàng)建一個新進程時,傳遞標志CLONE_NEWNET將在新進程中創(chuàng)建一個全新的網(wǎng)絡(luò)命名空間。從用戶的角度來看,我們只需使用工具ip(iproute2工具包)來創(chuàng)建一個新的持久網(wǎng)絡(luò)命名空間:此命令將創(chuàng)建一個名為netns0的新網(wǎng)絡(luò)命名空間。創(chuàng)建命名空間后,ip命令會在/var/run/netns目錄下增加一個netns0文件(In Linux, Everything is a File)。
# ls /var/run/netns
netns0
2.使用命令 ip netns show或ip netns list,列出系統(tǒng)中可用的命名空間:
# ip netns show
netns0
3.如前所述,網(wǎng)絡(luò)命名空間包含自己的網(wǎng)絡(luò)資源:接口,路由表等。默認添加網(wǎng)絡(luò)命名空間netns1后,在netns1命名空間中會自動添加一個loopback(回環(huán))接口:
首先開啟回環(huán)口lo網(wǎng)卡
# ip netns exec netns0 ip link set lo up
查看網(wǎng)絡(luò)lo回環(huán)口信息:
# ip netns exec netns0 ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
ping 127.0.0.1
# ip netns exec netns0 ping 127.0.0.1 -c 3
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.033 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.016/0.027/0.033/0.009 ms
既然已經(jīng)了解了網(wǎng)絡(luò)命名空間后,那我們通過兩個隔離的命名空間來實現(xiàn)互通(模擬兩臺主機直接的互通,作為網(wǎng)絡(luò)開發(fā)人員,有時候需要很多臺機器來測試網(wǎng)絡(luò),但是只有一臺機器,那么有了網(wǎng)絡(luò)命名空間這個特性,完全就可以在一臺主機上模擬多臺主機之間互通的網(wǎng)絡(luò)測試),如下所示:
# ip netns add netns1
# ip netns show
netns0
netns1
模擬兩臺機器,這時候就需要有一根網(wǎng)線連接兩臺主機,此時就出現(xiàn)了新的神器veth(虛擬以太網(wǎng)),veth是一種總是成對出現(xiàn)的虛擬網(wǎng)絡(luò)設(shè)備。你可以把這對看作一根物理網(wǎng)線,通過這根線一端發(fā)送的所有東西都會在另一端出來。(veth詳細解釋會在后續(xù)文章中詳細介紹,本文就先不詳細介紹了)
模擬創(chuàng)建一根網(wǎng)線:
# ip link add name vnet0 type veth peer name vnet1
# ip a
1: vnet1@vnet0: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 52:42:c3:02:54:38 brd ff:ff:ff:ff:ff:ff
2: vnet0@vnet1: mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a6:20:57:dc:c6:dd brd ff:ff:ff:ff:ff:ff
可以看見創(chuàng)建了一個vnet1@vnet0和vnet0@vnet1兩張?zhí)摂M網(wǎng)卡,現(xiàn)在要把一頭插到netns0主機中,另外一套插在netns1主機中,命令如下:
# ip link set vnet0 netns netns0
# ip link set vnet1 netns netns1
給兩個主機分別配置ip,192.168.0.2和192.168.0.3,然后互ping
# ip netns exec netns0 ip link set vnet0 up
# ip netns exec netns1 ip link set vnet1 up
# ip netns exec netns0 ip a add 192.168.0.2 dev vnet0
# ip netns exec netns1 ip a add 192.168.0.3 dev vnet1
# ip netns exec netns0 ping 192.168.0.3
connect: 網(wǎng)絡(luò)不可達
網(wǎng)絡(luò)不可達???what??為什么會這樣?其實是因為沒有路由(查看路由命令如下)
# ip netns exec netns0 ip r
添加路由
# ip netns exec netns0 ip r add 192.168.0.3 dev vnet0
# ip netns exec netns1 ip r add 192.168.0.2 dev vnet1
在netns0中去ping netns1主機
# ip netns exec netns0 ping 192.168.0.3 -c 2
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.047 ms
--- 192.168.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.021/0.034/0.047/0.013 ms
完美,收工。以上就是linux網(wǎng)絡(luò)虛擬化,有什么問題可以歡迎來西安鷗鵬教育進行咨詢。
總結(jié)
以上是生活随笔為你收集整理的linux 的ip 设置lo_linux网络虚拟化: network namespace 简介及实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 道琼斯指数上涨704点,下周股市行情要变
- 下一篇: matlab产生时间数组以月为单位_Ma