【系统集成】linux&win双网卡网桥配置

※简介※

对于服务器而言多网卡是标配,针对不同需求,如何充分利用是集成运维时应该思考的问题,比如为了冗余可以配置双网卡绑定,为了连接多网段我们可以启用路由转发,但有时我们仅仅是想要连接两个独立的终端,或两个hub,配置多网卡的网桥模式,更合时宜。


一、桥接、交换、路由?

①、桥接

为了让同学们更充分理解需求,在讲网桥之间,我们需要了解一下什么是桥接、交换、路由?首先是桥接,其工作在OSI网络参考模型的第二层数据链路层,是一种以mac地址来作为判断依据来讲网络划分为两个不同物理段的技术,其工作机制就是将物理网络段(即冲突域)进行分割,根据mac地址来判断连接两个物理网段的计算机的数据包发送。

举个例子如上图有两台集线器分别连接多台计算机,我们分别将A集线器和B集线器定为A冲突域和B冲突域,如果两个集线器之间是直连的。在这样的网络环境中,如果计算机M1向计算机M4发送数据包时,集线器A会将数据包在整个网络中的全部计算机(包括集线器B)发送一遍,而不管这些数据包是不是需要发送到另一台区域B。

而如果我们再将集线器A和集线器B分别连接到网桥的两个端口上,如果计算机M1再向计算机M4发送数据包时会遇到什么样的情况呢?这时集线器A也是同样会将数据包在全网发送,当到达网桥后,网桥会进行数据包目的MAC地址的分析,然后对比自己学习到的MAC地址表,如果这个表中没有此MAC地址,网桥便会在两个网段上的发送数据包,同时会将计算机A的MAC地址记录在自己的表当中。

经过多次这样的记录,网桥会将所有的MAC地址记录,并根据网桥的两个接口划分成两个物理网段,这时计算机M1再次发送数据包给M4的时候,数据包到达网桥时,网桥会将目的MAC地址和自己的表进行对比,并且判断计算机M1和计算机M4是否在同一个段位上,如果是便不会转发到区域B当中,而如果不在同一个物理段当中,网桥便会允许数据包通过网桥。

通过以上的例子我们了解到,网桥实际上是一种控制冲突域流量的设备,即隔离冲突域。而事实上网桥现在基本上已经很少用到了,因为交换和路由设备已经很普遍存在了。目前桥接更多的应用不是多网卡做网桥,而是用来虚拟系统与外部的桥接,比如常用的vmware的桥接,和docker容器的网络栈。

扩展

什么是冲突域?

冲突域的定义在以太网中,如果某个CSMA/CD(一种争用型的介质访问控制协议)网络上的两台计算机在同时通信时会发生冲突,那么这个CSMA/CD就是一个冲突域,如果以太网中的各个网段以hub连接,因为不能避免冲突,所以它们仍然是一个冲突域。

可以理解为冲突域就是连接在同一导线上的所有工作站的集合,或者说是同一物理网段上所有节点的集合,或以太网上竞争同一带宽的节点集合。

或者说是同一物理网段上所有节点的集合,或以太网上竞争同一带宽的节点集合。比如某台特定设备在网段上发送一个数据包,迫使同一个网段上的其他设备都必须注意到这一点,在同一时刻,如果两台不同的设备试图发送数据包,就会发生冲突,此后,两台设备都必须重新发送数据包,同一时刻只能有一台设备发送,如此两台设备同时发包就是一个冲突域。

而交换机则可以用来分割冲突域,但不能分割广播域(vlan可以分割广播域,而vlan是通过第三层vlan间路由协议来通信的),路由器则每个接口提供一个单独的广播域,路由既可以分割冲突域同时也可以分割广播域。

冲突域是在同一个网络上两个比特同时进行传输则会产生冲突;在网路内部数据分组所产生与发生冲突的这样一个区域称为冲突域,所有的共享介质环境都是一个冲突域,在共享介质环境中一定类型的冲突域是正常行为。所以目前网络中,我们一般通过交换和路由来进行连接终端隔离冲突域。

②、交换

交换同样工作在OSI网络参考模型的第二层数据链路层,也是一种以MAC地址来作为判断依据来将网络划分成两个不同段的技术,不同的是交换将物理网段划分到每一个端口当中,简单的理解就是一种多端口的网桥,它实际上是一种桥接技术的延伸,可以理解为交换机的每个端口都是一个网桥。

