本文最后更新于:2023年12月5日 晚上
基本配置 将 Linux 主机接入到网络,需要配置网络相关设置。一般包括如下内容:
- 主机名
- IP/netmask
- 路由:默认网关
- DNS服务器
- 主DNS服务器
- 次DNS服务器
- 第三个DNS服务器
命令修改的配置一般都是临时的,重启机器就失效了,如果要让配置更改永久生效,需要将配置更改写入到相关的配置文件中
相关配置文件 配置当前主机的主机名 永久修改:
/etc/sysconfig/network
HOSTNAME =
/etc/hostname
HOSTNAME
本地主机名数据库和 IP 地址的映射 优先级高于 DNS
/etc/hosts
127.0 .0.1 本机主机名
10.0 .1.1 k8s-master1.ljk.cn master1
生产中,因为 ip 的不确定性,所以局域网中主机间通信不依赖 ip,而是依赖主机名,具体实现有两种方法:
局域网中的主机不多:所有主机共同维护一份 hosts,记录每个 ip 和主机名之间的解析关系
局域网中的主机很多:搭建 DNS 服务
DNS 域名解析 /etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search DOMAIN
nmcli 会将配置的 DNS 写入到这个文件,但是不管 nmcli 给 connection 有没有配置 DNS 或是配置的什么,最终解析域名还是以这个文件中的 DNS 为准,所以建议直接修改这个文件。
search DOMAIN
是当域名无法 DNS 解析时,会将 DOMAIN 加到域名后面再尝试进行解析,例如:
[ 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
hosts: files dns myhostname
路由相关的配置文件 新建文件 /etc/sysconfig/network-scripts/route-IFACE
两种风格:
( 1 ) TARGET via GW
如:10.0.0.0/8 via 172.16 .0.1
( 2 ) 每三行定义一条路由
ADDRESS
NETMASK
GATEWAY
不推荐直接修改配置文件,推荐使用 nmcli:
[ 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
网卡相关配置文件 修改网卡设备名 网卡组成格式:
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
下新建文件
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
下新建文件
DEVICE = eth0
NAME = eth0
BOOTPROTO = dhcp
ONBOOT = yes
网卡别名 还是在/etc/sysconfig/network-scripts
下新建文件,网卡别名必须使用静态地址
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:
NAME = bond0
TYPE = bond
DEVICE = bond0
BOOTPROTO = none
IPADDR = 10.0 .0.100
PREFIX = 8
BONDING_OPTS = "mode=1 miimon=100"
修改两个 eth0 和 eth1 两个网卡的配置
NAME = eth0
DEVICE = eth0
BOOTPROTO = none
MASTER = bond0
SLAVE = yes
ONBOOT = yes
NAME = eth1
DEVICE = eth1
BOOTPROTO = none
MASTER = bond0
SLAVE = yes
ONBOOT = yes
查看 bond0 状态:/proc/net/bonding/bond0
删除 bond0:
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 接口的加入
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接口
范例:
[ 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 命令。