网络配置

本文最后更新于:2023年12月5日 晚上

基本配置

将 Linux 主机接入到网络,需要配置网络相关设置。一般包括如下内容:

- 主机名
- IP/netmask
- 路由:默认网关
- DNS服务器
  - 主DNS服务器
  - 次DNS服务器
  - 第三个DNS服务器

命令修改的配置一般都是临时的,重启机器就失效了,如果要让配置更改永久生效,需要将配置更改写入到相关的配置文件中

相关配置文件

配置当前主机的主机名

永久修改:

#centos6 之前版本
/etc/sysconfig/network
HOSTNAME=
#centos7 以后版 使用 hostnametcl set-hostname xxx 命令 或者修改文件
/etc/hostname
HOSTNAME

本地主机名数据库和 IP 地址的映射

优先级高于 DNS

/etc/hosts

# 修改hostname后一定要修改hosts文件,保证本机主机名会解析到127.0.0.1
127.0.0.1 本机主机名

#ip 主机名 别名
10.0.1.1 k8s-master1.ljk.cn master1

生产中,因为 ip 的不确定性,所以局域网中主机间通信不依赖 ip,而是依赖主机名,具体实现有两种方法:

  1. 局域网中的主机不多:所有主机共同维护一份 hosts,记录每个 ip 和主机名之间的解析关系
  2. 局域网中的主机很多:搭建 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 ~]#cat /etc/resolv.conf
# Generated by NetworkManager
search lujinkai.cn
nameserver 180.76.76.76
[root@centos7 ~]#ping blog
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#=TARGET
NETMASK#=mask
GATEWAY#=GW

不推荐直接修改配置文件,推荐使用 nmcli:

# 添加一条路由: 0.0.0.0 via 10.0.0.8
[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 形式:

  1. 编辑/etc/default/grub 配置文件,给 GRUB_CMDLINE_LINUX 选项添加 net.ifnames=0 字段,如果是戴尔的机器,还需要再加 biosdevname=0

  2. 为 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 接口的加入
# 创建网络组接口,虽然使用connection创建,但好像使用device来创建更符合逻辑
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

# 创建port接口
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 ~]# nmcli con add type team con-name con-team0 ifname if-team0 config '{"runner":{"name": "loadbalance"}}' ipv4.addresses 10.0.0.88/24 ipv4.method manual
Connection 'con-team0' (6a08e7d5-473e-4bed-bc6d-2065efc296c4) successfully added.
[root@centos8 ~]# nmcli device
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  --

# 给eth0、eth1、eth2三个网卡接口添加连接,并加入到网络组
[root@centos8 ~]# nmcli con add con-name team0-eth1 type team-slave ifname eth1 master if-team0
Connection 'team0-eth1' (66aad47b-4d03-49ef-bcc7-d628f77f3256) successfully added.
[root@centos8 ~]# nmcli con add con-name team0-eth2 type team-slave ifname eth2 master if-team0
Connection 'team0-eth2' (175ea1cb-05a8-4f97-b756-eae6ec844a43) successfully added.
[root@centos8 ~]# nmcli con add con-name team0-eth3 type team-slave ifname eth3 master if-team0
Connection 'team0-eth3' (d021a567-5c2c-4528-acdb-e01f25d80988) successfully added.
# 看一下连接状态,新创建的连接还没有激活
[root@centos8 ~]# nmcli connection
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 ~]# teamdctl if-team0 state
setup:
  runner: loadbalance

# 一个网卡接口可以关联多个连接,但同时只能有一个活跃,切换加入了网络组的连接为活跃状态
[root@centos8 ~]# nmcli connection up team0-eth1
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/14)
[root@centos8 ~]# nmcli connection up team0-eth2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/15)
[root@centos8 ~]# nmcli connection up team0-eth3
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 ~]# teamdctl if-team0 state
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 命令。


网络配置
http://blog.lujinkai.cn/运维/基础/网络/网络配置/
作者
像方便面一样的男子
发布于
2021年1月1日
更新于
2023年12月5日
许可协议