了解数通交换路由的同学应该知道,交换机系统有一张mac地址交换表,记录的是mac地址和接口的表,有别于arp表的mac地址和ip对应关系,交换机通过自我学习记录mac地址和接口的对应关系来隔离冲突域。

②、路由

路由有别于上面两个,其工作在OSI参考模型的第三层网络层中,基于第三层ip地址和其的子网掩码信息来作为判断依据将网络划分为不同子网段从而寻径转发的技术。

路由划分的是独立的逻辑网段,具有隔离广播的能力,而桥接和交换是划分的物理网段,仅仅是将物理传输介质进行分段处理。同时路由具备路径选择的能力,根据不同目的ip、开销等分析到达目的最合适的路径。

有的同学可能说vlan不也是交换机的配置嘛,但vlan走的是三层的路由协议,交换机之所以支持是因为集成了三层路由的功能,我们说的三层交换机是交换和路由的集合体。

二、linux多网卡网桥配置

①、安装bridge软件:

ubuntu下安装:

$sudo apt-get install bridge-utils

rehad/centos下安装:

# yum -y install bridge-utils#

②、命令brctl

Usage: brctl [commands]
commands:
addbr            <bridge> add bridge
delbr            <bridge> delete bridge
addif            <bridge> <device> add interface to bridge
delif            <bridge> <device> delete interface from bridge
hairpin          <bridge> <port> {on|off} turn hairpin on/off
setageing        <bridge> <time> set ageing time
setbridgeprio    <bridge> <prio> set bridge priority
setfd            <bridge> <time> set bridge forward delay
sethello         <bridge> <time> set hello time
setmaxage        <bridge> <time> set max message age
setpathcost      <bridge> <port> <cost> set path cost
setportprio      <bridge> <port> <prio> set port priority
show           [ <bridge> ] show a list of bridges
showmacs         <bridge> show a list of mac addrs
showstp          <bridge> show bridge stp info
stp              <bridge> {on|off} turn stp on/off

③、创建网桥br1

$ sudo brctl addbr br1

④、将eth0、eth1网卡加入br1

$ sudo brctl addif br1 eth0
$ sudo brctl addif br1 eth1

⑤、查看网桥br1

$sudo brctl show
$sudo bridge link
$sudo bridge vlan

⑥、配置ip:

$ip addr add 127.0.0.1/8 dev lo brd +
$ifconfig br0 192.168.1.1

⑦、删除网桥:

$ip addr del 192.168.1.1/24 dev br0 brd +
$sudo brctl delif br0 eth0
$sudo brctl delif br0 eth1
$sudo brctl delbr br0

⑧、通过“ip”命令管理网桥:

$ sudo ip link add name br0 type bridge <创建网桥br0>
$ sudo ip link set br0 up
$ suduo ip link set dev eth0 master br0 <网卡加入br0>
$ sudo ip link set dev eth0 nomaster
$ sudo ip add add 192.168.1.1/24 dev br0 <配置ip地址>
$ sudo ip route add default via 192.168.1.2
$ sudo route add defatult gw 192.168.1.2 <配置默认网关>
扩展

由上网桥的每个物理网卡作为一个端口,运行于混杂模式,而且是在链路层工作,相当于交换机的两个口,所以就不需要配置ip了,不然反而会对网络有所影响。

但事实生产环境中配置网桥的很少,有交换机就好了,但有一种应用还是比较常见的,那就是我们常说的虚拟机或虚拟容器的桥接模式,区别在于上面我们桥接的是两个物理网口,而后者则是对物理网口和虚拟接口的桥接配置,常见的如docker容器里veth和bridge的应用。

其中veth是一种虚拟设备接口,veth和其它的网络设备都一样,一端连接的是内核协议栈。另一端两个设备彼此相连,一个设备收到协议栈的数据发送请求后,会将数据发送到另一个设备上去,所以其都是成对出现的。其可以连接容器和本地的两个接口,也可以是连接两个设备之间的接口,更甚者创建多接口多路由的连接。这里大嘴也没有深入,今天只延伸一下veth和bridge在docker里的应用。

  • docker之veth和bridge:

①、ubuntu下配置docker:

$sudo ip link add name br0 type bridgec
$sudo ip link set br0 up

②、当创建一个bridge是,它是一个独立的网络设备,只有一个端口连这协议栈,其它的端口啥都没有连接,这样的bridge没有任何的实际功能,这个时候我们创建一对veth0,并让其与bridge相连。

