基本配置 将 Linux 主机接入到网络,需要配置网络相关设置。一般包括如下内容:
1 2 3 4 5 6 7 - 主机名 - IP/netmask - 路由:默认网关 - DNS服务器 - 主DNS服务器 - 次DNS服务器 - 第三个DNS服务器
命令修改的配置一般都是临时的,重启机器就失效了,如果要让配置更改永久生效,需要将配置更改写入到相关的配置文件中
相关配置文件 配置当前主机的主机名 永久修改:
1 2 3 4 5 6 /etc/sysconfig/network HOSTNAME= /etc/hostname HOSTNAME
本地主机名数据库和 IP 地址的映射 优先级高于 DNS
1 2 3 4 5 6 7 /etc/hosts 127.0.0.1 本机主机名 10.0.1.1 k8s-master1.ljk.cn master1
生产中,因为 ip 的不确定性,所以局域网中主机间通信不依赖 ip,而是依赖主机名,具体实现有两种方法:
局域网中的主机不多:所有主机共同维护一份 hosts,记录每个 ip 和主机名之间的解析关系
局域网中的主机很多:搭建 DNS 服务
DNS 域名解析 /etc/resolv.conf
1 2 3 4 nameserver DNS_SERVER_IP1 nameserver DNS_SERVER_IP2 nameserver DNS_SERVER_IP3 search DOMAIN
nmcli 会将配置的 DNS 写入到这个文件,但是不管 nmcli 给 connection 有没有配置 DNS 或是配置的什么,最终解析域名还是以这个文件中的 DNS 为准,所以建议直接修改这个文件。
search DOMAIN
是当域名无法 DNS 解析时,会将 DOMAIN 加到域名后面再尝试进行解析,例如:
1 2 3 4 5 6 7 8 [root@centos7 ~] search lujinkai.cn nameserver 180.76.76.76 [root@centos7 ~] PING blog.lujinkai.cn (47.105.171.233) 56(84) bytes of data. 64 bytes from 47.105.171.233 (47.105.171.233): icmp_seq=1 ttl=128 time=24.0 ms 64 bytes from 47.105.171.233 (47.105.171.233): icmp_seq=2 ttl=128 time=23.5 ms
修改/etc/host 和 DNS 的优先级 /etc/nsswitch.conf
1 hosts: files dns myhostname
路由相关的配置文件 新建文件 /etc/sysconfig/network-scripts/route-IFACE
1 2 3 4 5 6 7 8 两种风格: (1) TARGET via GW 如:10.0.0.0/8 via 172.16.0.1 (2) 每三行定义一条路由 ADDRESS NETMASK GATEWAY
不推荐直接修改配置文件,推荐使用 nmcli:
1 2 3 4 5 6 [root@centos8 ~]$nmcli connection modify eth0 ipv4.addresses 0.0.0.0 ipv4.gateway 10.0.0.8 [root@centos8 network-scripts]$route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.0.8 0.0.0.0 UG 100 0 0 eth0
网卡相关配置文件 修改网卡设备名 网卡组成格式:
1 2 3 4 5 6 7 en: Ethernet 有线局域网 wl: wlan 无线局域网 ww: wwan无线广域网 o<index>: 集成设备的设备索引号 s<slot>: 扩展槽的索引号 x<MAC>: 基于MAC地址的命名 p<bus>s<slot>: enp2s1
CentOS6 之前网卡的默认命名方式 eth0、eth1、eth2。。。从 CentOS/RHEL7 起,可预见的命名规则变成了默认。这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。
修改 CentOS7、8 的网卡设备名为 CentOS6 形式:
编辑/etc/default/grub 配置文件,给 GRUB_CMDLINE_LINUX 选项添加 net.ifnames=0 字段,如果是戴尔的机器,还需要再加 biosdevname=0
为 grub2 生成其配置文件:grub2-mkconfig -o /etc/grub2.cfg
如果是 ubuntu:sudo grub-mkconfig -o /boot/grub/grub.cfg
静态指定 IP 在/etc/sysconfig/network-scripts
下新建文件
1 2 3 4 5 6 7 8 9 NAME=eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=10.0.0.6 PREFIX=24 GATEWAY=10.0.0.2 DNS1=223.6.6.6 DNS2=180.76.76.76 ONBOOT=yes
动态分配 IP 也是在/etc/sysconfig/network-scripts
下新建文件
1 2 3 4 DEVICE=eth0 NAME=eth0 BOOTPROTO=dhcp ONBOOT=yes
网卡别名 还是在/etc/sysconfig/network-scripts
下新建文件,网卡别名必须使用静态地址
1 2 3 DEVICE=eth0:1 IPADDR=11.0.0.6 PREFIX=8
修改完后 service network restart
重启服务即可
以上是 CentOS6 配置网卡的方式,CentOS7、8 不推荐手动修改文件,推荐使用 nmcli 命令自动生成配置文件。
多网卡 将多块网卡绑定同一 IP 地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一 IP 地址是不可以的。通过 Bonding 或 Teaming,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的 MAC 地址。
Bonding 共 7 种模式,0-6mode:
0:轮询、1:活动-备份、3:广播
说明:active-backup、balance-tlb 和 balance-alb 模式不需要交换机的任何特殊配置。其他绑定模式需要配置交换机以便整合链接。如:Cisco 交换机需要在模式 0、2 和 3 中使用 EtherChannel,但在模式 4 中需要 LACP 和 EtherChannel。
实现 bonding 模式 1:
创建 bonding 设备的配置文件/etc/sysconfig/network-scripts/ifcfg-bond0:
1 2 3 4 5 6 7 NAME=bond0 TYPE=bond DEVICE=bond0 BOOTPROTO=none IPADDR=10.0.0.100 PREFIX=8 BONDING_OPTS="mode=1 miimon=100"
修改两个 eth0 和 eth1 两个网卡的配置
1 2 3 4 5 6 NAME=eth0 DEVICE=eth0 BOOTPROTO=none MASTER=bond0 SLAVE=yes ONBOOT=yes
1 2 3 4 5 6 NAME=eth1 DEVICE=eth1 BOOTPROTO=none MASTER=bond0 SLAVE=yes ONBOOT=yes
查看 bond0 状态:/proc/net/bonding/bond0
删除 bond0:
1 2 ifconfig bond0 down rmmod bonding
Teaming 从 CentOS7 开始,不推荐使用 bonding,推荐使用网络组,网络组提供更好的性能和扩展性。网络组由内核驱动和 teamd 守护进程实现。
网络组也有多种模式:broadcast、roundrobin、activebackup、loadbalance、lacp (implements the 802.3ad Link Aggregation Control Protocol)
网络组特点:
启动网络组接口不会自动启动网络组中的 port 接口
启动网络组接口中的 port 接口总会自动启动网络组接口
禁用网络组接口会自动禁用网络组中的 port 接口
没有 port 接口的网络组接口可以启动静态 IP 连接
启用 DHCP 连接时,没有 port 接口的网络组会等待 port 接口的加入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 nmcli con add type team con-name CNAME ifname INAME [config JSON] CNAME 连接名 INAME 接口名,也随便写。其他连接ifname是指定关联的物理网卡接口,而网络组是软件,所以这里的ifname不是指定,是定义 JSON 指定runner方式,格式:'{"runner": {"name": "METHOD"}}' METHOD 可以是broadcast, roundrobin, activebackup, loadbalance, lacp nmcli con add type team-slave con-name CNAME ifname INAME master TEAM CNAME 连接名,连接名若不指定,默认为team-slave-IFACE INAME 网络接口名 TEAM 网络组接口名 nmcli dev dis INAME nmcli con up CNAME INAME 设备名 CNAME 网络组接口名或port接口
范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 [root@centos8 ~] Connection 'con-team0' (6a08e7d5-473e-4bed-bc6d-2065efc296c4) successfully added. [root@centos8 ~] DEVICE TYPE STATE CONNECTION eth0 ethernet connected eth0 eth1 ethernet connected eth1 eth2 ethernet connected eth2 eth3 ethernet connected eth3 if-team0 team connected con-team0 lo loopback unmanaged -- [root@centos8 ~] Connection 'team0-eth1' (66aad47b-4d03-49ef-bcc7-d628f77f3256) successfully added. [root@centos8 ~] Connection 'team0-eth2' (175ea1cb-05a8-4f97-b756-eae6ec844a43) successfully added. [root@centos8 ~] Connection 'team0-eth3' (d021a567-5c2c-4528-acdb-e01f25d80988) successfully added. [root@centos8 ~] NAME UUID TYPE DEVICE eth0 d9c122c4-1861-45f3-826f-a1fff455543c ethernet eth0 eth1 8c913f0c-de22-4fa9-a153-9de53621de5a ethernet eth1 eth2 0ee56953-0b62-4181-9987-fb09da4dacd9 ethernet eth2 eth3 8028cae7-39b5-4656-8ad8-e82b1adf0025 ethernet eth3 con-team0 6a08e7d5-473e-4bed-bc6d-2065efc296c4 team if-team0 team0-eth1 66aad47b-4d03-49ef-bcc7-d628f77f3256 ethernet -- team0-eth2 175ea1cb-05a8-4f97-b756-eae6ec844a43 ethernet -- team0-eth3 d021a567-5c2c-4528-acdb-e01f25d80988 ethernet -- [root@centos8 ~] setup: runner: loadbalance [root@centos8 ~] Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14) [root@centos8 ~] Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15) [root@centos8 ~] Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/16) [root@centos8 ~] setup: runner: loadbalance ports: eth1 link watches: link summary: up instance[link_watch_0]: name: ethtool link : up down count: 0 eth2 link watches: link summary: up instance[link_watch_0]: name: ethtool link : up down count: 0 eth3 link watches: link summary: up instance[link_watch_0]: name: ethtool link : up down count: 0
网桥 网桥和交换机都有若干网络接口,交换机网口更多,但两者实现的功能是相同的,都是把这些若干网络接口“连接”起来,在数据链路层对报文进行互相转发,使得连接网口的设备之间能够通信。
“连接”网口并实现报文互相转发的技术就叫桥接,物理的网桥和交换机(以下简称网桥)的网口数量是固定的,而软件模拟的网桥的网口数量是不固定的,因为软件模拟的网桥的网口既可以指定物理网口,也可以指定虚拟网口,物理网口对外连接交换机,虚拟网口对内连接虚拟机。
例如:一台服务器有 4 个网口(可能是四张网卡,每张一个网口,也可能是一张网卡有四个网口)、系统中安装了 5 个虚拟机。使用软件网桥把 2 个物理网口和 3 个虚拟网口桥接在一起,每个虚拟网口连接一个虚拟机。这样,从这两个网口中过来的报文只能转发到这个三个虚拟机中,不会影响到其他虚拟机。
实验一:环境 vmware,三台虚拟机 A、B、C,A 是仅主机模式,C 是 nat 模式,所以 AC 之间不能通信,B 配置两张网卡,一张仅主机,一张 nat,所以 B 既能和 A 通信,也能和 C 通信,所以让 B 充当网桥,把 A 和 C 桥接在一起,从而实现 AC 通信。实现方式可以安装 bridge-utils,也可以使用 nmcli 命令。