虚拟接口+tx+linux,Linux使用笔记: 解决Xen虚拟机中VLAN接口不能ping大包的问题
出于调试的需要,想在两个Xen虚拟机间使用VLAN相互访问。在Linux上启用VLAN非常简单,只需要使用命令vconfig配置一个VLAN接口就可以了:
vconfig add eth0 3
ifconfig eth0.3 11.11.4.2 netmask 255.255.255.0 up
删除VLAN则使用vconfig rem eth0.3。当然你也可以在网络脚本中配置你的VLAN接口,这样每次系统启动后会自动配置VLAN接口,具体的配置参见文尾的第一篇参考文档。
当Easwy在两个Xen虚拟机上都配置了VLAN后,使用ping命令可以使两台虚拟机相互ping通。但发现一个问题,一旦ping包的大小超过一定长度,也就是说当ping包开始分片后,两台虚拟机之间就不能ping通了:
root@nti etc> ping 11.11.4.30 -s 1476 -c 3
PING 11.11.4.30 (11.11.4.30) 1476(1504) bytes of data.
1484 bytes from 11.11.4.30: icmp_seq=1 ttl=64 time=0.536 ms
1484 bytes from 11.11.4.30: icmp_seq=2 ttl=64 time=0.213 ms
1484 bytes from 11.11.4.30: icmp_seq=3 ttl=64 time=0.238 ms
--- 11.11.4.30 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.213/0.329/0.536/0.146 ms
root@nti etc> ping 11.11.4.30 -s 1477 -c 3
PING 11.11.4.30 (11.11.4.30) 1477(1505) bytes of data.
--- 11.11.4.30 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2009ms
上面的输出显示,当ping包长度为1476字节时,可以正常ping通,但当ping包长度变为1477字节时,就无法ping通了。
在网上搜索了很久,终于找到了原因。原来,在Xen中,虚拟机的网卡是通过宿主机(Domain-0)上的虚拟接口vifX.X以及虚拟网桥设备virbrX来实现网络通信的。
下面的/sbin/ifconfig输出列出了宿主机相应的网络接口:
$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:13:72:18:E0:99
inet addr:192.168.19.84 Bcast:192.168.190.255 Mask:255.255.255.0
inet6 addr: fe80::213:72ff:fe18:e099/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:36017777 errors:43235 dropped:0 overruns:0 frame:46756
TX packets:894337 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:105224895 (100.3 MiB) TX bytes:424826680 (405.1 MiB)
Interrupt:17
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4698 errors:0 dropped:0 overruns:0 frame:0
TX packets:4698 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2439660 (2.3 MiB) TX bytes:2439660 (2.3 MiB)
vif3.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:38149 errors:0 dropped:0 overruns:0 frame:0
TX packets:512426 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:32
RX bytes:7652947 (7.2 MiB) TX bytes:41352902 (39.4 MiB)
vif4.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:65806 errors:0 dropped:0 overruns:0 frame:0
TX packets:553557 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:32
RX bytes:3835916 (3.6 MiB) TX bytes:157035614 (149.7 MiB)
virbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:555514 errors:0 dropped:0 overruns:0 frame:0
TX packets:824276 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:64025226 (61.0 MiB) TX bytes:968699886 (923.8 MiB)
也就是说,当虚拟机1发包给虚拟机2时,它的报文首先经过vif3.0,然后经过网桥设备(bridge)virbr0,最后到达虚拟机2的虚拟接口vif4.0。
而Easwy所用的Linux内核版本2.6.18-128.el5xen中,它的bridge驱动中存在bug,当使能了conntrack模块时,bridge会把分片包重组起来进行检查,但由bridge再向外发时,却没有重新分片,这导致报文被二层丢弃。也正是这个原因,当ping包大小大于1476时,两台虚拟机间就无法相互ping通了。
要解决这个问题,可以重新编译内核(不过我不知道这个问题在哪一个内核版本中得到了解决)。对于Easwy来说,因为不需要使用防火墙,所以解决起来就不用这么麻烦了,只需要使用下面的命令禁用bridge的防火墙就行了:
# echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
禁用掉防火墙后,两台虚拟机间的大包可以ping通了,分片包的通过不存在问题。
要了解这个bug的详细信息,参见文末的第二篇参考文档。文末的第三篇和第四篇参考文档,则列出了在Xen中使用VLAN的配置方法,有兴趣的朋友可以看一下。
更多内容,请阅读Easwy的博客上的其它文章。
[ 参考文档 ]
本文以创作共用版权协议发布,转载本文要求遵循“署名-非商业性使用-相同方式共享3.0”的创作共用协议,并以链接形式指明本文地址。
文章的脚注信息由WordPress的wp-posturl插件自动生成
虚拟接口+tx+linux,Linux使用笔记: 解决Xen虚拟机中VLAN接口不能ping大包的问题相关推荐
- Linux(二):VMware虚拟机中Ubuntu安装详细过程
Linux(二):VMware虚拟机中Ubuntu安装详细过程 文章目录 1 准备 2 安装 2.1 虚拟机的建立 2.2 虚拟机安装Ubuntu系统 2.3 虚拟机设置 3 完成 1 准备 1.操作 ...
- Linux系列(一): 在虚拟机中安装Ubuntu
系列文章目录 Linux系列(一): 在虚拟机中安装Ubuntu 文章目录 系列文章目录 前言 一.开启Hyper-V 二.下载Ubuntu安装文件 三.虚拟机配置 1. 新建虚拟机 2. 其他设置 ...
- java接口那一节是哪的知识_Java中的接口知识汇总
Java中的接口知识汇总 发布于 2020-4-29| 复制链接 本文给大家汇总介绍了在java中的接口知识,包括为什么要使用接口.什么是接口.抽象类和接口的区别.如何定义接口以及定义接口注意点,希望 ...
- 成功解决VMware虚拟机中的please remove the installation medium then press enter
成功解决VMware虚拟机中的please remove the installation medium then press enter 目录 解决问题 解决思路 解决方法 解决问题 please ...
- 解决 VMware 虚拟机 中被提示 “请不要在虚拟机中运行此程序”或者“Themida Sorry, this application cannot run under a Virtual Mac
解决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...
- Linux学习笔记Day01-01在虚拟机中下载Linux系统(centos)详细步骤,vmtools安装
学习目标: 掌握linux环境下基本操作命令,如文件命令,编译工具使用,linux用户管理 linux各种配置 搭建对应语言的开发环境 Linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并 ...
- 解决virtualbox虚拟机中kali linux无法使用wlan0
在Windows10系统上安装的virtualbox虚拟机,在虚拟机中安装的Kali Linux系统看不到无线网卡信息 在虚拟机设置中,选择"网络",使用"bridged ...
- 虚拟机linux 8.04汉化,在虚拟机中快速安装 Ubuntu 18.04
1.准备工作:安装前的准备 2.快速安装及认识界面:安装并认识 Ubuntu,知道最常规操作 3.系统设置:添加中文支持,设置系统时区 4.安装常用软件:选择国内的镜像服务器,安装常用软件 1.准备工 ...
- 虚拟服务器能插usb口吗,在VMware虚拟机中使用主机USB接口、虚拟机共享USB接口、设置虚拟机USB接口的方法...
在网络管理中,我们经常会用到虚拟机,有时候在虚拟机里面运行一些程序需要用到U盘.U盾等USB设备,那么如何将主机的USB接口共享给虚拟机呢,也就是在主机的USB接口插入USB设备之后,可以在虚拟机里面 ...
最新文章
- Python(39)_选出列表中的大于66的数字放在字典中
- 躺平,躺下就能赢吗?
- linux14.04 Apache,Ubuntu 14.04编译安装Apache
- oracle的nvl和nvl2
- 线程同步--事件内核对象
- 对于文件编码格式的浅显理解
- The server quit without updating PID file
- Linux Ubuntu常用软件
- 短信验证码是什么?在网站中起到什么作用?
- 嵌入式C语言强化学习——(嵌入式学习路线1)
- C++基础巩固__declspec(naked)
- html 圆圈图表插件,利用jquery html5实现图表动画圆形饼图
- 第二期预告|中国工程院院刊:信息与电子工程领域青年学术前沿论坛
- Codeforces 200A Cinema 并查集 + 思维 (看题解)
- 解决:电脑主机一会儿自动关闭又自动启动又自动关闭...这样循环往复怎么办?主机用着用着突然关机怎么回事?
- 【学校实验】停车场问题:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
- 中间件技术与构件技术
- POJ 1300 Door Man(欧拉回路判定)
- 基于pytorch的人工智能分类垃圾桶
- Python实现的拍拍贷金融风控模型
热门文章
- 计算机中隐藏的文件找不到了怎么办,隐藏文件夹找不到了怎么办【图解】
- java 小数处理_java 小数点处理
- python替换txt指定内容_python 实现类似sed命令的文件内容替换
- filter过滤器_JavaWeb之 Filter(过滤器)
- mfc mysql 选择删除文件_MFC应用实例:[60]删除指定类型的文件
- 本科计算机专业在车辆段,机电与轨道车辆工程系2021届毕业生参加成都铁路局车辆段及电务段认知实习...
- java 数据库语句_java连接各数据库的语句
- 作业帮口算批改怎么开 作业帮口算批改如何用
- window系统服务器改名,微软:不会将 Windows Server 改名为 Microsoft Server 系统
- JVM中的五大内存区域划分详解