一、linux网卡桥接问题

在linux上创建桥接网卡,与真实的物理网卡进行绑定,相当于在linux中创建了一个虚拟的交换机,以linux网卡地址为源地址的数据,从桥接网卡br0进入,从实际的物理网卡eth0发出;

创建桥接网卡br0,需要在网卡的配置文件目录下创建br0的配置文件,并与实际的物理网卡eth0进行绑定,配置如下:

  1. [root@linux-node1 network-scripts]# cat ifcfg-br0
  2. DEVICE=br0
  3. TYPE=Bridge
  4. ONBOOT=yes
  5. BOOTPROTO=static
  6. IPADDR=192.168.74.20
  7. NETMASK=255.255.255.0
  8.  
  9. [root@linux-node1 network-scripts]# cat ifcfg-eth0
  10. TYPE=Ethernet
  11. BOOTPROTO=none #必须为none
  12. NAME=eth0
  13. DEVICE=eth0
  14. ONBOOT=yes
  15. BRIDGE=br0

重启机器之后,就可以看到两者绑定了,并且地址存在于网卡br0上,如下:

  1. [root@linux-node1 ~]# brctl show
  2. bridge name bridge id STP enabled interfaces
  3. br0 8000.000c29896a8f no eth0
  4. veth0pl8880
  5. docker0 8000.02426fb6b621 no
  6. virbr0 8000.000000000000 yes
  7. [root@linux-node1 ~]# ifconfig
  8. br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  9. inet 192.168.74.20 netmask 255.255.255.0 broadcast 192.168.74.255
  10. inet6 fe80::f816:37ff:fe69:8763 prefixlen 64 scopeid 0x20<link>
  11. ether 00:0c:29:89:6a:8f txqueuelen 0 (Ethernet)
  12. RX packets 26941 bytes 14148328 (13.4 MiB)
  13. RX errors 0 dropped 0 overruns 0 frame 0
  14. TX packets 23408 bytes 2718697 (2.5 MiB)
  15. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  16.  
  17. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  18. ether 00:0c:29:89:6a:8f txqueuelen 1000 (Ethernet)
  19. RX packets 77954 bytes 97712837 (93.1 MiB)
  20. RX errors 0 dropped 0 overruns 0 frame 0
  21. TX packets 23714 bytes 3017447 (2.8 MiB)
  22. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

但是,这样配置之后,还存在一个问题,对于同一个网段内的地址(192.168.74.0/24),通信是没有问题的,不跨网段,不涉及路由,不需要都网关就可以到达,但是如果是其他网段的地址,就无法通信了,给所有的网卡加上网关。给所有的网卡配置上网关,而不需要在每一个网卡上面进行配置,需要如下配置:

  1. [root@linux-node1 ~]# cat /etc/sysconfig/network
  2. # Created by anaconda
  3.  
  4. NETWORKING=yes
  5. HOSTNAME=linux-node1
  6. GATEWAY=192.168.74.2

这样,重启机器,就可以全部生效了

  1. [root@linux-node1 ~]# route -n
  2. Kernel IP routing table
  3. Destination Gateway Genmask Flags Metric Ref Use Iface
  4. 0.0.0.0 192.168.74.2 0.0.0.0 UG 425 0 0 br0
  5. 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
  6. 192.168.74.0 0.0.0.0 255.255.255.0 U 425 0 0 br0
  7. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

二、docker网卡使用桥接,网关地址设置为宿主机地址后,数据转发问题

首先创建一个docker,并分配指定的地址和网关

  1. docker create -it -h myhost --cap-add SYS_PTRACE --net=none --name myhost_192.168.74.30 --cpu-quota 1200000 --cpu-period=10000 841c208badec "/sbin/init"
  2.  
  3. docker start myhost_192.168.74.30
  4.  
  5. pipework br0 -i eth0 myhost_192.168.74.30 192.168.74.30/24@192.168.74.20

