配置网络接口
网络命令家族
ifcfg家族相关命令:ifconfig, ifcfg, netstat,ifup,ifdown,ifstat,iftop
iproute家族相关命令:ip, ss
nm家族相关命令:nmcli, nmtui
配置网络接口属性:
即可通过文本编辑器(如vim)来编辑网络接口配置文件, 也可通过命令行工具(在CentOS 6上为system-config-network(setup),在CentOS 7以上上还支持nmcli)。配置网络接口配置文件
/etc/sysconfig/network-scripts/ifcfg-IFACE:文件是网络接口配置文件,其中的IFACE表示具体的网络接口名称,如eth0或enp0s3。
文件的正式名称是"Network Interface Configuration",用于存储与特定网络接口相关的配置信息,如:IP地址、子网掩码、网关、DNS服务器、MTU值等(IP/NETMASK/GW/DNS)。通过编辑这个文件,可以配置网络接口的各种参数和选项。
注意:不同发行版会有稍微不同的命名和文件路径,但大体位置和名称类似。
配置文件参数:
DEVICE:此配置文件对应的设备的名称;
ONBOOT:在系统引导过程中,是否激活此接口;
BOOTPROTO:激活此接口时通过什么协议来配置此接口的属性;常用的有:dhcp, bootp, static, none;
PEERDNS:如果BOOTPROTO的值为 “dhcp” ,则是否允许dhcp server分配的DNS服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许( yes );
UUID:此设备的唯一标识;
IPV6INIT:是否初始化IPv6;
TYPE:接口类型,常见的有:Ethernet, Bridge;
DNS1:第一DNS服务器指向;
DNS2:备用DNS服务器指向;
DOMAIN:指定搜索域;
IPADDR:IP地址;
NETMASK:子网掩码;
GATEWAY:默认网关;在CentOS 7上还支持使用PREFIX以长度方式指明子网掩码;
USERCTL:是否允许普通用户控制此设备;
HWADDR:此设备的MAC地址;
NM_CONTROLLED:是否使用NetworkManager服务来控制此接口;
修改好配置文件后,需要重启网络服务该配置文件才能生效:
CentOS6: 方式一: /etc/init.d/network restart 方式二:servicenetwork restart CentOS7: 方式一: systemctl restart network.service 方式二:servicenetwork restart 方法三: nmcli connection reload&&nmcli connection down enp0s3&&nmcli connection up enp0s3#enp0s3 为网络接口名称相关的网络服务有:
network
NetworkManager
使用ifconfig配置网络属性
ifconfig 可查看、配置、启/禁用网卡,可配置网卡的IP地址、MAC地址、掩码、广播地址等。
注意:ifconfig命令进行配置重启失效,如果持久生效,有三个方法:
一 通过各个发行版专用工具修改;
二 直接修改网络接口的配置文件;
三 把配置命令加到rc.local文件中(重启network失效);
ifconfig语法:
ifconfig 网络端口 IP地址 hw MAC地址 netmask 掩码地址 broadcast 广播地址 [up/down]
常用用法:
ifconfig: 查看激活状态的网络接口信息:lo 回环地址,eth0 表示第一块网卡, HWaddr 表示网卡的物理地址(MAC地址); inet addr 表示网卡IP地址,Bcast表示广播地址,Mask表示掩码地址ifconfig-a : 查看所有(包括没有被激活的)网络接口的情况ifconfigeth0 : 查看特定网络接口的状态ifconfigeth0 down=ifupeth0 : 如果eth0是激活的,就把它终止掉。此命令等同于ifdowneth0;ifconfigeth0 up=ifdowneth0 : 激活eth0 ; 此命令等同于ifupeth0ifconfigeth0192.168.1.99 broadcast192.168.1.255 netmask255.255.255.0 : 配置 eth0的IP地址、广播地址和网络掩码;ifconfigeth0192.168.1.99 broadcast192.168.1.255 netmask255.255.255.0 up : 配置IP地址、网络掩码、广播地址的同时,激活网卡eth0ifconfigeth1 hw ether 00:11:00:00:11:22 : 设置网卡的物理地址(MAC地址)。其中 hw 后面所接的是网络接口类型, ether表示以太网, 同时也支持 ax25 、ARCnet、netrom等,详情请查看manifconfigifconfigeth0 mtu1480设置能通过的最大数据包大小为1480bytes虚拟网络接口指的是为一个网络接口指定多个IP地址,虚拟接口是这样的 eth0:0 、 eth0:1、eth0:2 … … eth1N。当然您为eth1 指定多个IP地址,也就是 eth1:0、eth1:1、eth1:2 … …以此类推;
ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0 broadcast 192.168.1.255 up
配置子网卡(别名或者虚拟网络接口):
给网络接口配置多个地址,给每个附加的地址一个网卡别名的实现:
用ifconfig命令直接配置:
[root@loaclhost ~]# ifconfig ens33:0 192.168.1.1/24[root@loaclhost ~]# ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet10.10.10.140 netmask255.255.255.0 broadcast10.10.10.255 inet6 fe80::e927:7013:71ec:ffd2 prefixlen64scopeid 0x20<link>ether 00:0c:29:c8:ff:4e txqueuelen1000(Ethernet)RX packets56804bytes12970225(12.3MiB)RX errors0dropped0overruns0frame0TX packets18808bytes2949415(2.8MiB)TX errors0dropped0overruns0carrier0collisions0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.1.1 netmask255.255.255.0 broadcast192.168.1.255 ether 00:0c:29:c8:ff:4e txqueuelen1000(Ethernet)......(以下省略)......注意:使用ifconfig命令直接配置网卡别名虽能立即生效,但无法永久生效;
要永久生效,需要为其添加接口属性配置文件,可复制其他/etc/sysconfig/network-scripts/下的其他接口属性配置文件,然后修改配置即可;
DEVICE=IFACE_LABEL#指定网卡别名;BOOTPROTO=static#网上别名不支持动态获取地址;支持static, none;IPADDR=#IP地址;NETMASK=#子网掩码;删除原有其他接口的HWADDR 删除原有其他接口的UUID[root@loaclhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33:0[root@loaclhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33:0TYPE=EthernetBOOTPROTO=staticDEFROUTE=yesDEVICE=ens33:0ONBOOT=yesIPADDR=192.168.1.1NETMASK=255.255.255.0#保存并退出;[root@loaclhost ~]# systemctl restart network #重启网络服务network;[root@www ~]# ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet10.10.10.140 netmask255.255.255.0 broadcast10.10.10.255 inet6 fe80::20c:29ff:fec8:ff4e prefixlen64scopeid 0x20<link>ether 00:0c:29:c8:ff:4e txqueuelen1000(Ethernet)RX packets56847bytes12975355(12.3MiB)RX errors0dropped0overruns0frame0TX packets18844bytes2952385(2.8MiB)TX errors0dropped0overruns0carrier0collisions0ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.1.1 netmask255.255.255.0 broadcast192.168.1.255 ether 00:0c:29:c8:ff:4e txqueuelen1000(Ethernet)#配置成功!......(以下省略)......ip命令
因为iproute家族与Linux内核密切相关,因此家族很多命令都是直接作用Linux内核,执行效率高。
ip命令:用于管理/查看路由、接口、策略路由和隧道等。
ip addr:用于管理IP地址;
ip link:用于网络接口的配置;
ip netns:用于管理网络名称空间;
ip route:用于管理路由表;
ip addr
ip addr命令:用于管理IP地址
ip addr list|show:查看IP地址;
ip addr add:添加IP地址;
ip addr delete:删除IP地址;
ip addr flush:清空IP地址;
ip addr list|show:查看IP地址
语法格式:
ip addr list [IFACE]
查看所有网络接口的IP地址:ip addr list 或者: ip addr show
查看ens33接口上的所有IP地址: # ip addr show ens33 或者 ip addr list ens33
其他属性:
[label NAME]:为网卡接口另外添加的IP地址指定别名;
[broadcast ADDRESS]:给定广播地址;可不指定,系统会根据IP和NETMASK自动计算得出;
[scope SCOPE_VALUE]:指定作用域;SCOPE_VALUE主要有global, link, host;
SCOPE_VALUE:
global:全局有效;即指定添加的接口配置既可实现本地通信,又可实现跨网络通信;
link:仅接口有效;即只能与使用此接口配置的IP地址通信;
host:仅主机有效;即只能与本地主机上的IP地址进行通信;
添加IP地址:192.168.20.1/24,接口为ens38:
ipaddradd192.168.20.1/24 dev ens38ipaddr show ens383: ens38:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet192.168.10.1 /24 brd192.168.10.255 scope global ens38 valid_lft forever preferred_lft forever inet192.168.20.1 /24 scope global ens38#显示已添加该地址,并作为ens38接口的secondary地址,如果没有指定别名,则该地址在ifconfig命令中不会显示; valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:ff58 /64 scopelinkvalid_lft forever preferred_lft forever添加IP地址:172.16.10.1/24,接口为ens38,接口别名为ens38:0:
[root@localhost ~]# ip addr add 172.168.10.1/24 dev ens38 label ens38:0[root@localhost ~]# ip addr show ens383: ens38:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet192.168.10.1 /24 brd192.168.10.255 scope global ens38 valid_lft forever preferred_lft forever inet192.168.20.1 /24 scope global ens38 valid_lft forever preferred_lft forever inet172.168.10.1 /24 scope global ens38:0#显示已添加,网卡别名为ens38:0,并作为ens38的secondary地址;valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:ff58 /64 scopelinkvalid_lft forever preferred_lft forever 用ifconfig显示:[root@localhost ~]# ifconfig ens38:0ens38:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet172.168.10.1 netmask255.255.255.0 broadcast0.0.0.0 ether 00:0c:29:c8:ff:58 txqueuelen1000(Ethernet)ip addr delete:删除IP地址
语法格式:
ip addr delete IFADDR dev IFACE
用法和ip addr add相同。
示例:
删除刚添加的IP地址:192.168.20.1/24[root@localhost ~]# ip addr show ens383: ens38:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet192.168.10.1 /24 brd192.168.10.255 scope global ens38 valid_lft forever preferred_lft forever inet192.168.20.1 /24 scope global ens38#要删除的IP地址;valid_lft forever preferred_lft forever inet172.168.10.1 /24 scope global ens38:0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:ff58 /64 scopelinkvalid_lft forever preferred_lft forever[root@localhost ~]#[root@localhost ~]# ip addr delete 192.168.20.1/24 dev ens38[root@localhost ~]# ip addr show ens383: ens38:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet192.168.10.1 /24 brd192.168.10.255 scope global ens38 valid_lft forever preferred_lft forever inet172.168.10.1 /24 scope global ens38:0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:ff58 /64 scopelinkvalid_lft forever preferred_lft forever 显示已经删除。ip addr flush:清空IP地址
语法格式:
ip addr flush dev IFACE
[root@localhost ~]# ip addr flush dev ens38[root@localhost ~]# ip addr show ens383: ens38:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ffip link
p link命令:用于网络接口的配置
ip link set:修改设备属性;
ip link list|show:查看二层设备属性;
ip link help:查看简要使用帮助;
ip link show|list:查看二层设备属性
查看主机上各网卡接口的二层属性:ip link #此时list或show可省略;
查看ens38接口的二层属性:ip link show ens38 #查看指定接口属性时,show或list不能省略;
ip link set:修改设备属性
主要属性:
dev NAME (default):指定要管理的设备;dev关键字可省略;
up | down:启用或禁用网络接口;
multicast { on | off }:启用或禁用组播功能;
name NEWNAME:重命名接口;
mtu MTU_NUMBER:设置MTU的大小;默认为1500;
netns { PID | NAME }:将接口移动至指定的网络名称空间中;要求Linux内核支持该功能(CentOS 7支持)
查看ens38接口的状态:# ip link show ens38禁用ens38接口:iplinksetens38 down;iplinkshow ens38 重新启用ens38接口:iplinksetens38 up;iplinkshow ens38 重命名ens38接口为ens30:iplinksetens38 name ens30 RTNETLINK answers: Device or resource busy#显示繁忙,接口必须在DOWN状态下才可重命名;将接口ens30的MTU改为1400,且关闭multicast功能:iplinksetens30 mtu1400multicast offip netns
创建名称空间mynet,并将ens30接口移至名称空间mynet中:ipnetnsaddmynet#先创建名称空间mynet;ipnetns list#查看已有的名称空间;mynet[root@localhost ~]# ip link set ens30 netns mynet #将ens30接口移至名称空间mynet中;[root@localhost ~]# ip netns exec mynet ip link show #在名称空间mynet之上运行命令"ip link show",而"ip netns exec mynet"类似于进入虚拟的名称空间中,在此之上运行COMMAND.1: lo:<LOOPBACK>mtu65536qdisc noop state DOWN mode DEFAULT qlen1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:003: ens30:<BROADCAST>mtu1400qdisc noop state DOWN mode DEFAULT qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff[root@localhost ~]# ip link show #重新查看接口属性;1: lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdisc noqueue state UNKNOWN mode DEFAULT qlen1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP mode DEFAULT qlen1000link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff#可以发现ens30已经消失了!因为它已经跑到名称空间mynet里去了。#基于netns这种机制可以搭建复杂的内部网络/虚拟网络。ip netns:用于管理网络名称空间
ip netns list:列出所有的netns;
ip netns add NAME:创建指定的netns;
ip netns del NAME:删除指定的netns;
ip netns exec COMMAND:在指定的netns上运行COMMAND;
创建名为Jack的netns:# ip netns add Jackipnetns list:列出所有的netns:ipnetns listipnetns del NAME:删除指定的netns:ip netns del mynetipnetnsexec[NAME]COMMAND:在指定的netns上运行COMMAND,示例: 将ens38接口移至Jack(netns)中,并为之配置IP地址:[root@localhost ~]# ip link #首先查看当前主机上的所有接口属性;1: lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdisc noqueue state UNKNOWN mode DEFAULT qlen1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: ens33:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdisc pfifo_fast state UP mode DEFAULT qlen1000link/ether 00:0c:29:c8:ff:4e brd ff:ff:ff:ff:ff:ff3: ens38:<BROADCAST>mtu1400qdisc noop state DOWN mode DEFAULT qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff[root@localhost ~]# ip netns list #列出所有的netns;Jack[root@localhost ~]# ip link set ens38 netns Jack #将ens38接口放进Jack(netns)中;[root@localhost ~]# ip netns exec Jack ip link #在Jack(netns)中运行"ip link";1: lo:<LOOPBACK>mtu65536qdisc noop state DOWN mode DEFAULT qlen1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:003: ens38:<BROADCAST>mtu1400qdisc noop state DOWN mode DEFAULT qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff[root@localhost ~]# ip netns exec Jack ip addr add 172.16.10.1/24 dev ens38 #在Jack(netns)中为挪进去的ens38接口配置IP/NETMASK;[root@localhost ~]# ip netns exec Jack ip addr show ens38 #在Jack(netns)中查看ens38接口IP地址;3: ens38:<BROADCAST>mtu1400qdisc noop state DOWN qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet172.16.10.1 /24 scope global ens38 valid_lft forever preferred_lft foreverip route
ip route:用于管理路由表
ip route show:显示路由表;
ip route add:添加路由;
ip route change:修改路由;
ip route replace:修改路由或添加路由;
ip route delete:删除路由;
ip route get:获得单条路由的详细信息;
ip route flush:清空路由表;
ip route show:
显示路由表,语法格式:ip route show [TYPE PREFIX]
显示主机上路由表信息:ip route show
显示172.16.0.0/16这条路由的信息:ip route show 172.16.0.0/16
ip route add:
添加路由,语法格式: ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
ip route add [TYPE] PREFIX [via GW] [dev IFACE] [src SOURCE_IP]
TYPE:路由类型,可选,表示特殊路由类型,默认为普通路由(可省略)
- default:默认路由(如 ip route add default via 192.168.1.1)
- blackhole:黑洞路由(丢弃数据包)
- unreachable:不可达路由(返回 ICMP 不可达)
- prohibit:禁止路由(返回 ICMP 禁止)
- nat:网络地址转换路由
PREFIX:必填,目标网络前缀,格式:IP地址/子网掩码长度,如:192.168.1.0/24:匹配 192.168.1.0~192.168.1.255
via GW:网关,可选:指定下一跳网关地址:GW 是网关的 IP 地址
dev IFACE:可选,出口网卡指定数据包发出的网络接口:直连网络(不走网关,目标就在同一二层网络内)可不指定网关,但需指定网卡,不在同一子网时,即为非直连网络,必须通过网关转发
src SOURCE_IP:可选项,当一个网卡有多个地址时可以指定以哪个IP地址作为出口地址(源地址);
例:
添加一条到172.16.0.0/24网段的路由, 下一跳是192.168.20.1,网卡接口是ens38, 源地址是192.168.30.1:
ipaddradd192.168.10.1/24 dev ens38#为ens38接口添加地址;ipaddradd192.168.20.1/24 dev ens38ipaddradd192.168.30.1/24 dev ens38ipaddr show ens383: ens38:<BROADCAST,UP,LOWER_UP>mtu1400qdisc pfifo_fast state UP qlen1000link/ether 00:0c:29:c8:ff:58 brd ff:ff:ff:ff:ff:ff inet192.168.10.1 /24 scope global ens38 valid_lft forever preferred_lft forever inet192.168.20.1 /24 scope global ens38 valid_lft forever preferred_lft forever inet192.168.30.1 /24 scope global ens38 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fec8:ff58 /64 scopelinkvalid_lft forever preferred_lft foreveriprouteadd172.16.0.0/16 via192.168.20.1 src192.168.30.1[root@localhost ~]# ip route listdefault via10.10.10.2 dev ens3310.10.10.0 /24 dev ens33 proto kernel scopelinksrc10.10.10.140169.254.0.0 /16 dev ens33 scopelinkmetric1002172.16.0.0 /16 via192.168.20.1 dev ens38 src192.168.30.1#src为192.168.30.1172.16.10.0 /24 via10.10.10.2 dev ens33192.168.10.0 /24 dev ens38 proto kernel scopelinksrc192.168.10.1192.168.20.0 /24 dev ens38 proto kernel scopelinksrc192.168.20.1192.168.30.0 /24 dev ens38 proto kernel scopelinksrc192.168.30.1ip route change:
修改路由,语法格式:
ip route change TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
例:
将172.16.0.0/16这条路由的源地址(src)改为192.168.10.1:
[root@localhost ~]# ip route show 172.16.0.0/16 #先查看172.16.0.0/16路由信息;172.16.0.0 /16 via192.168.20.1 dev ens38 src192.168.30.1#源地址为192.168.30.1;[root@localhost ~]# ip route change 172.16.0.0/16 src 192.168.10.1 #将172.160.0.0/16这条路由的源地址改为192.168.10.1;[root@localhost ~]# ip route show 172.16.0.0/16172.16.0.0 /16 dev ens38 scopelinksrc192.168.10.1#源地址已改动;ip route replace:
修改路由或添加路由,语法格式:
ip route replace TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
例:
将30.0.0.0/8这条路由(该路由事先不存在)的下一跳改为192.168.20.1,源地址改为192.168.10.1:
[root@localhost ~]# ip route change 30.0.0.0/8 via 192.168.20.1 src 192.168.10.1RTNETLINK answers: No suchfileor directory#如果使用change命令则无法修改,因为路由30.0.0.0/8事先不存在;[root@localhost ~]# ip route replace 30.0.0.0/8 via 192.168.20.1 src 192.168.10.1 #如果使用replace命令则在键入后无任何信息输出;[root@localhost ~]# ip route show 30.0.0.0/8 #查看30.0.0.0/8路由的信息,以检测该路由是否存在;30.0.0.0 /8 via192.168.20.1 dev ens38 src192.168.10.1#说明如果指定路由不存在则会自动按指定的属性创建该路由;#ip route replace命令类似于rpm -Uvh(若程序包原先存在则升级,不存在则自动安装);ip route delete:
删除路由 语法格式:
ip route del TYPE PREFIX
例:
删除30.0.0.0/8这条路由:
[root@localhost ~]# ip route del 30.0.0.0/8ip route get:
获得单条路由的详细信息 语法格式:
ip route get TYPE PREFIX
获取192.168.10.0/24路由信息:
例
iproute get192.168.10.0/16ip route flush:
清空路由表 语法格式:
ip route flush TYPE PREFIX
例:
#删除指定路由;#指定路由已被删除,功能类似del;
iproute flush192.168.10.0/24