更多>>关于我们
西安鲲之鹏网络信息技术有限公司从2010年开始专注于Web(网站)数据抓取领域。致力于为广大中国客户提供准确、快捷的数据采集相关服务。我们采用分布式系统架构,日采集网页数千万。我们拥有海量稳定高匿HTTP代理IP地址池,可以有效获取互联网任何公开可见信息。
您只需告诉我们您想抓取的网站是什么,您感兴趣的字段有哪些,你需要的数据是哪种格式,我们将为您做所有的工作,最后把数据(或程序)交付给你。
数据的格式可以是CSV、JSON、XML、ACCESS、SQLITE、MSSQL、MYSQL等等。
更多>>技术文章
发布时间:2023-08-31 来源:西安鲲之鹏官微
【经验分享】Hyper-V在虚拟机系统内部设置vlan id不起作用问题的解决。
遇到问题:
Hyper-V虚拟机安装的Ubuntu系统,使用ip link添加了带vlan id的虚拟网卡,命令如下:
sudo ip link add link eth1 address d8:50:e6:74:5e:d4 vlan196 type vlan id 196
sudo ip link set vlan196 up
虚拟网卡vlan196 添加成功(如图1所示),但通过该接口向外发送数据包却一直失败。
例如发送寻找PPPOE BAS服务器的包(sudo pppoe-discovey -I vlan196),一直超时(如图2所示)。
在虚拟机里通过tcpdump抓包(tcpdump -nnei eth1 -vvv),可以抓到到带有正确vlan id的数据包,如图3所示。
很奇怪,同样的配置方法,在ESXi虚拟系统中能够正常工作,看来还是Hyper-V的问题。
在Hyper-V虚拟机网卡属性里直接设置vlan id,能正常工作。但是这里只能设置一个vlan id,不满足我的需求,我需要在虚拟机里同时使用多个vlan id的网络。
解决问题:
网上查了好久,没有人提到类似的问题。就在快要放弃的时候看到了Set-VMNetworkAdapterVlan命令(Hyper-V的PowerShell命令 ),发现通过这个命令可以设置更多的vlan相关参数(相比较GUI界面而言)。
经过一系列尝试,终于解决了问题。通过“-AllowedVlanIdList”参数可以指定一个vlan id范围(白名单),在这个范围内的vlan id将被虚拟机转发,否则将被丢弃,上面超时就是因为数据包被无情的抛弃了。
完整脚本如下:
# 设置虚拟机"KUNZHIPENG-11"的第二块网卡,允许vlan id为196-200的数据包通过。
# 获取虚拟机的所有网卡,保存在$vmadapter中
$vmadapter = Get-VMNetworkAdapter -VMName "KUNZHIPENG-11"
# 只想设置第二块,所以指定$vmadapter[1]
Set-VMNetworkAdapterVlan -VMNetworkAdapter $vmadapter[1] -Trunk -AllowedVlanIdList 196-200 -NativeVlanId 1
# 看看设置生效没
Get-VMNetworkAdapterVlan -VMNetworkAdapter $vmadapter[1]
参考资料:
Set-VMNetworkAdapterVlan的文档:
https://learn.microsoft.com/en-us/powershell/module/hyper-v/set-vmnetworkadaptervlan?view=windowsserver2022-ps
Linux使用ip link添加带vlan id虚拟网卡的文档:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-configure_802_1q_vlan_tagging_using_the_command_line
参考:https://stackoverflow.com/questions/60782014/hyper-v-changing-static-mac-address-on-one-of-the-adapters
遇到问题:
Hyper-V虚拟机安装的Ubuntu系统,使用ip link添加了带vlan id的虚拟网卡,命令如下:
sudo ip link add link eth1 address d8:50:e6:74:5e:d4 vlan196 type vlan id 196
sudo ip link set vlan196 up
虚拟网卡vlan196 添加成功(如图1所示),但通过该接口向外发送数据包却一直失败。
例如发送寻找PPPOE BAS服务器的包(sudo pppoe-discovey -I vlan196),一直超时(如图2所示)。
在虚拟机里通过tcpdump抓包(tcpdump -nnei eth1 -vvv),可以抓到到带有正确vlan id的数据包,如图3所示。
很奇怪,同样的配置方法,在ESXi虚拟系统中能够正常工作,看来还是Hyper-V的问题。
在Hyper-V虚拟机网卡属性里直接设置vlan id,能正常工作。但是这里只能设置一个vlan id,不满足我的需求,我需要在虚拟机里同时使用多个vlan id的网络。
解决问题:
网上查了好久,没有人提到类似的问题。就在快要放弃的时候看到了Set-VMNetworkAdapterVlan命令(Hyper-V的PowerShell命令 ),发现通过这个命令可以设置更多的vlan相关参数(相比较GUI界面而言)。
经过一系列尝试,终于解决了问题。通过“-AllowedVlanIdList”参数可以指定一个vlan id范围(白名单),在这个范围内的vlan id将被虚拟机转发,否则将被丢弃,上面超时就是因为数据包被无情的抛弃了。
完整脚本如下:
# 设置虚拟机"KUNZHIPENG-11"的第二块网卡,允许vlan id为196-200的数据包通过。
# 获取虚拟机的所有网卡,保存在$vmadapter中
$vmadapter = Get-VMNetworkAdapter -VMName "KUNZHIPENG-11"
# 只想设置第二块,所以指定$vmadapter[1]
Set-VMNetworkAdapterVlan -VMNetworkAdapter $vmadapter[1] -Trunk -AllowedVlanIdList 196-200 -NativeVlanId 1
# 看看设置生效没
Get-VMNetworkAdapterVlan -VMNetworkAdapter $vmadapter[1]
参考资料:
Set-VMNetworkAdapterVlan的文档:
https://learn.microsoft.com/en-us/powershell/module/hyper-v/set-vmnetworkadaptervlan?view=windowsserver2022-ps
Linux使用ip link添加带vlan id虚拟网卡的文档:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-configure_802_1q_vlan_tagging_using_the_command_line
参考:https://stackoverflow.com/questions/60782014/hyper-v-changing-static-mac-address-on-one-of-the-adapters
特别说明:该文章为鲲鹏数据原创内容 ,您除了可以发表评论外,还可以转载到别的网站,但是请保留源地址,谢谢!!(尊重他人劳动,我们共同努力)
☹ Disqus被Qiang了,之前的评论内容都没了。如果您有爬虫相关技术方面的问题,欢迎发到我们的问答平台:http://spider.site-digger.com/