美文网首页
实现一个可以从外部访问到的网络命名空间

实现一个可以从外部访问到的网络命名空间

作者: lzp1234 | 来源:发表于2019-04-12 11:00 被阅读0次

    前言

    写这篇文档是为了更好理解openstack neutron组件中的弹性ip实现(在外部可以ping通qrouter中的qg网卡)。
    这篇文章不在赘述基本知识。

    环境介绍

    一台vmware虚拟机:

    • 虚拟机操作系统:centos7任意版本
    • 虚拟机网卡:ens33,10.10.10.134
    • 网关是vmware的 10.10.10.2。

    实验目标:从宿主机ping通网络命名空间。
    openstack neutron用到了ovs以及linux bridge。许多文档介绍是因为引入了安全组所以多了一层网桥。这里简化操作使用linux bridge + network namespace。

    环境准备

    关闭防火墙

    如果你对防火墙有些了解的话,略过此步骤。

    systemctl stop firewalld
    systemctl stop iptables
    

    安装软件

    yum install -y tcpdump
    yum install -y bridge-utils
    yum install -y net-tools
    

    开始

    1. 网络命名空间

    创建网络命名空间:
    ip netns add ns2
    
    查看网络命名空间:
    ip netns
    
    image.png

    可以看到刚刚创建的ns2

    2. 网卡对(veth pair)

    网卡对类似一条网线。两个端口,并且端口之间保持连通。

    创建网卡对:
    ip link add veth-b-0 type veth peer name veth-b-1
    

    这里的 veth-b-0 和 veth-b-1 是两个端口的名称,自定义。

    查看网卡对:
    ip link list
    
    image.png

    可以看到两个带有@标志的网卡。@之后的信息是为了告知这个网卡与谁组成一对,@之前的信息为网卡名称。

    激活网卡对
    ip link set veth-b-0 up
    
    使用网卡对连接虚拟机与虚拟机上的网络命名空间:

    将veth-b-1放入网络命名空间ns2中

    ip link set veth-b-1 netns ns2
    

    查看网络命名空间中的网卡信息:

    ip netns exec ns2 ip a
    
    image.png
    配置网络命名空间中的网卡信息

    为网络空间中的veth-b-1网卡添加外部网段的ip地址(注意地址冲突):

    ip netns exec ns2 ifconfig veth-b-1 10.10.10.45/24 up
    

    为网络命名空间添加默认路由为外部真实网关:

    ip netns exec ns2 route add default gw 10.10.10.2
    

    3. 网桥

    注意创建网桥的过程中,网卡信息会有变动,因此外部的ssh连接会暂时中断,这里最好vmware控制台操作虚拟机。配置完成以后,ssh可以重新连接上。

    创建网桥:
    brctl addbr br2
    
    将物理网卡添加到网桥下

    将物理网卡的ip赋予网桥,我这里物理网卡的ip为10.10.10.134。注意替换成你自己的。

    brctl addif br2 ens33
    ifconfig ens33 0.0.0.0
    ifconfig br2 10.10.10.134/24 up
    

    此时ssh已经可以连接,但是ping baidu会失败。因为这里的默认路由因网卡信息的改变而被删除了。
    添加上默认路由:

    route add default gw 10.10.10.2
    
    将网卡对接入网桥

    veth-b-1已接入网络命名空间,还剩veth-b-0,这里将veth-b-0接入网桥当中。

    brctl addif br2 veth-b-0
    

    4. ping测试

    稍微等待一小会。可以先尝试从虚拟机ping,再从windows ping。
    此时从windows机器ping虚拟机中的网络命名空间中的veth-b-1网卡。ip为10.10.10.45

    扩展

    openstack qrouter 上的qg网卡多个ip实现

    我们也可以为网络命名空间中的veth-b-1赋予多个ip:

    ip netns exec ns2 ip addr add 10.10.10.46/24 dev veth-b-1
    

    这个地址当然也是可以从外部ping通的。
    还记得,前面装了一个tcpdump吗,如果不确定流量是否真的是到达了网络命名空间中的veth-b-1网卡上,我们可以利用这个工具抓包:

    ip netns exec ns2 tcpdump -i veth-b-1 icmp
    

    然后在windows机器上ping这个网卡的ip,可以看到抓包情况。


    image.png

    网络命名空间可以使用物理网卡吗?

    实际测试,可以将物理网卡直接配置进网络命名空间中,配置好ip以及路由之后。即可与外部互相通信。

    相关文章

      网友评论

          本文标题:实现一个可以从外部访问到的网络命名空间

          本文链接:https://www.haomeiwen.com/subject/yvlqwqtx.html