查看docker状态如下:

  1. [root@linux-node1 ~]# docker exec -it myhost_192.168.74.30 bash
  2. [root@myhost /]# ifconfig
  3. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  4. inet 192.168.74.30 netmask 255.255.255.0 broadcast 192.168.74.255
  5. inet6 fe80::88cf:29ff:fe44:5ec8 prefixlen 64 scopeid 0x20<link>
  6. ether 8a:cf:29:44:5e:c8 txqueuelen 1000 (Ethernet)
  7. RX packets 744 bytes 141673 (138.3 KiB)
  8. RX errors 0 dropped 0 overruns 0 frame 0
  9. TX packets 9 bytes 690 (690.0 B)
  10. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  11.  
  12. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  13. inet 127.0.0.1 netmask 255.0.0.0
  14. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  15. loop txqueuelen 0 (Local Loopback)
  16. RX packets 0 bytes 0 (0.0 B)
  17. RX errors 0 dropped 0 overruns 0 frame 0
  18. TX packets 0 bytes 0 (0.0 B)
  19. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  20.  
  21. [root@myhost /]# route -n
  22. Kernel IP routing table
  23. Destination Gateway Genmask Flags Metric Ref Use Iface
  24. 0.0.0.0 192.168.74.20 0.0.0.0 UG 0 0 0 eth0
  25. 192.168.74.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

但是此时,在容器ping外网地址,不通:

  1. [root@linux-node1 ~]# sysctl -a|grep forwarding|grep br0.for
  2. net.ipv4.conf.br0.forwarding = 0
  3. net.ipv4.conf.virbr0.forwarding = 1
  4. net.ipv6.conf.br0.forwarding = 0
  5. net.ipv6.conf.virbr0.forwarding = 0

可以看到br0转发默认是关闭的,打开br0的转发就可以了:

  1. [root@linux-node1 ~]# sysctl -w net.ipv4.conf.br0.forwarding=1
  2. net.ipv4.conf.br0.forwarding = 1
  3. [root@linux-node1 ~]#

  

三、多块网卡使用同一个网关时,数据转发问题

