局域网直接访问docker容器网络配置

配置逻辑桥接网卡

宿主机安装bridge-utils工具

yum install -y bridge-utils

配置br0逻辑桥接网卡

  1. 备份原有网卡配置

    mkdir /etc/sysconfig/network-scripts-backup
    cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts-backup/ifcfg-eth0.backup
    
  2. 添加bridge逻辑网卡配置

    #覆盖原有网卡 此处的eth0需要修改为对应的网卡名称,示例以eth0为例
    cat  > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
    DEVICE=eth0
    NM_CONTROLLED=no
    ONBOOT=yes
    TYPE=Ethernet
    BOOTPROTO=none
    BRIDGE=br0
    NAME=eth0
    EOF
    
    #添加桥接网卡配置,局域网网段子网掩码最好设置成255.255.0.0,这样留给docker容器的网段在配置成更小的子网段,才不会造成docker生成的容器ip冲突
    cat >/etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
    DEVICE=br0
    ONBOOT=yes
    TYPE=Bridge
    BOOTPROTO=static
    NM_CONTROLLED=no
    IPV4_FAILURE_FATAL=yes
    IPV6INIT=no
    IPADDR=192.168.1.145
    GATEWAY=192.168.1.1
    PREFIX=16
    DNS1=192.168.1.1
    DNS2=114.114.114.114
    DEFROUTE=yes
    EOF
    
    
  3. 重启网卡

    #需要先禁用NetworkManager
    systemctl stop NetworkManager && systemctl disable NetworkManager
    systemctl enable network && systemctl restart network 
    
  4. 配置防火墙,否则docker使用桥接网卡容器无法提供上网功能

    systemctl enable firewalld && systemctl restart firewalld 
    
    #配置允许该网卡所有数据包都能被接受,如果不配会导致docker容器无法通行
    firewall-cmd --permanent --zone=trusted --add-interface=br0
    
    #配置nat,否则会导致容器访问不了公网
    firewall-cmd --add-masquerade --zone=trusted --permanent
    #or 1
    #配置nat,否则会导致容器访问不了公网,更高级,只配置指定网段到指定网段进行nat
    #此例是配置192.168.12.0/24网段到除192.168.0.0/16之外的网段进行nat转换
    firewall-cmd --permanent --direct --add-rule ipv4  nat POSTROUTING 0 -s 192.168.12.0/24 ! -d 192.168.0.0/16   -o br0 -j MASQUERADE
    #组播地址池禁止nat转换
    firewall-cmd --permanent --direct --add-rule ipv4  nat POSTROUTING 0 -s 192.168.12.0/24 ! -d 224.0.0.0/4 -o br0 -j MASQUERADE
    #or 2
    #和上面or1类似,只是指定snat伪装地址为192.168.1.145
    firewall-cmd --permanent --direct --add-rule ipv4  nat POSTROUTING 0 -s 192.168.12.0/24 ! -d 192.168.0.0/16  -j SNAT --to-source 192.168.1.145
    firewall-cmd --permanent --direct --add-rule ipv4  nat POSTROUTING 0 -s 192.168.12.0/24 ! -d 224.0.0.0/4  -j SNAT --to-source 192.168.1.145
    
    #重新加载防火墙配置
    firewall-cmd --reload
    
    # 开启ipv4转发功能
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p
    
  5. 验证桥接网卡

    • ifconfig br0 :

      br0: flags=4163  mtu 1500
              inet 192.168.1.145  netmask 255.255.0.0  broadcast 192.168.255.255
              ether 80:18:44:e6:dc:8d  txqueuelen 1000  (Ethernet)
              RX packets 83673216  bytes 33876

你可能感兴趣的:(笔记,docker,centos,容器)