KVM 虚拟机的 NAT 和 Bridge 网络模式的区别及配置
来源:https://www.jianshu.com/p/110b60c14a8b,https://blog.csdn.net/wenwenxiong/article/details/47343717
1. 网络模式
网桥模式可以:
1、让客户机和宿主机共享一个物理网络设备连接网络
2、也可以让客户机有自己的IP直连与宿主机一摸一样的网络
原理图:
使用命令配置的过程:
1. 建立bridge,并绑定到一个可以正常对外访问的网络接口上,同时让bridge成为本机与外部网络的接口
brctl addbr br0 #添加bridge brctl addif br0 eth0 #将br0和eth0绑定起来 (可能让网络断掉,最好在本机操作,不要通过网络) brctl stp br0 on #将br0设置为启用STP协议 ifconfig eth0 0 #将eth0的IP设置为0 dhclient br0 #将br0网络配置好
建立好bridge后的状态是:eth0进入混杂模式,接收网络中所有数据包,网桥br0进入转发状态。
然后在虚拟机中使用该 br0 网桥即可。
2. NAT 模式
NAT 即 Network Address Translation, 网络地址转换,将内网IP数据包包头中的源IP地址转换为一个外网的IP地址,因此内部IP对外是不可见的,隐藏了内部结构更加安全,但对外提供服务则是其局限性,目前通常采用iptables工具进行端口映射解决。
1、相比使用网桥共享同一个网络设备,其区别在于virbr0并未直接绑定到实际的物理网卡,数据包经过virbr0,进行nat后转到IP包转发后从实际的物理网络设备中出去
2、在nat模式下,需要在宿主机上运行一个DHCP服务器给内网的机器分配IP地址,可以使用dnsmasq工具实现,或者通过手工方式指定
1、相比使用网桥共享同一个网络设备,其区别在于virbr0并未直接绑定到实际的物理网卡,数据包经过virbr0,进行nat后转到IP包转发后从实际的物理网络设备中出去
2、在nat模式下,需要在宿主机上运行一个DHCP服务器给内网的机器分配IP地址,可以使用dnsmasq工具实现,或者通过手工方式指定
原理图:

配置命令:
brctl addbr virbr0 brctl stp virbr0 on brctl setfd virbr0 0 #设置网络转发延时 ifconfig virbr0 192.168.122.1 netmask 255.255.255.0 up #打开宿主机上的网络转发功能 echo 1> /proc/sys/net/ipv4/ip_forward #设置iptables 转发规则 iptables -t nat -A POSTROUTING -s 内网ip/24 ! -d 内网ip/24 -j MASQUERADE
3. Centos 上配置 bridge 模式
在centos中,需要创建一个 bridge,把原来网卡的IP 地址设置为该网桥的地址,然后去除网卡的地址。这些需要通过配置网络接口脚本来实现。
首先配置网桥 ifcfg-mgtbr:
TYPE=Bridge PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=mgtbr UUID=2e1a9bac-aaa6-4593-8fd2-7990deaa7803 DEVICE=mgtbr ONBOOT=yes IPADDR=192.168.1.10 PREFIX=24 GATEWAY=192.168.1.1 IPV6_PRIVACY=no ZONE=public
再配置物理网卡 ifcfg-em1:
PROXY_METHOD=none BROWSER_ONLY=no DEFROUTE=yes IPV4_FAILURE_FATAL=no NAME=em1 UUID=2e1a9bac-aaa6-4593-8fd2-7990deaa7803 DEVICE=em1 ONBOOT=yes BRIDGE=mgtbr
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
2017-08-30 [译] OpenStack Pike 版本中的 53 个新功能盘点