我们添加另外一块网卡eth0:

  1. [root@linux-node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
  2. TYPE=Ethernet
  3. BOOTPROTO=static
  4. NAME=eth1
  5. UUID=8f53b0c4-abe1-49ac-964a-7add4b5809d4
  6. DEVICE=eth1
  7. ONBOOT=yes
  8. IPADDR=10.0.0.4

路由表如下:

  1. [root@linux-node1 ~]# route -n
  2. Kernel IP routing table
  3. Destination Gateway Genmask Flags Metric Ref Use Iface
  4. 0.0.0.0 192.168.74.2 0.0.0.0 UG 100 0 0 eth1
  5. 0.0.0.0 192.168.74.2 0.0.0.0 UG 425 0 0 br0
  6. 10.0.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1
  7. 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
  8. 192.168.74.0 0.0.0.0 255.255.255.0 U 425 0 0 br0
  9. 192.168.74.2 0.0.0.0 255.255.255.255 UH 100 0 0 eth1
  10. 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

但是,如果以eth1为源地址,ping外网地址,可以通,以br0位源地址,ping外网地址,不通,也就是说,只有一块网卡可以与外网通信,如何解决:

  1. [root@linux-node1 ~]# sysctl -a|grep rp_filter
  2. net.ipv4.conf.all.arp_filter = 0
  3. net.ipv4.conf.all.rp_filter = 1
  4. net.ipv4.conf.br0.arp_filter = 0
  5. net.ipv4.conf.br0.rp_filter = 1
  6. net.ipv4.conf.default.arp_filter = 0
  7. net.ipv4.conf.default.rp_filter = 1
  8. net.ipv4.conf.docker0.arp_filter = 0
  9. net.ipv4.conf.docker0.rp_filter = 1
  10. net.ipv4.conf.eth0.arp_filter = 0
  11. net.ipv4.conf.eth0.rp_filter = 1
  12. net.ipv4.conf.eth1.arp_filter = 0
  13. net.ipv4.conf.eth1.rp_filter = 1
  14. net.ipv4.conf.lo.arp_filter = 0
  15. net.ipv4.conf.lo.rp_filter = 0
  16. net.ipv4.conf.veth0pl4654.arp_filter = 0
  17. net.ipv4.conf.veth0pl4654.rp_filter = 1
  18. net.ipv4.conf.virbr0.arp_filter = 0
  19. net.ipv4.conf.virbr0.rp_filter = 1
  20. net.ipv4.conf.virbr0-nic.arp_filter = 0
  21. net.ipv4.conf.virbr0-nic.rp_filter = 1
  22. 可以看到rp_filter参数为1,如果设置为0,就可以了
  23. sysctl -w net.ipv4.conf.br0.rp_filter=0

如果想要使得配置永久生效,可以将其写入/etc/sysctl.conf中就可以了;

三、测试网卡是否有误网线连接

  1. [root@BASE-SERVER-1-10-10 network-scripts]# mii-tool em2
  2. em2: negotiated 1000baseT-FD flow-control, link ok
  3. [root@BASE-SERVER-1-10-10 network-scripts]# mii-tool em1
  4. em1: negotiated 1000baseT-FD flow-control, link ok
  5. [root@BASE-SERVER-1-10-10 network-scripts]# mii-tool br2

  

  

linux网卡桥接问题与docker网卡桥接问题的更多相关文章

  1. 【整理】Virtualbox中的网络类型(NAT,桥接等),网卡,IP地址等方面的设置

    之前是把相关的内容,放到: [已解决]实现VirtualBox中的(Guest OS)Mac和主机(Host OS)Win7之间的文件和文件夹共享 中的,现在把关于网络配置方面内容,单独提取出来,专门 ...

  2. docker 配置桥接网络

    2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...

  3. Linux网络管理(一):网卡驱动与Linux内核

    下图简单描述了网卡驱动与Linux内核之间的联系: 关于上图的一些说明: 系统初始化: 1. 协议模块调用 dev_add_pack() 来注册协议处理函数到链表 &ptype_base: 2 ...

  4. linux/Centos下查看和修改网卡Mac地址(ifconfig命令)

    本文转载自http://www.169it.com/article/14360294838474691537.html linux/Centos下查看网卡Mac地址,输入命令: #ifconfig - ...

  5. Linux下如何通过命令检查网卡是否插上网线

    How To:Linux下如何通过命令检查网卡是否插上网线   主要工具为ethtool来检查,主要关注的字段为"Link detected",注意如下的输出,其中em4实际物理上 ...

  6. 如何判断Linux下 网卡是虚拟还是物理网卡?

    ifconfig命令可以查看Linux系统中正在使用的网卡,包括物理网卡和虚拟网卡,如果想要查看Linux系统中全部的网卡,可以查看/proc/net/dev文件,那如何区分网卡是虚拟还是物理的呢? ...

  7. linux shell awk实现实时监控网卡流量脚本

    goodtools! 原文 awk 'BEGIN{ OFMT="%.3f"; devf="/proc/net/dev"; while(("cat &q ...

  8. 利用SSH桥接访问服务器的Docker运行的MySql服务

    前情提要 docker的运用越来广泛,许多IT公司都已经将自己的服务跑在Docker上面.在安全性方面又做了一层防护.比如:跑在Docker上的Mysql不做外网端口映射,只能在linux服务器上或进 ...

  9. 网卡也能虚拟化?网卡虚拟化技术 macvlan 详解

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 01 macv ...

随机推荐

  1. WebUploader 手机端上传图片(转)

    https://blog.csdn.net/loserorleader/article/details/50395040

  2. mysql表操作与权限操作

    修改表ALTER TABLE 语法: . 修改表名 ALTER TABLE 表名 RENAME 新表名; . 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ...

  3. python—正则表达式

    我们平时上网的时候,经常需要在一些网站上注册帐号,而注册帐号的时候对帐号信息会有一些要求. 比如: 上面的图片中,输入的邮件地址.密码.手机号 符合要求才可以注册成功. 我们是我们自己写的网站,那么我 ...

  4. 模拟select控件,css模拟下拉

    <!DOCTYPE html > <head>     <meta http-equiv="Content-Type" content="t ...

  5. Jquery在表格中搜索关键字

    <!DOCTYPE html><html><head> <title>ddd</title></head><body> ...

  6. spring boot js 文件引用 单引问题。

    首页 index.html 访问首页空白 . F12 控制台看页面元素布局.发现有两个body 标签 ,而且 </head> 标红. 各种检查....好像是没有问题. 但就是访问空白.去掉 ...

  7. iOS跳转洁面时隐藏tabBar的方法

    //1.设置self.tabBarController.tabBar.hidden=YES;       self.tabBarController.tabBar.hidden=YES;   //2. ...

  8. openstack placement

  9. Maven子模块

    1.选取父工程创建子模块(Maven Modeule) 2.创建子模块时 Packaging 选 jar

  10. Redis、MongoDB及Memcached的区别

    Redis(内存数据库) 是一个key-value存储系统(布式内缓存,高性能的key-value数据库).和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).l ...