利用namespace创建虚拟机:

加载kvm模块:
# grep -o -E ‘svm|vmx’ /proc/cpuinfo –color
vmx
# modprobe kvm_intel
# modprobe kvm
# lsmod | grep kvm
kvm_intel             170086  0
kvm                   566340  1 kvm_intel
irqbypass              13503  1 kvm
创建netspace
# yum -y install qemu-kvm
# ip netns add r2
# ip netns add r1
# ip netns list
r1
r2
在namespace运行测试
# ip netns exec r1 ifconfig -a
lo: flags=8<LOOPBACK>  mtu 65536
loop  txqueuelen 1  (Local Loopback)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# ip netns exec r1 ifconfig -a
lo: flags=8<LOOPBACK>  mtu 65536
loop  txqueuelen 1  (Local Loopback)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.209.13  netmask 255.255.255.0  broadcast 192.168.209.255
inet6 fe80::20c:29ff:fe6c:1f58  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:6c:1f:58  txqueuelen 1000  (Ethernet)
RX packets 2798  bytes 216063 (210.9 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 3082  bytes 1433753 (1.3 MiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.0.0.207  netmask 255.255.255.0  broadcast 10.0.0.255
inet6 fe80::dd90:75e0:5453:904d  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:6c:1f:62  txqueuelen 1000  (Ethernet)
RX packets 25931  bytes 36933919 (35.2 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 8150  bytes 592338 (578.4 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet6 fe80::1fb8:11d:fd2d:f7d9  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:6c:1f:6c  txqueuelen 1000  (Ethernet)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 346  bytes 61308 (59.8 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
inet 127.0.0.1  netmask 255.0.0.0
inet6 ::1  prefixlen 128  scopeid 0x10<host>
loop  txqueuelen 1  (Local Loopback)
RX packets 0  bytes 0 (0.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 0  bytes 0 (0.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
创建桥:
# yum -y install bridge-utils
# brctl addbr net-ex
# brctl show
bridge name    bridge id        STP enabled    interfaces
net-ex        8000.000000000000    no

物理网卡拆除地址,桥添加ip:
# ip add del 10.0.0.207/24 dev ens34;brctl addif net-ex ens34; ifconfig net-ex 10.0.0.207/24 up;# ip route add default via 10.0.0.1;ip route add default via 10.0.0.1
# brctl show
bridge name    bridge id        STP enabled    interfaces
net-ex        8000.000c296c1f62    no        ens34

# ifconfig
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet6 fe80::dd90:75e0:5453:904d  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:6c:1f:62  txqueuelen 1000  (Ethernet)
RX packets 11601  bytes 10405655 (9.9 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 3337  bytes 238642 (233.0 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

net-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.0.0.207  netmask 255.255.255.0  broadcast 10.0.0.255
inet6 fe80::20c:29ff:fe6c:1f62  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:6c:1f:62  txqueuelen 1000  (Ethernet)
RX packets 2943  bytes 1075890 (1.0 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 8  bytes 648 (648.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# brctl addbr net-in
# brctl show
bridge name    bridge id        STP enabled    interfaces
net-ex        8000.000c296c1f62    no        ens34
net-in        8000.000000000000    no

# ip link set net-in up;ip link set net-ex up;

打开核心转发:
# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
net.ipv4.ip_forward = 1

创建网卡对:
# ip link add veth0 type veth peer name veth0.1
# ip link show
6: veth0.1@veth0: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 2a:b7:86:a4:e0:e7 brd ff:ff:ff:ff:ff:ff
7: veth0@veth0.1: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 8e:7a:3b:66:28:27 brd ff:ff:ff:ff:ff:ff

添加接口进入桥:
# brctl addif net-in ens35
# brctl show
bridge name    bridge id        STP enabled    interfaces
net-ex        8000.000c296c1f62    no        ens34
net-in        8000.000c296c1f6c    no        ens35
# brctl addif net-ex veth0

给对网卡添加地址:
# ip netns exec r1 ifconfig veth0.1 10.0.0.222/24 up
# ip netns exec r1 ifconfig
veth0.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.0.0.222  netmask 255.255.255.0  broadcast 10.0.0.255
inet6 fe80::28b7:86ff:fea4:e0e7  prefixlen 64  scopeid 0x20<link>
ether 2a:b7:86:a4:e0:e7  txqueuelen 1000  (Ethernet)
RX packets 456  bytes 100463 (98.1 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 8  bytes 648 (648.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# ip link add veth1 type veth peer name veth1.1
# brctl show
bridge name    bridge id        STP enabled    interfaces
net-ex        8000.000c296c1f62    no        ens34
veth0
net-in        8000.000c296c1f6c    no        ens35
# brctl addif net-in veth1
# ip link set veth1 up

把网卡添加到namespace:
# ip link set veth1.1 netns r1
# ip netns exec r1 ip link set veth1.1 up
# ip netns exec r1 ifconfig
veth0.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 10.0.0.222  netmask 255.255.255.0  broadcast 10.0.0.255
inet6 fe80::28b7:86ff:fea4:e0e7  prefixlen 64  scopeid 0x20<link>
ether 2a:b7:86:a4:e0:e7  txqueuelen 1000  (Ethernet)
RX packets 806  bytes 171737 (167.7 KiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 13  bytes 1026 (1.0 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth1.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 172.16.0.1  netmask 255.255.255.0  broadcast 0.0.0.0
inet6 fe80::b040:31ff:fed9:b3f7  prefixlen 64  scopeid 0x20<link>
ether b2:40:31:d9:b3:f7  txqueuelen 1000  (Ethernet)
RX packets 7  bytes 578 (578.0 B)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 7  bytes 578 (578.0 B)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
启动虚拟机:
# mkdir -pv /images/cirros
# mv cirros-0.3.5-x86_64-disk.img /images/cirros/
# yum -y install qemu-kvm
# ln -sv /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
# chmod +x /etc/qemu-kvm/qemu-if*
# bash -n /etc/qemu-kvm/qemu-ifup
# bash -n /etc/qemu-kvm/qemu-ifdown

虚拟机启动脚本:
# cat /etc/qemu-kvm/qemu-ifup
#!/bin/bash
#
bridgename=net-in
if [ -n $1 ] ; then
ip link set $1 up
sleep 1
brctl addif $bridgename $1
[ $? -eq 0 ] && exit 0 || exit 1
else
echo “Error:no interface specified!”
fi

[root@localhost ~]# cat /etc/qemu-kvm/qemu-ifdown
#!/bin/bash
#
bridgename=net-in
if [ -n $1] ;then
brctl delif $bridgename $1
sleep 1
ip link set $1 down
[ $? -eq 0 ] && exit 0 || exit 1
else
echo “Error:no interface specified!”
fi

启动虚拟机:
# qemu-kvm -m 128 -smp 2 -drive \
file=/images/cirros/cirros-0.3.5-x86_64-disk.img,media=disk,format=qcow2,if=virtio,cache=writeback \
-net nic,model=virtio,macaddr=52:54:00:A5:41:1E -net tap,vnet_hdr=on,vhost=on,script=/etc/qemu-kvm/qemu-ifup,downscript=/etc/qemu-kvm/qemu-ifdown \
-balloon virtio \
-nographic

启动nat模式:
# ip netns exec r1 iptables -t nat -A POSTROUTING -s 172.16.0.0/16 ! -d 172.16.0.0/16 -j SNAT –to 10.0.0.222

开启namespace dhcp:
# yum -y install dnsmasq
# dnsmasq –help
-F, –dhcp-range=<ipaddr>,…           Enable DHCP in the range given with lease duration.
-a, –listen-address=<ipaddr>           Specify local address(es) to listen on.
-O, –dhcp-option=<optspec>             Specify options to be sent to DHCP clients.

启动netspace-dhcp功能:
# ip netns exec r1 dnsmasq –dhcp-range=172.16.0.10,172.16.0.20 –listen-address=172.16.0.1 –dhcp-option=option:router,172.16.0.1

启动第二台虚拟机测试:
# cp /images/cirros/cirros-0.3.5-x86_64-disk{.img,2.img} -av
‘/images/cirros/cirros-0.3.5-x86_64-disk.img’ -> ‘/images/cirros/cirros-0.3.5-x86_64-disk2.img’
# cp -av /etc/qemu-kvm/qemu-ifup{,2}
‘/etc/qemu-kvm/qemu-ifup’ -> ‘/etc/qemu-kvm/qemu-ifup2’
# cp -av /etc/qemu-kvm/qemu-ifdown{,2}
‘/etc/qemu-kvm/qemu-ifdown’ -> ‘/etc/qemu-kvm/qemu-ifdown2’

# qemu-kvm -m 128 -smp 2 \
> -nographic \
> -drive file=/images/cirros/cirros-0.3.5-x86_64-disk2.img,media=disk,if=virtio,cache=writeback,format=qcow2 \
> -net nic,macaddr=52:54:00:A5:41:2E,model=virtio -net tap,vnet_hdr=on,vhost=on,script=/etc/qemu-kvm/qemu-ifup2,downscript=/etc/qemu-kvm/qemu-ifdown2 \
> -balloon virtio

# udhcpc -R
udhcpc (v1.20.1) started
WARN: ‘/usr/share/udhcpc/default.script’ should not be used in cirros. Replaced by cirros-dhcpc.
Sending discover…
Sending select for 172.16.0.19…
Lease of 172.16.0.19 obtained, lease time 3600
WARN: ‘/usr/share/udhcpc/default.script’ should not be used in cirros. Replaced by cirros-dhcpc.

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    0      0        0 eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值