Linux 网络配置:netplan、ip 命令与常见故障
ifconfig 已经过时了,现在该用 ip。这篇把网络配置的常用操作和排错顺序整理出来。
一、看网络状态
ip a # 所有网卡与地址(替代 ifconfig)
ip -4 a # 只要 IPv4
ip link # 二层链路状态
ip -s link # 带统计(收发包、错误、丢包)
ip r # 路由表(替代 route -n)
ip neigh # ARP 邻居表(替代 arp -a)
ss -lntp # 监听端口(替代 netstat)
ss -antp # 所有 TCP 连接
ss -s # 汇总统计ip -s link 里的错误统计很有用:
| 字段 | 含义 |
|---|---|
| RX errors | 收包错误 |
| RX dropped | 收包丢弃(可能是缓冲区满) |
| TX errors | 发包错误 |
| collisions | 冲突(半双工才有) |
二、netplan 配静态地址
Ubuntu 18.04+ 用 netplan,配置文件在 /etc/netplan/(YAML):
# /etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.10/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 119.29.29.29]sudo netplan try # 试应用,120 秒内不确认会自动回滚(强烈推荐)
sudo netplan apply # 确认应用
sudo netplan generate # 只生成后端配置,不应用远程改网络一定要用
netplan try。直接apply写错了,你就和服务器失联了。
Debian 传统写法是 /etc/network/interfaces:
auto eth0
iface eth0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
dns-nameservers 223.5.5.5 119.29.29.29三、DNS 怎么配的
cat /etc/resolv.conf
# nameserver 127.0.0.53 ← systemd-resolved 的存根
# 现代系统用 systemd-resolved
resolvectl status
sudo resolvectl flush-caches
# 改 DNS(netplan 里配 nameservers 是正道)/etc/resolv.conf 通常是个软链接,直接改会被覆盖。要改就在 netplan 或 resolved 配置里改。
# 测试解析用了多久、走哪个服务器
dig www.bzii.cn
resolvectl query www.bzii.cn四、主机名与 hosts
hostnamectl set-hostname baize-node-1
cat /etc/hosts127.0.0.1 localhost
127.0.1.1 baize-node-1
::1 localhost ip6-localhost ip6-loopback很多程序(尤其是 Java、数据库)启动时会反查主机名,hosts 里没有对应条目会导致启动慢几秒。这是个很隐蔽的坑。
五、连不上的排查顺序
从下往上,一层层排除:
# 1. 网卡有地址吗
ip a
# 2. 链路通吗
ip link show eth0 # 看 state 是否 UP
# 3. 同网段通吗
ping -c 3 192.168.1.1
# 4. 有默认路由吗
ip r | grep default
# 5. 公网 IP 通吗
ping -c 3 223.5.5.5
# 6. DNS 解析对吗
dig +short www.bzii.cn
# 7. 端口通吗(ping 不通不代表端口不通)
nc -zv www.bzii.cn 443
curl -v https://www.bzii.cn
# 8. 逐跳看在哪断
mtr --report www.bzii.cn六、端口相关的坑
# 端口被谁占了
ss -lntp | grep :80
sudo lsof -i :80
sudo fuser -k 80/tcp # 直接杀掉占用者
# 本机能不能连自己的服务
curl -v http://127.0.0.1:3000
# 服务只监听 127.0.0.1 会导致外网访问不了
ss -lntp | grep 3000
# 0.0.0.0:3000 ← 监听所有地址,正确
# 127.0.0.1:3000 ← 只监听本机,外网连不上「本机 curl 通、外网不通」90% 是这两个原因:服务只监听 127.0.0.1,或者防火墙/安全组没放行。
七、防火墙查看
sudo ufw status verbose
sudo iptables -L -n -v
sudo nft list ruleset # nftables,新系统默认注意云服务器有两层:厂商安全组 + 系统内防火墙,都要放行。
八、网卡改名(可选)
新系统用 ens33、enp0s3 这种可预测命名。想改回 eth0:
sudo vim /etc/default/grub
# GRUB_CMDLINE_LINUX 加 net.ifnames=0 biosdevname=0
sudo update-grub && sudo reboot网络排错的核心方法就是从底层往上逐层验证,别一上来就怀疑运营商。
