因此,我一直在寻找更改 XenServer 6.2 上接口 MTU 的方法,但找不到适合我的方法……
一种方法是更改目录ifcnfg-intX
中的文件/etc/sysconfig/network-scripts
,但文件却不存在... 唯一存在的就是文件ifcnfg-lo
。我是否只需要为每个接口创建一个文件?
然后我想,我只需制作一个启动脚本:
#!/bin/bash
#Saved as /etc/init.d/mtuchange.sh
#Change mtu of interfaces
ifconfig xenbr0 mtu 1454
ifconfig xenbr1 mtu 1454
ifconfig eth0 mtu 1454
ifconfig eth1 mtu 1454
该脚本在控制台中运行时有效。
因此,要使其在启动时运行:
ln -s /etc/init.d/mtuchange.sh /etc/rc3.d/S99mtuchange
但是,它无法运行...
我需要更改 MTU 的原因是由于某些奇怪的原因,XenCenter 无法连接 MTU,默认为 1500,必须是 1454
有谁知道我做错了什么?
答案1
Xen wiki 上有一些关于如何执行此操作的讨论:Xen wiki 网络性能页面。 简而言之:
启用巨型帧
假设 eth6 和 xenbr6 是与使用的 10 GiB/秒连接相对应的设备和网桥。
关闭用户域:
VMs=$(xe vm-list is-control-domain=false params=uuid --minimal | sed 's/,/ /g')
for uuid in $VMs; do xe vm-shutdown uuid=$uuid; done`
将网络 MTU 设置为 9000,然后重新插入相关 PIF:
net_uuid=`xe network-list bridge=xenbr6 params=uuid --minimal`
xe network-param-set uuid=$net_uuid MTU=9000
PIFs=$(xe pif-list network-uuid=$net_uuid --minimal | sed 's/,/ /g')
for uuid in $PIFs; do xe pif-unplug uuid=$uuid; xe pif-plug uuid=$uuid; done
启动用户域(您可能需要确保虚拟机一个接一个地启动以避免潜在的 VIF 静态分配问题):
VMs=$(xe vm-list is-control-domain=false params=uuid --minimal | sed 's/,/ /g')
for uuid in $VMs; do xe vm-start uuid=$uuid; done
设置您将在用户域内使用的连接以使用 MTU 9000。对于 Linux VM,可通过以下方式完成此操作:
ETH=eth1 # the user domain connection you are concerned with
ifconfig $ETH mtu 9000 up
验证:
xe vif-list network-uuid=$net_uuid params=MTU --minimal
答案2
当遇到与 MTU 相关的问题时,修改 MSS 可能比调整单个链接的 MTU 更有效。看起来该平台是基于 Linux 的,因此可以使用 iptables。这几条 iptables 规则可以减少双向 SYN 数据包的 MSS,从而避免大多数 MTU 问题。
iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1220
iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1220
如果使用这组规则而不是更改 MTU,则可以将它们永久添加到您的 iptables 配置中。