前言
一直都是使用的虚拟机是 kvm, 而且都习惯用 nat 网络模式, 但是有时候遇到需要测试一些服务, 而且需要测试机访问 kvm 虚拟机里面的服务.
这时候有两种解决方式, 一种是使用桥接, 一种是使用端口转发. 我更倾向于后者, 因为我的虚拟机不需要长时间提供服务, 使用 nat 可以更好的隔离.
桥接
如上图:
网桥方式配置步骤
1, 编辑修改网络设备脚本文件, 增加网桥设备 br0
- vim /etc/sysconfig/network-scripts/ifcfg-br0
- DEVICE="br0"
- ONBOOT="yes"
- TYPE="Bridge"
- BOOTPROTO=static
- IPADDR=192.168.123.22
- NETMASK=255.255.255.0
- GATEWAY=192.168.123.1
- DEFROUTE=yes
上述配置将虚拟网卡配置在了 192.168.123.* 网段. 如果不需要静态地址, 可以把配置地址的相关项屏蔽. 如:
- DEVICE="br0"
- ONBOOT="yes"
- TYPE="Bridge"
- BOOTPROTO=dhcp
2, 编辑修改网络设备脚本文件, 修改网卡设备 eth0
- vim /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE="eth0"
- NM_CONTROLLED="no"
- ONBOOT="yes"
- TYPE=Ethernet
- BOOTPROTO=none
- BRIDGE="br0"
- NAME="System eth0"
- HWADDR=90:48:9a:1c:09:af
虚拟机机配置
虚拟机安装时注意, 网络要选择用 br0 桥接方式.
图形化的方式:
文本方式:
编辑修改虚拟机配置文件 /etc/libvirt/qemu/v1.xml, 增加如下内容
虚拟机启动后, 验证网络接口是否正常:
- brctl show
- bridge name bridge id STP enabled interfaces
- br0 8000.4437e64a62ad no eth0
- vnet0
- NAT
默认就有 nat 支持, 需要另外的操作, 在图形操作里面直接选择 nat 就可以啦.
服务端口开放
1, 桥接的虚拟机直接在, iptables 里面开放服务访问就可以直接访问了, 不需要经过宿主机的规则限制.
2,nat 模式, 默认所有的端口只是对虚拟机的网段开放而已, 如果需要开放端口, 就需要设置端口转发, 可以利用一些端口转发工具, 也可以直接用 iptables.
例子, 其中 192.168.122.10 是我的虚拟机, 192.168.122.1 是宿主机的 IP, 需要设置 ip_forwad 参数
- iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.122.10:80
- iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.122.1
- echo 1 > /proc/sys/net/ipv4/ip_forward
这样子, 我直接访问我宿主机的 80 端口, 就会转发到虚拟机里面的服务了.
来源: http://virtual.51cto.com/art/201808/580825.htm