虚拟机与宿主机互通

本文介绍了如何通过openvswitch在虚拟机和宿主机之间建立通信。首先,讲述了准备环境,包括虚拟机的启动和openvswitch的基本命令。接着,通过创建依赖的虚拟机和桥接(bridge)连接,详细描述了如何实现物理机与虚拟机的互通。最后,总结了主要步骤,并预告了接下来关于openvswitch中TAG的讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先准备环境

本节主要讲解如何让包通过openvswitch,连宿主机和虚拟机。

1, 先说说我的环境吧

模块 版本
内核版本 4.0.0-2-amd64
debian Debian 4.0.8-2 (2015-07-22) x86_64
openvswitch-common 2.4.0-1
openvswitch-datapath-dkms 2.4.0-1
openvswitch-datapath-source 2.4.0-1
openvswitch-dbg 2.4.0-1
openvswitch-pki 2.4.0-1
openvswitch-switch 2.4.0-1
openvswitch-test 2.4.0-1
openvswitch-vtep 2.4.0-1
python-openvswitch 2.4.0-1

注: 这些包目前没有源提供,本人是在本地自己打包编译的,
其实编译也很简单:

  • 1,从github上下载代码,
  • 2,切换到相应的分支,
  • 3,运行dpkg-buildpackage即可,具体出现的错误请询问google大神)

qemu的版本不是本文的重点。再此就不再列出具体版本了

准备启动虚拟机的镜像,也不在此叙述,我这边有个副本,直接root登陆,密码是:1,链接地址:http://pan.baidu.com/s/1sjmOZyl 文件名字forqemu.qcow

2,启动一台虚拟机:

qemu的命令不再本文叙述之列,请参照帮助文档:
本人用的启动虚拟机的命令:(仅供参考,参照本文最后一节的备注)

     qemu-system-x86_64 forqemu.qcow2 -m 1024 -net nic,model=virtio,macaddr=00:16:3e:22:22:22  -net tap,ifname=tap124
  • 注意 :
    • 1, 参数中的“ifname=tap124”代表创建出来的tap设备的名字,
    • 2, 可以后台执行该命令,打开一台虚拟机
    • 3, 创建完成之后 执行ifconfig 命令,应该能看到新的网络设备名字 tap124

3,初识所需的openvswitch命令

  • ovs-vsctl add-br $br-name : 增加一台虚拟网桥设备。
  • ovs-vsctl add-port $br-name $port-name : 在网桥设备上增加一个端口,
    注,该端口不是运输层端口,可以抽象为一个插网线的网口
  • ovs-vsctl set-port $port-name tag=$tag-id : 设置端口的tag

创建虚拟机,连通宿主机和虚拟机

创建以来虚拟机

物理机(注,物理机该处的命令在虚拟机启动之后才会有tap124设备)

root@www /home/abaobo 2015-08-14 20:54:23 
# ip a a 10.120.0.2/24 dev tap124               

虚拟机中命令执

<think>嗯,用户的问题是关于Lima虚拟机宿主机网络互通的配置教程,我需要根据之前提供的引用信息来解答。首先,用户提到了多个引用内容,特别是引用[1]中的config.yaml配置文件和extra-args参数,引用[2]中关于端口转发和网络组件的说明,以及引用[5]中的端口修改示例。用户的核心需求是配置宿主机Lima虚拟机之间的网络通信。从引用内容看,关键点可能集中在extra-args里的网络设置和端口转发。引用[1]提到extra-args可以传递参数给QEMU,例如设置网络模式为host,这能让虚拟机共享宿主机的网络栈,可能实现直接通信。但用户可能需要其他配置选项,比如端口映射,这时引用[2]的端口转发部分就很重要,其中提到使用SSH的-L参数和监控iptables事件来实现自动转发。另外,引用[4]中的示例显示用户可能已经尝试了默认配置,但需要具体指导如何修改网络部分。引用[5]中的端口占用问题也提示用户可能需要修改端口映射,比如修改Redis的端口,类似地,用户可能需要配置自己的端口转发规则。我需要整理出几种配置方式:共享主机网络、手动端口转发、自动端口转发。同时要考虑用户可能的实际场景,比如开发时需要访问虚拟机内的服务,或者文件共享中的网络设置。还要注意不同配置的性能影响和安全性,比如host网络模式可能不安全,而端口转发更灵活。用户提供的引用中没有详细的分步骤教程,但结合引用中的配置项和示例,可以推导出配置方法。比如在config.yaml中添加forwardPorts字段,并指定协议和端口。同时,可能需要通过SSH隧道设置,如引用[2]提到的ssh-L命令。最后,还需要考虑常见问题,如端口占用(如引用[5]所述)或权限问题,以及解决方案如更换端口。回答时要结构清晰,分步骤给出配置示例,并列出注意事项,确保用户能正确应用配置,避免常见错误。</think> 以下是根据您的需求整理的Lima虚拟机宿主机网络互通配置指南,结合引用信息和官方实践整理: ### 一、核心网络配置方法 1. **共享宿主机网络栈(最简互通)** 在`~/.lima/config.yaml`中添加(引用[1][2]): ```yaml networks: - lima extra-args: - "--network=host" # 使用宿主机网络命名空间 ``` 2. **端口转发配置(推荐方案)** ```yaml portForwards: # 映射宿主机8080到虚拟机80端口 - guestPort: 80 hostPort: 8080 # 映射数据库端口 - guestPort: 6379 hostPort: 16379 proto: tcp # 可选tcp/udp ``` > 此特性基于SSH隧道实现,通过监控`/proc/net/tcp`自动更新转发规则[^2] 3. **自定义桥接网络** ```yaml extra-args: - "--netdev=bridge,br=limabr0" - "--device=virtio-net-pci,netdev=limabr0" ``` ### 二、配置验证步骤 ```bash # 启动虚拟机 limactl start # 查看端口映射 limactl list --format '{{.PortForwards}}' # 在宿主机访问验证 curl http://localhost:8080 # 若使用端口转发 ping $(limactl show-ssh) # 测试虚拟机连通性 ``` ### 三、典型应用场景配置 1. **访问容器化服务** 当在虚拟机内运行Docker容器时(引用[4]): ```yaml portForwards: - guestPort: 8080 # 容器暴露的端口 hostPort: 8888 guestIP: "0.0.0.0" # 监听所有虚拟机IP ``` 2. **跨主机文件共享优化** ```yaml sharedHome: true # 启用家目录共享[^1] mountType: 9p # 使用高性能virtio-9p协议[^2] ``` ### 四、常见问题解决 | 问题现象 | 解决方案 | 来源 | |-------------------------|-------------------------------|---------| | 端口冲突 | 修改`hostPort`值(如6379→6380) | [^5] | | 服务无法跨主机访问 | 检查虚拟机防火墙:`sudo ufw disable` | 经验 | | SSH隧道中断 | 在配置中添加:`ssh: forwardAgent: true` | [^2] | > **注意**:若使用`--network=host`模式时出现端口冲突,需修改虚拟机内服务的监听端口[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值