配置 IP
使用 nmcli
nmcli 介绍
nmcli 是 NetworkManager 的一个命令行工具,它提供了使用命令行配置由 NetworkManager 管理网络连接的方法。nmcli 命令的基本格式为:
nmcli [OPTIONS] OBJECT { COMMAND | help }
其中,OBJECT 选项可以是 general、networking、radio、connection 或 device 等。在日常使用中,最常使用的是 -t, --terse(用于脚本)、-p, --pretty 选项(用于用户)及 -h, --help 选项,用户可以使用“ nmcli help”获取更多参数及使用信息。
# nmcli help
常用命令使用举例如下:
显示 NetworkManager 状态:
nmcli general status
显示所有连接:
nmcli connection show
只显示当前活动连接,如下所示添加 -a, --active:
nmcli connection show --active
显示由 NetworkManager 识别到设备及其状态:
nmcli device status
使用 nmcli 工具启动和停止网络接口,例如:
nmcli connection up id enp3s0 nmcli device disconnect enp3s0
设置网络连接
列出目前可用的网络连接:
# nmcli con show
NAME UUID TYPE DEVICE
enp4s0 5afce939-400e-42fd-91ee-55ff5b65deab ethernet enp4s0
enp3s0 c88d7b69-f529-35ca-81ab-aa729ac542fd ethernet enp3s0
virbr0 ba552da6-f014-49e3-91fa-ec9c388864fa bridge virbr0
说明:
输出结果中的 NAME 字段代表连接 ID(名称)。
添加一个网络连接会生成相应的配置文件,并与相应的设备关联。检查可用的设备,方法如下:
# nmcli dev status
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet connected enp3s0
enp4s0 ethernet connected enp4s0
virbr0 bridge connected virbr0
lo loopback unmanaged --
virbr0-nic tun unmanaged --
配置动态 IP 连接
配置 IP
要使用 DHCP 分配网络时,可以使用动态 IP 配置添加网络配置文件,命令格式如下:
nmcli connection add type ethernet con-name connection-name ifname interface-name
例如创建名为 net-test 的动态连接配置文件,使用以下命令:
# nmcli connection add type ethernet con-name net-test ifname enp3s0
Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added.
NetworkManager 会将参数 connection.autoconnect 设定为 yes,并将设置保存到 “/etc/sysconfig/network-scripts/ifcfg-net-test”文件中,在该文件中会将 ONBOOT 设置为 yes。
激活连接并检查状态
使用以下命令激活网络连接,使用以下命令:
# nmcli con up net-test
Connection successfully activated (D-Bus active path:/org/freedesktop/NetworkManager/ActiveConnection/5)
检查这些设备及连接的状态,使用以下命令:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp4s0 ethernet connected enp4s0
enp3s0 ethernet connected net-test
virbr0 bridge connected virbr0
lo loopback unmanaged --
virbr0-nic tun unmanaged --
配置静态 IP 连接
配置 IP
添加静态 IPv4 配置的网络连接,可使用以下命令:
nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address
说明:
如果要添加 IPv6 地址和网关信息,使用 ip6 和 gw6 选项。
例如创建名为 net-static 的静态连接配置文件,使用以下命令:
# nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254
还可为该设备同时指定 IPv6 地址和网关,示例如下:
# nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::*
Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added.
NetworkManager 会将其内部参数 ipv4.method 设定为 manual,将 connection.autoconnect 设定为 yes,并将设置写入 /etc/sysconfig/network-scripts/ifcfg-my-office 文件,其中会将对应 BOOTPROTO 设定为 none,将 ONBOOT 设定为 yes。
设定两个 IPv4 DNS 服务器地址,使用以下命令:
# nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*"
设置两个 IPv6 DNS 服务器地址,使用以下命令:
# nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****"
激活连接并检查状态
激活新的网络连接,使用以下命令:
# nmcli con up net-static ifname enp3s0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
检查这些设备及连接的状态,使用以下命令:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp4s0 ethernet connected enp4s0
enp3s0 ethernet connected net-static
virbr0 bridge connected virbr0
lo loopback unmanaged --
virbr0-nic tun unmanaged --
查看配置的连接详情,使用以下命令(使用 -p, --pretty 选项在输出结果中添加标题和分段):
# nmcli -p con show net-static
===============================================================================
Connection profile details (net-static )
===============================================================================
connection.id: net-static
connection.uuid: b9f18801-6084-4aee-af28-c8f0598ff5e1
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: enp3s0
connection.autoconnect: yes
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0 (default)
connection.auth-retries: -1
connection.timestamp: 1578988781
connection.read-only: no
connection.permissions: --
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries: --
connection.gateway-ping-timeout: 0
connection.metered: unknown
connection.lldp: default
connection.mdns: -1 (default)
connection.llmnr: -1 (default)
添加 Wi-Fi 连接
使用以下命令查看可用 Wi-Fi 访问点:
# nmcli dev wifi list
使用以下命令生成使用的静态 IP 配置,但允许自动 DNS 地址分配的 Wi-Fi 连接:
# nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1
请使用以下命令设定 WPA2 密码,例如 “answer”:
# nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk
# nmcli con modify Wifi wifi-sec.psk answer
使用以下命令更改 Wi-Fi 状态:
# nmcli radio wifi [ on | off ]
更改属性
请使用以下命令检查具体属性,比如 mtu:
# nmcli connection show id 'Wifi ' | grep mtu
802-11-wireless.mtu: auto
使用如下命令更改设置的属性:
# nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350
使用如下命令确认更改:
# nmcli connection show id 'Wifi ' | grep mtu
802-11-wireless.mtu: 1350
配置静态路由
使用 nmcli 命令为网络连接配置静态路由,使用命令如下:
# nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1"
使用编辑器配置静态路由,使用如下命令:
# nmcli con edit type ethernet con-name enp3s0 ===| nmcli interactive connection editor |=== Adding a new '802-3-ethernet' connection Type 'help' or '?' for available commands. Type 'describe [<setting>.<prop>]' for detailed property description. You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1 nmcli> nmcli> save persistent Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection. Do you still want to save? [yes] yes Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved. nmcli> quit
使用命令行
通过 ifcfg 文件配置网络
配置静态网络
以 enp4s0 网络接口进行静态网络设置为例,通过修改 ifcfg 文件实现,在 /etc/sysconfig/network-scripts/ 目录中生成名为 ifcfg-enp4s0 的文件中,修改参数配置,示例如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.0.10
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp4s0static
UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293
DEVICE=enp4s0
ONBOOT=yes
配置动态网络
要通过 ifcfg 文件为名为 em1 的接口配置动态网络,请按照如下操作在 /etc/sysconfig/network-scripts/ 目录中生成名为 ifcfg-em1 的文件,示例如下:
DEVICE=em1
BOOTPROTO=dhcp
ONBOOT=yes
要配置一个向 DHCP 服务器发送不同的主机名的接口,请在 ifcfg 文件中新增一行内容,如下所示:
DHCP_HOSTNAME=hostname
要配置忽略由 DHCP 服务器发送的路由,防止网络服务使用从 DHCP 服务器接收的 DNS 服务器更新 /etc/resolv.conf。请在 ifcfg 文件中新增一行内容,如下所示:
PEERDNS=no
要配置一个接口使用具体DNS服务器,请将参数 PEERDNS=no,并在 ifcfg 文件中添加以下行:
DNS1=ip-address
DNS2=ip-address
其中 ip-address 是 DNS 服务器的地址。这样就会让网络服务使用指定的 DNS 服务器更新 /etc/resolv.conf。
使用 ip 命令配置网络
使用 ip 命令为接口配置地址,命令格式如下,其中 interface-name 为网卡名称。
ip addr [ add | del ] address dev interface-name
配置静态地址
在 root 权限下,配置设置 IP 地址,使用示例如下:
# ip address add 192.168.0.10/24 dev enp3s0
查看配置结果,使用如下命令:
# ip addr show dev enp3s0
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0
valid_lft 9547sec preferred_lft 9547sec
inet 192.168.0.10/24 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
配置多个地址
ip 命令支持为同一接口分配多个地址,可重复多次使用 ip 命令实现分配多个地址。使用示例如下:
# ip address add 192.168.2.223/24 dev enp4s0
# ip address add 192.168.4.223/24 dev enp4s0
# ip addr
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0
valid_lft 8389sec preferred_lft 8389sec
inet 192.168.2.223/24 scope global enp4s0
valid_lft forever preferred_lft forever
inet 192.168.4.223/24 scope global enp4s0
valid_lft forever preferred_lft forever
inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
说明: 在系统重启后,通过 ip 命令进行的配置会丢失。
静态路由及默认网关
配置静态路由
如果需要静态路由,可使用 ip route add 命令在路由表中添加,使用 ip route del 命令删除。最常使用的 ip route 命令格式如下:
ip route [ add | del | change | append | replace ] destination-address
使用 ip route 命令显示当前的 IP 路由表。示例如下:
# ip route
default via 192.168.0.1 dev enp3s0 proto dhcp metric 100
default via 192.168.0.1 dev enp4s0 proto dhcp metric 101
192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100
192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
在主机地址中添加一个静态路由,在 root 权限下,使用以下命令格式:
ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name]
其中 192.168.2.1 是用点分隔的十进制符号中的 IP 地址,10.0.0.1是下一个跃点,interface-name 是进入下一个跃点的退出接口。
要在网络中添加一个静态路由,即代表 IP 地址范围的 IP 地址,请作为 root 运行以下命令格式:
ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name]
其中 192.168.2.1 是目标网络的 IP 地址,10.0.0.1 是网络前缀,interface-name 为网卡名称。
配置默认网关
在确定默认网关时,首先解析 /etc/sysconfig/network 文件,然后解析 ifcfg 文件,将最后读取的 GATEWAY 的取值作为路由表中的默认路由。
在动态网络环境中,使用 NetworkManager 管理主机时,建议设置为由 DHCP 来分配。