$sudo ip link add veth0 type veth peer name veth1
$sudo ip link set veth0 up
$sudo ip link set veth1 up
$sudo ip link set dev veth0 master br0

③、这个时候,bridge相当于在veth0和协议栈之间插了一脚,veth0相当于br0和veth1之间的一根网线,在docker应用中,每个容器用一对veth网卡通过bridge和主机通信,我们只需给每个容器的那端veth网卡和bridge配置ip即可。

$sudo ip add add 192.168.1.101/24 dev br0
$sudo ip add add 192.168.1.102/24 dev veth1

④、为了主机和外部主机的通信,把物理网卡eth0加入bridge,同理,网卡eth0也当作一根bridge连接外部的网线,所以eth0也可以不配置ip,但还需要添加默认路由。

$sudo ip link set dev eth0 master br0
$sudo ip route add default via 192.168.1.1

⑤、在特殊环境下,还需要修改相关系统参数rp_filter, arp_filter, arp_ignore, arp_announce等。还有一种在无线网络的情况下,因为需要登录验证,而且登录验证后,无线路由器只认一个mac地址,也就是说桥接的网卡可能无法上网,一般的虚拟软件会把虚拟网卡做自动转换,但是如在br0中当一个ip包含多个mac时,就会出问题,解决方法就是把br0中的所有虚拟网卡mac都手动配置成eth0物理网卡的mac即可。

$sudo ip link set dev veth0 down
$sudo ip link set dev veth0 address *.*.*.*.*.*
$sudo ip link set dev veth0 up

⑥、如此我们的网络变可实现从内到外,从外到内以及容器之间的通信。

+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
|                          Host                                  |              Container 1                |              Container 2                |
|                                                                |                                         |                                         |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|       |             Newwork Protocol Stack             |       |       |  Newwork Protocol Stack |       |       |  Newwork Protocol Stack |       |
|       +------------------------------------------------+       |       +-------------------------+       |       +-------------------------+       |
|            ↑             ↑                                     |                   ↑                     |                    ↑                    |
|............|.............|.....................................|...................|.....................|....................|....................|
|            ↓             ↓                                     |                   ↓                     |                    ↓                    |
|        +------+     +--------+                                 |               +-------+                 |                +-------+                |
|        |.3.101|     |  .9.1  |                                 |               |  .9.2 |                 |                |  .9.3 |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|        | eth0 |     |   br0  |<--->|  veth |                   |               | eth0  |                 |                | eth0  |                |
|        +------+     +--------+     +-------+                   |               +-------+                 |                +-------+                |
|            ↑             ↑             ↑                       |                   ↑                     |                    ↑                    |
|            |             |             +-------------------------------------------+                     |                    |                    |
|            |             ↓                                     |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |         |  veth |                                 |                                         |                    |                    |
|            |         +-------+                                 |                                         |                    |                    |
|            |             ↑                                     |                                         |                    |                    |
|            |             +-------------------------------------------------------------------------------|--------------------+                    |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
|            |                                                   |                                         |                                         |
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+
             ↓
     Physical Network  (192.168.3.0/24)

三、windows多网卡网桥配置

 ①、命令“ncpa.cpl”打开网络适配器管理界面。

②、通过上面的理解,把两个物理网卡桥接,网卡可以被理解为一根网线,所以不许配置ip,我们把IP地址获取方式修改为自动获取。

③、我们可以把本地连接和无线网络连接两个网卡做桥接,从而可以使其它没有无线网卡的终端通过本地连接接入到无线网络中上网,反之亦然。配置桥接很简单,只需同时选中“本地连接”和“无线网络连接”两个网卡,鼠标右键,点击“桥接”即可。

④、然后给生成的桥接网卡配置ip地址即可。

⑤、如果设计复杂点的网络还可通过打开路由转发,配合路由,做网络交换路由使用。

(今天的分享就到这里,如果您有高见或好的分享,记得留言哦!)


原创文章,转载请注明:转自于公牛博客

本文链接地址:【系统集成】linux&win双网卡网桥配置

11
祝福我们的祖国繁荣昌盛
  • 请尽情挥洒您的笔墨!

    欢迎来到公牛博客更多分享更多精彩记录美丽点亮生活

    公牛博客·统计碑运行:2841 D
    博文:213 P
    评论:1872 S