刚接触Linux系统时,最让人头疼的莫过于网络配置了。记得我第一次在虚拟机里安装CentOS时,连最基本的联网都搞不定,急得直挠头。后来才发现,Linux的网络配置其实就像搭积木,只要掌握了几个核心命令和文件,就能玩转各种网络场景。
与Windows不同,Linux的网络配置主要分为两种方式:临时配置和永久配置。临时配置就像用铅笔写字,重启就没了;永久配置则是用钢笔书写,长期有效。实际工作中,我们通常先用临时命令测试效果,确认无误后再写入配置文件。
网络配置的核心在于理解几个关键要素:IP地址是门牌号,子网掩码划定小区范围,网关是出入大门,DNS则是电话簿。把这些概念对应到具体命令和文件上,配置起来就会得心应手。下面我就带大家逐个击破这些知识点。
ifconfig命令是我的日常必备工具,就像网络工程师的听诊器。不带任何参数执行时,它会显示所有活跃网卡的信息:
bash复制eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:b4:c9:c0 txqueuelen 1000 (Ethernet)
这里特别要注意MTU值(最大传输单元),我曾在实际工作中遇到过一个奇葩问题:某云服务商的MTU默认是1450,而我们本地设置1500,导致部分大包传输失败。用ifconfig eth0 mtu 1450临时修改后问题立即解决。
route -n命令显示的路由表就像快递配送地图:
bash复制Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
有次公司网络改造,我靠这个命令发现网关被错误指向了旧路由器。Flag列中的"U"表示路由可用,"G"表示需要经过网关。当出现多个默认网关时,网络就会像无头苍蝇一样乱转。
现代Linux系统推荐使用ss替代传统的netstat,它不仅速度更快,显示的信息也更丰富:
bash复制ss -tulnp | grep 80
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))
这个命令组合能快速找出谁在监听80端口。有次服务器被入侵,就是靠它发现了个异常监听端口,及时止损。-t显示TCP,-u显示UDP,-l只显示监听端口,-p显示进程信息,这几个参数建议牢记。
ping命令看似简单,但隐藏着很多实用技巧。比如连续ping测试时可以用-c指定次数:
bash复制ping -c 10 www.baidu.com
遇到网络抖动时,我常用ping -f进行洪水测试(需要root权限),快速找出网络瓶颈。但要注意,这在生产环境可能引发DoS攻击嫌疑,慎用!
traceroute命令就像网络世界的导航地图:
bash复制traceroute www.taobao.com
1 192.168.1.1 (192.168.1.1) 2.450 ms 2.301 ms 2.234 ms
2 10.200.1.1 (10.200.1.1) 5.678 ms 5.612 ms 5.543 ms
3 221.131.128.1 (221.131.128.1) 15.234 ms 15.167 ms 15.102 ms
曾经有用户反映访问某网站特别慢,用这个命令发现请求绕道了国外节点,原来是BGP路由泄露导致。遇到星号(*)节点时,可能是防火墙禁用了ICMP响应,不代表网络不通。
nslookup和dig是DNS问题的照妖镜:
bash复制nslookup www.qq.com 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
www.qq.com canonical name = https.qq.com.
https.qq.com canonical name = qq.com.https.edgekey.net.
qq.com.https.edgekey.net canonical name = e13698.dscx.akamaiedge.net.
Name: e13698.dscx.akamaiedge.net
Address: 104.84.189.118
有次公司内网DNS异常,我用这个命令快速验证是DNS服务器问题还是本地配置问题。dig命令输出更详细,适合深度分析DNS记录。
ifconfig不仅能查看信息,还能临时修改配置:
bash复制ifconfig eth0 192.168.2.100 netmask 255.255.255.0
ifconfig eth0:1 10.0.0.1/24 # 添加虚拟接口
在测试负载均衡方案时,我经常用虚拟接口模拟多IP环境。但要注意,这种配置重启就失效,正式环境应该使用配置文件。
route命令的路由管理功能非常强大:
bash复制route add -net 172.16.0.0/16 gw 192.168.1.254
route del default gw 192.168.1.1
route add default gw 192.168.1.2
在多网卡服务器上,我常用它指定特定网段的出口。添加路由时,一定要确保网关地址可达,否则会导致网络中断。曾经有同事误删默认网关,只能跑去机房接显示器修复。
CentOS的网卡配置文件在/etc/sysconfig/network-scripts/目录下:
bash复制TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
Ubuntu的配置方式不同,使用netplan的yaml文件。有次我照搬CentOS的配置到Ubuntu,结果网络起不来,这才意识到发行版差异的重要性。
/etc/resolv.conf文件控制DNS解析:
bash复制nameserver 8.8.8.8
nameserver 114.114.114.114
options timeout:2 attempts:3 rotate
在CentOS 7+系统中,这个文件可能被NetworkManager覆盖。我推荐使用nmcli命令管理DNS:
bash复制nmcli con mod eth0 ipv4.dns "8.8.8.8 114.114.114.114"
nmcli con up eth0
修改主机名最稳妥的方法是使用hostnamectl:
bash复制hostnamectl set-hostname webserver01
/etc/hosts文件适合内网环境的主机名解析:
bash复制192.168.1.100 gitlab.example.com gitlab
在开发测试环境中,我经常用它绕过DNS解析,快速切换测试域名指向。但要注意不要滥用,否则可能导致域名解析混乱。