服务器网络出问题,第一反应还是敲 ifconfig?这个习惯该改改了。Linux 内置的 ip 命令把 ifconfig、arp、route 这几个老工具的功能合到了一起,网卡、地址、路由、邻居表,一个工具全管。
它的语法结构很固定:ip [OPTIONS] OBJECT COMMAND [ARGUMENTS]。OPTIONS 决定运行模式,OBJECT 指定操作对象,比如 link、address、route;COMMAND 是具体动作,比如 add、del、show;ARGUMENTS 补上额外参数。记住这个骨架,后面所有操作都是往里填词。
先看清网卡长什么样
敲 ip link show,能列出服务器上所有网络接口。输出里能看到接口编号、MTU 值、状态和 MAC 地址。状态是 UP 的接口在正常工作,DOWN 的接口收发不了任何流量,除非手动启用。
只想看处于活动状态的接口,加个 up:ip link show up。嫌输出太啰嗦,用 -br 选项只保留关键信息:ip -br link show,一行一个接口,状态和 MAC 地址一目了然。
要看 IP 地址,用 addr 对象,简写成 a 也行:ip a。输出会带上每个接口的 IPv4 和 IPv6 地址、广播地址、作用域和有效期。只想看某一块网卡,把名字缀在后面:ip addr show enp8s0。想连收发包统计一起看,加 -s:ip -s link show enp8s0,RX 和 TX 的字节数、包数、错误数、丢包数都会列出来。
给网卡加地址、删地址
地址分配一般靠 DHCP,但一台服务器挂多个地址、或者新接口要配静态地址时,就得手动来。加一个地址:
- sudo ip addr add 192.168.1.10/24 dev enp8s0
这条命令给 enp8s0 加了一个私有网段地址。一块网卡可以同时挂多个 IP,各自承担不同的功能或服务。加完用 ip addr show enp8s0 确认新地址已经生效。多地址场景下,可能还得配路由,才能让特定连接走指定的接口地址。
删地址用 del:sudo ip addr del 192.168.1.10/24 dev enp8s0,再查一次接口信息,确认地址已经消失。
静态路由:给流量指条路
静态路由的作用,是把流量通过指定接口或下一跳地址送到远端网络。目标地址匹配不上任何规则时,请求会走默认路由,从主接口出去;路由表里查不到的信息,请求可能直接失败。
看当前路由表:ip route show。输出里,直连网段用 dev 选项,非直连地址用 via 选项指定下一跳。default 那一行兜住所有未知路由。
加一条静态路由,比如让 10.0.0.0/16 这个网段通过 VPC 里 10.50.112.4 这台服务器转发:
- sudo ip route add 10.0.0.0/16 via 10.50.112.4
再跑一次 ip route show,新路由已经出现在表里。
启停网卡与调整 MTU
停掉一块网卡,它就不再收发流量,但配置原样保留,维护和排障时很好用:sudo ip link set dev enp8s0 down。用 ip link show enp8s0 确认状态变成 DOWN。恢复就换成 up:sudo ip link set dev enp8s0 up。
MTU 是一个数据包在不分片的前提下能传输的最大字节数,多数网卡默认 1500。在 VPC 这类私有网络里,按需调大调小都行。先查当前值,再设新值,比如调到 3000 以便传输更大的数据包:
- sudo ip link set dev enp8s0 mtu 3000
改完再查一次,MTU 已经变成 3000。
还有几件事值得顺手做
用 ip neigh 查看和管理 ARP/邻居表。静态路由和 IP 地址记得写进发行版的网络配置里,否则重启就没了。把 ip -br 的输出接进监控脚本,接口一旦掉到 DOWN 就能收到告警。想了解这里没覆盖的对象和命令,直接 man ip。
热门跟贴