出于调试的需要,想在两个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大包的问题相关推荐

  1. Linux(二):VMware虚拟机中Ubuntu安装详细过程

    Linux(二):VMware虚拟机中Ubuntu安装详细过程 文章目录 1 准备 2 安装 2.1 虚拟机的建立 2.2 虚拟机安装Ubuntu系统 2.3 虚拟机设置 3 完成 1 准备 1.操作 ...

  2. Linux系列(一): 在虚拟机中安装Ubuntu

    系列文章目录 Linux系列(一): 在虚拟机中安装Ubuntu 文章目录 系列文章目录 前言 一.开启Hyper-V 二.下载Ubuntu安装文件 三.虚拟机配置 1. 新建虚拟机 2. 其他设置 ...

  3. java接口那一节是哪的知识_Java中的接口知识汇总

    Java中的接口知识汇总 发布于 2020-4-29| 复制链接 本文给大家汇总介绍了在java中的接口知识,包括为什么要使用接口.什么是接口.抽象类和接口的区别.如何定义接口以及定义接口注意点,希望 ...

  4. 成功解决VMware虚拟机中的please remove the installation medium then press enter

    成功解决VMware虚拟机中的please remove the installation medium then press  enter 目录 解决问题 解决思路 解决方法 解决问题 please ...

  5. 解决 VMware 虚拟机 中被提示 “请不要在虚拟机中运行此程序”或者“Themida Sorry, this application cannot run under a Virtual Mac

    解决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...

  6. Linux学习笔记Day01-01在虚拟机中下载Linux系统(centos)详细步骤,vmtools安装

    学习目标: 掌握linux环境下基本操作命令,如文件命令,编译工具使用,linux用户管理 linux各种配置 搭建对应语言的开发环境 Linux是一款操作系统,免费,开源,安全,高效,稳定,处理高并 ...

  7. 解决virtualbox虚拟机中kali linux无法使用wlan0

    在Windows10系统上安装的virtualbox虚拟机,在虚拟机中安装的Kali Linux系统看不到无线网卡信息 在虚拟机设置中,选择"网络",使用"bridged ...

  8. 虚拟机linux 8.04汉化,在虚拟机中快速安装 Ubuntu 18.04

    1.准备工作:安装前的准备 2.快速安装及认识界面:安装并认识 Ubuntu,知道最常规操作 3.系统设置:添加中文支持,设置系统时区 4.安装常用软件:选择国内的镜像服务器,安装常用软件 1.准备工 ...

  9. 虚拟服务器能插usb口吗,在VMware虚拟机中使用主机USB接口、虚拟机共享USB接口、设置虚拟机USB接口的方法...

    在网络管理中,我们经常会用到虚拟机,有时候在虚拟机里面运行一些程序需要用到U盘.U盾等USB设备,那么如何将主机的USB接口共享给虚拟机呢,也就是在主机的USB接口插入USB设备之后,可以在虚拟机里面 ...

最新文章

  1. Python(39)_选出列表中的大于66的数字放在字典中
  2. 躺平,躺下就能赢吗?
  3. linux14.04 Apache,Ubuntu 14.04编译安装Apache
  4. oracle的nvl和nvl2
  5. 线程同步--事件内核对象
  6. 对于文件编码格式的浅显理解
  7. The server quit without updating PID file
  8. Linux Ubuntu常用软件
  9. 短信验证码是什么?在网站中起到什么作用?
  10. 嵌入式C语言强化学习——(嵌入式学习路线1)
  11. C++基础巩固__declspec(naked)
  12. html 圆圈图表插件,利用jquery html5实现图表动画圆形饼图
  13. 第二期预告|中国工程院院刊:信息与电子工程领域青年学术前沿论坛
  14. Codeforces 200A Cinema 并查集 + 思维 (看题解)
  15. 解决:电脑主机一会儿自动关闭又自动启动又自动关闭...这样循环往复怎么办?主机用着用着突然关机怎么回事?
  16. 【学校实验】停车场问题:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。
  17. 中间件技术与构件技术
  18. POJ 1300 Door Man(欧拉回路判定)
  19. 基于pytorch的人工智能分类垃圾桶
  20. Python实现的拍拍贷金融风控模型

热门文章

  1. 计算机中隐藏的文件找不到了怎么办,隐藏文件夹找不到了怎么办【图解】
  2. java 小数处理_java 小数点处理
  3. python替换txt指定内容_python 实现类似sed命令的文件内容替换
  4. filter过滤器_JavaWeb之 Filter(过滤器)
  5. mfc mysql 选择删除文件_MFC应用实例:[60]删除指定类型的文件
  6. 本科计算机专业在车辆段,机电与轨道车辆工程系2021届毕业生参加成都铁路局车辆段及电务段认知实习...
  7. java 数据库语句_java连接各数据库的语句
  8. 作业帮口算批改怎么开 作业帮口算批改如何用
  9. window系统服务器改名,微软:不会将 Windows Server 改名为 Microsoft Server 系统
  10. JVM中的五大内存区域划分详解