linux网络配置
linux网络配置工具有多种,比如ifconfig、ip、nmcli等。他们都可以进行网卡方面的配置,下面会分别介绍
0 一致性网络设备命名规则
以太网设备以en开头
- 规则1 板载设备eno<板载索引号>,比如eno1
- 规则2 PCIe热插拔口,ens<PCIe热插拔索引号>[f<function号>][d<device号>],比如ens33
- 规则3 其他PCIe设备,en[P<PCI域位置>]p<bus号>s<slot号>[f<function号>][d<device号>],比如enp2s0
- 规则4 有mac地址的设备,enx<MAC地址>,比如enx78e7d1ea46da
- 规则5 使用传统方案,比如eth0
wlan
- 以wl开头
00 网卡和网桥
参考https://www.cnblogs.com/zhenjingcool/p/17680830.html
1 网络配置文件
网络配置文件位置/etc/sysconfig/network-scripts
注意:这个路径下的网络配置文件为网卡设备的配置,没有网桥设备的配置
[root@localhost network-scripts]# ll total 252 -rw-r--r--. 1 root root 310 Jun 24 2022 ifcfg-ens33 -rw-r--r--. 1 root root 254 May 22 2020 ifcfg-lo
这里面有两个网卡配置文件,分别是ifcfg-ens33、ifcfg-lo
2 ifconfig
ifconfig历史比较悠久,最早出现在unix系统上。
使用ifconfig命令,我们可以查看网卡(网络接口卡)信息,比如接口(interface)名称、mac地址、IP地址、子网、广播地址等。
2.1 查询所有网络接口ifconfig
ifconfig -a
- ens33:网卡名称
- UP:接口已启用
- BROADCAST:主机支持广播
- RUNNING:表示接口在工作中
- MULTICAST:主机支持多播
- MTU 1500:最大传输单元1500字节
- inet:ipv4地址,netmask:子网掩码,broadcast:广播地址(广播地址什么意思?比如某个子网为192.168.3.0/24,则广播地址为192.168.3.255。当在这个子网中某节点需要将报文发送到所有节点时,目的地址可以使用广播地址)
- ether:表示连接类型为以太网
- 00:0c:29:cc:cf:d7:mac地址
- txqueuelen 1000:网卡传送队列长度
- RX packets :接受到的总包数
- RX bytes :接受到的总字节数
- RX errors :接收时,产生错误的数据包数
- RX dropped :接收时,丢弃的数据包数
- RX overruns :接收时,由于速度过快而丢失的数据包数
- RX frame (框架) :接收时,发生frame错误而丢失的数据包数
[root@localhost ~]# ifconfig -a br-ed5a3cc94630: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.49.1 netmask 255.255.255.0 broadcast 192.168.49.255 ether 02:42:0e:86:b4:69 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.148 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::9375:e7ad:e439:9325 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:cc:cf:d7 txqueuelen 1000 (Ethernet) RX packets 119 bytes 17196 (16.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 130 bytes 20125 (19.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:1f:62:ea txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0-nic: flags=4098<BROADCAST,MULTICAST> mtu 1500 ether 52:54:00:1f:62:ea txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost ~]#
上面是vmware虚拟机里面的网卡信息,对每个网卡我们做一下简要说明
- ens33:以太网卡
- lo:回环测试网卡
- virbr0:虚拟网桥,用于桥接宿主机子网和虚拟机子网
- docker0:是一个虚拟网桥,作用是实现容器间通信、容器与宿主机间通信
- br-ed5a3cc94630:因为该机器上安装了k8s,这个网桥是k8s创建的网桥,用于桥接各个容器的子网
我们使用命令brctl查看网桥(如果安装了docker也可使用docker network ls查看docker创建的网络)
[root@localhost ~]# brctl show bridge name bridge id STP enabled interfaces br-ed5a3cc94630 8000.02424dfe5efc no docker0 8000.0242d6f6e010 no virbr0 8000.5254001f62ea yes virbr0-nic [root@localhost ~]#
2.2 启停网卡ifconfig ens33 up/down(等效于nmcli connection up/down ens33)
我们来做个实验
[root@localhost ~]# ifconfig ens33 down
我们停止这个网卡后,将无法ssh登陆这个虚拟机了。然后我们重新启动这个网卡
[root@localhost ~]# ifconfig ens33 up
然后再ssh登陆这个虚拟机,恢复登陆。
2.3 显示某个网卡信息ifconfig ens33
[root@localhost network-scripts]# ifconfig ens33 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.148 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::9375:e7ad:e439:9325 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:cc:cf:d7 txqueuelen 1000 (Ethernet) RX packets 4169 bytes 453845 (443.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1379 bytes 175126 (171.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@localhost network-scripts]#
2.4 设置mtu
[root@localhost ~]# ifconfig ens33 mtu 3000
2.5 开启或关闭arp协议
关闭arp协议
[root@localhost ~]# ifconfig ens33 -arp [root@localhost ~]#
此时,地址解析协议失效,我们执行ping www.baidu.com将不会对地址进行解析,ping不通
开启arp协议
[root@localhost ~]# ifconfig ens33 arp [root@localhost ~]#
2.6 设置网卡的ip地址
[root@localhost ~]# ifconfig ens33 192.168.3.149 netmask 255.255.255.0 broadcast 192.168.3.255
设置了网卡的ip地址后,ssh登陆连接不上了,具体原因还未深入定位,可参考:https://blog.csdn.net/weixin_45190065/article/details/129014473
2.7 新增网卡ip地址
[root@localhost ~]# ifconfig ens33 add 192.168.3.149
此时,我们会看到ens33多了一个别名ens33:0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.148 netmask 255.255.255.0 broadcast 192.168.3.255 inet6 fe80::9375:e7ad:e439:9325 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:cc:cf:d7 txqueuelen 1000 (Ethernet) RX packets 335 bytes 35906 (35.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 272 bytes 34400 (33.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.149 netmask 255.255.255.0 broadcast 192.168.3.255 ether 00:0c:29:cc:cf:d7 txqueuelen 1000 (Ethernet)
2.8 修改mac地址
ifconfig eth0 hw ether 10:BA:CB:54:86:B3
3 ip
我们使用命令man ip或者ip来查看帮助文档,进行全面的了解。下面内容只是挑选部分做说明示例
3.1 ip address
查看ip地址
[root@localhost ~]# ip address show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:cc:cf:d7 brd ff:ff:ff:ff:ff:ff inet 192.168.3.148/24 brd 192.168.3.255 scope global noprefixroute dynamic ens33 valid_lft 84794sec preferred_lft 84794sec inet6 fe80::9375:e7ad:e439:9325/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@localhost ~]#
3.2 ip link
查看网络设备
[root@localhost ~]# ip link show ens33 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:cc:cf:d7 brd ff:ff:ff:ff:ff:ff [root@localhost ~]#
3.3 ip link set xxx设置网络
[root@localhost ~]# ip link set docker0 up [root@localhost ~]# ip link set docker0 down [root@localhost ~]# ip link set eth0 mtu 1500 设置MTU值,即设置最大传输单元 [root@localhost ~]# ip link set eth0 name vbird 设置网卡名,需要在网卡down的时候进行设置
3.4 ip route show
查看系统路由表
[root@localhost ~]# ip route default via 192.168.3.1 dev ens33 proto dhcp metric 100 #默认路由规则,表示所有未匹配到其他路由规则的数据包都通过ens33接口发送到网关地址192.168.3.1(这个是我家的无线路由器)。其中proto dhcp表示该路由规则是从dhcp服务器获取的 192.168.3.0/24 dev ens33 proto kernel scope link src 192.168.3.148 metric 100 #见下面route -n,其中src 192.168.3.148表示进行数据包发送时,源地址是192.168.3.148 192.168.49.0/24 dev br-ed5a3cc94630 proto kernel scope link src 192.168.49.1 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 [root@localhost ~]#
其和route -n表示的意思相同
[root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.3.1 0.0.0.0 UG 100 0 0 ens33 #表示默认路由,当目的地址无法匹配其他路由规则时,将数据包转发到192.168.3.1这个网关(这个网关就是家里的那个无线路由器),通过ens33接口发送 192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 #表示当目的地址为192.168.3.0/24网段时,gateway为0.0.0.0表示不经过网关(直连的网段,不需要走3层协议,走2层协议即可),通过ens33接口发送出去 192.168.49.0 0.0.0.0 255.255.255.0 U 0 0 0 br-ed5a3cc94630 #表示当目的地址为192.168.49.0/24网段时,不走网关,直接走二层网络协议(这里是网桥),通过网桥br-ed5a3cc94630发送出去(这里是k8s创建的虚拟网桥) 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 #表示当目的地址为192.168.122.0/24网段时,不走网关,通过虚拟网桥virbr0发送出去(这里是安装vmware后生成的虚拟网桥用于连接宿主机和虚拟机) [root@localhost ~]#
3.5 ip route add添加路由规则
ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
3.6 ip route del删除路由
ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关 ip route del default # 删除默认路由 ip route delete 192.168.1.0/24 dev eth0 # 删除路由
4 nmcli
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南