利用Linux的虚拟化 络设备bridge实现nat 络。
1.环境准备
实现环境为ubuntu-16.04服务器版本,在安装操作系统时,选装了支持虚拟化相关的包,能创建KVM虚拟机,能启动dnsmasq服务。另外手动安装了桌面软件包及管理KVM虚拟机的可视化界面virt-manager。
2.IP地址规划
如下图:
名称 | 段 | 掩码 | 关 | DHCP地址 |
test-br-01 |
172.16.0.3~172.16.1.50 | 255.255.255.0 | 172.16.0.1 | 172.16.1.2 |
3.创建内部 络
在Linux 络虚拟化之bridge-实现内部 络有内部 络的整个创建过程,直接使用里面提到的命令创建内部 络。
创建/etc/test-dnsmasq.conf,加入如下内容并保存,其它项不用配置。
interface=test-veth-02 # DNS监听接口
bind-interfaces # 绑定
dhcp-range=172.16.0.2,172.16.0.50,255.255.255.0,12h # 段
dhcp-leasefile=/var/lib/misc/test-dnsmasq.leases # 管理IP地址数据文件
dhcp-option=option:router,172.16.0.1 # 关
依次运行如下命令,创建内部 络并启动dnsmasq:
# 创建名称空间test-ns-01
ip netns add test-ns-01
# 创建VETH PAIR
ip link add test-veth-01 type veth peer name test-veth-02
# 将VETH PAIR的一端加入 络命名空间
ip link set test-veth-02 netns test-ns-01
# 在 络命名空间中为VETH设备设备IP
ip netns exec test-ns-01 ip addr add 172.16.0.2/24 dev test-veth-02
# 在 络命名空间中启动设备
ip netns exec test-ns-01 ip link set test-veth-02 up
# 在 络命名空间中启动dnsmasq
ip netns exec test-ns-01 /usr/sbin/dnsmasq –conf-file=/etc/test-dnsmasq.conf
# 创建 桥
brctl addbr test-br-01
# 为 桥增加接口
brctl addif test-br-01 test-veth-01
# 启动设备
ip link set test-br-01 up
ip link set test-veth-01 up
运行完以上命令后,内部 络创建完成,假设现在就创建两台虚拟机test01与test02,并连接到test-br-01这个 络上,则 络连接示意图如下:
图2
图2中的绿色字体及绿色实线,是在图1的基础上新加的。为虚拟 桥设备test-br-01设置IP地址作为 关,用iptables实现三层转发与nat,一个内部 络就变成nat 络能够连接外 了。需要注意的一点是虽然能够访问外 ,但是不能解析域名。原因就是为 络提供DNS服务的dnsmasq被隔离在了test-ns-01 络名称空间中,它无法向上游的DNS服务器请求服务。需要手动为所创建的虚拟机修改/etc/resolv.conf文件,加入一个可用的DNS服务器如8.8.8.8就可以解析域名了。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux入门初识Linux24910 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!