這個問題真的困擾了很久囱修,然后今天這么隨便一試赎瑰,貌似有了轉(zhuǎn)機(jī)!
一破镰、第一次嘗試
過程復(fù)現(xiàn)如下:
1餐曼、建立VM,裝centOS鲜漩,過程略
2源譬、建立veth pair
ip link add veth0 type veth peer name veth-centOS
ifconfig veth0 192.168.1.100/24 up
ifconfig veth-centOS up
3、利用virt-manager給VM創(chuàng)建一個網(wǎng)卡孕似,接到veth-centOS上瓶佳,其它啥都不用配置,都默認(rèn)
4鳞青、在虛擬機(jī)centOS里配置realtek ethernet這個網(wǎng)絡(luò)的IP地址霸饲,192.168.1.101/24,很奇怪為啥叫realtek ethernet臂拓。關(guān)于為什么會出現(xiàn)realtek ethernet厚脉,好像是跟KVM或者QEMU有關(guān)系,后來我再用以上的方式添加網(wǎng)絡(luò)胶惰,名字成了PCI ethernet傻工!先不管了吧。
然后ifconfig看到以下景象:
ens9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.101 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::5054:ff:fe8e:7046 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:8e:70:46 txqueuelen 1000 (Ethernet)
RX packets 4 bytes 260 (260.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 43 bytes 6135 (5.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
為啥叫ens9!中捆!很奇怪Q炱ァ!全都是問題P刮薄E古睢!
5蟋滴、接著奇跡發(fā)生了染厅!ping 192.168.1.100!通了津函!結(jié)果如下:
PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.
64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=4.60 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0.376 ms
64 bytes from 192.168.1.100: icmp_seq=3 ttl=64 time=2.35 ms
64 bytes from 192.168.1.100: icmp_seq=4 ttl=64 time=0.962 ms
^C
--- 192.168.1.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.376/2.075/4.607/1.629 ms
6肖粮、總結(jié)
為啥會這樣?需要進(jìn)一步研究尔苦,或許這只是表象涩馆,還有許多問題啊允坚!
二凌净、第二次嘗試
然后,果然屋讶!出現(xiàn)問題了1啊!皿渗!
過程復(fù)現(xiàn)如下:
1斩芭、建立第二個虛擬機(jī)VM2,裝的redhat
2乐疆、建立veth pair
ip link add veth-redhat type veth peer name redhat-veth
ifconfig veth-red 192.168.1.102/24 up
ifconfig cenOS-veth up
3划乖、然后重復(fù)上面第一部分的相關(guān)操作,虛擬機(jī)ip設(shè)為192.168.1.103/24
4挤土、在虛擬機(jī)redhat里ping 192.168.1.102琴庵,竟然不通!然后ping 192.168.1.100仰美,也不通迷殿!好吧,我承認(rèn)我的網(wǎng)絡(luò)基礎(chǔ)知識太差了咖杂,可我真的沒法理解
5庆寺、接著,我又回到centOS里诉字,ping 192.168.1.102懦尝,通了知纷!無語。陵霉。這究竟是為啥琅轧?!
三踊挠、第三次嘗試
為了閱讀起來清晰乍桂,我決定把上面全部推翻再來!
過程復(fù)現(xiàn)如下:
1止毕、創(chuàng)建3個VMs,分別安裝centOS漠趁、redhat扁凛、ubuntu
2、創(chuàng)建3個veth pairs闯传,配在不同的網(wǎng)段里谨朝,如下:
ip link add veth0 type veth peer name veth0-centOS
ip link add veth1 type veth peer name veth1-redhat
ip link add veth2 type veth peer name veth2-ubuntu
//這次把三個veth配在三個不通網(wǎng)段里!I獭字币!
ifconfig veth0 192.168.1.2/24 up
ifconfig veth1 192.168.2.2/24 up
ifconfig veth2 192.168.3.2/24 up
ifconfig veth0-centOS up
ifconfig veth1-redhat up
ifconfig veth2-ubuntu up
3、給VMs分別添加NIC共缕,連接到VM對應(yīng)的veth上洗出,這次device model選virtio,貌似這樣網(wǎng)速快
4图谷、開始測試網(wǎng)絡(luò)連通情況翩活,結(jié)果如下
veth0←→centOS通
veth1←→redhat通
veth2←→ubuntu通
其他連接均無法ping通
這個結(jié)果還是比較滿意的
5、總結(jié)
為什么要配在不同的網(wǎng)段里便贵?想不通
四菠镇、第四次嘗試
這次嘗試和第三次嘗試類似,只不過宿主機(jī)的veth不設(shè)置ip地址了承璃,具體過程如下:
1利耍、創(chuàng)建虛擬機(jī)過程就略過了
2、配置veth pairs
ip link add veth3 type veth peer name veth3-centOS
ip link add veth4 type veth peer name veth4-centOS
ifconfig veth3 up
ifconfig veth4 up
ifconfig veth3-centOS up
ifconfig veth4-centOS up
3盔粹、在虛擬機(jī)centOS里配置新加入的兩個網(wǎng)卡的IP隘梨,分別設(shè)為192.168.4.3/24和192.168.5.3/24
4、在虛擬機(jī)中ping上面兩個IP同網(wǎng)段的地址舷嗡,例如192.168.4.5和192.168.5.4
5出嘹、在宿主機(jī)中利用wireshark抓包,看veth3咬崔、veth4的收包情況税稼,截圖如下烦秩。結(jié)果是,收到ARP包了郎仆。
ping 192.168.4.4 的結(jié)果只祠,在veth3抓包
ping 192.168.5.4 的結(jié)果,在veth4抓包
6扰肌、總結(jié)
虛擬機(jī)的ARP請求直接通過veth pair發(fā)送到宿主機(jī)了抛寝,就是這么回事