Linux网络总是不通?一文搞懂子网掩码、网关配置的所有坑
引言
网络配置是Linux系统运维中的核心技能之一。正确理解和配置子网掩码、网关等网络参数,直接影响系统的网络连通性和性能。本文将深入探讨Linux系统中网络配置的方方面面,为运维工程师提供全面的技术指导。
第一章:网络基础理论
1.1 IP地址与子网掩码的关系
IP地址是网络中设备的唯一标识,由32位二进制数组成,通常以点分十进制表示。子网掩码用于确定IP地址的网络部分和主机部分。
IP地址分类:
- • A类:1.0.0.0 - 126.255.255.255,默认子网掩码255.0.0.0
- • B类:128.0.0.0 - 191.255.255.255,默认子网掩码255.255.0.0
- • C类:192.0.0.0 - 223.255.255.255,默认子网掩码255.255.255.0
1.2 CIDR表示法
CIDR(Classless Inter-Domain Routing)使用斜杠后的数字表示网络前缀长度:
1.3 网关的作用
网关是连接不同网络的设备,通常是路由器。当数据包的目标不在本地网络时,系统将数据包发送到默认网关进行转发。
第二章:Linux网络配置文件详解
2.1 网络配置文件结构
Linux系统中,网络配置文件的位置和格式因发行版而异:
RedHat/CentOS系列:
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network
/etc/resolv.conf
Debian/Ubuntu系列:
/etc/network/interfaces
/etc/netplan/(Ubuntu 18.04+)
/etc/resolv.conf
2.2 RedHat/CentOS网络配置
网卡配置文件格式(/etc/sysconfig/network-scripts/ifcfg-eth0):
# 基本配置
DEVICE=eth0 # 网卡设备名
TYPE=Ethernet # 连接类型
ONBOOT=yes# 开机启动
BOOTPROTO=static # 静态IP配置
# IP地址配置
IPADDR=192.168.1.100 # IP地址
NETMASK=255.255.255.0 # 子网掩码
PREFIX=24 # 网络前缀(可选,与NETMASK二选一)
GATEWAY=192.168.1.1 # 默认网关
# DNS配置
DNS1=8.8.8.8 # 首选DNS
DNS2=8.8.4.4 # 备用DNS
# 高级配置
HWADDR=00:50:56:12:34:56 # MAC地址
USERCTL=no # 普通用户控制
NM_CONTROLLED=no # NetworkManager控制
DEFROUTE=yes# 默认路由
DHCP配置示例:
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR=00:50:56:12:34:56
2.3 Debian/Ubuntu网络配置
传统配置文件(/etc/network/interfaces):
# 回环接口
auto lo
iface lo inet loopback
# 静态IP配置
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
dns-search example.com
# DHCP配置
auto eth1
iface eth1 inet dhcp
# 多IP配置
auto eth0:0
iface eth0:0 inet static
address 192.168.1.101
netmask 255.255.255.0
Netplan配置(Ubuntu 18.04+):
network:
version:2
renderer:networkd
ethernets:
eth0:
addresses:
-192.168.1.100/24
gateway4:192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
search: [example.com]
dhcp4:false
第三章:子网掩码深入解析
3.1 子网掩码的二进制表示
子网掩码用二进制1表示网络部分,用0表示主机部分:
IP地址: 192.168.1.100 = 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 = 11111111.11111111.11111111.00000000
网络地址: 192.168.1.0 = 11000000.10101000.00000001.00000000
广播地址: 192.168.1.255 = 11000000.10101000.00000001.11111111
3.2 子网划分实例
将192.168.1.0/24网络划分为4个子网:
原网络:192.168.1.0/24 (256个地址)
新掩码:/26 (64个地址每个子网)
子网1:192.168.1.0/26 (192.168.1.1 - 192.168.1.62)
子网2:192.168.1.64/26 (192.168.1.65 - 192.168.1.126)
子网3:192.168.1.128/26 (192.168.1.129 - 192.168.1.190)
子网4:192.168.1.192/26 (192.168.1.193 - 192.168.1.254)
3.3 VLSM(可变长子网掩码)
VLSM允许在同一个主网络中使用不同长度的子网掩码:
# 服务器网段(需要30个地址)
192.168.1.0/27 # 掩码255.255.255.224
# 工作站网段(需要100个地址)
192.168.1.128/25 # 掩码255.255.255.128
# 点对点链路(需要2个地址)
192.168.1.252/30 # 掩码255.255.255.252
第四章:网关配置与路由管理
4.1 默认网关配置
临时配置:
# 添加默认网关
route add default gw 192.168.1.1
# 或使用ip命令
ip route add default via 192.168.1.1
# 删除默认网关
route del default gw 192.168.1.1
ip route del default via 192.168.1.1
永久配置:
# RedHat/CentOS
echo"GATEWAY=192.168.1.1" >> /etc/sysconfig/network-scripts/ifcfg-eth0
# Debian/Ubuntu
echo"gateway 192.168.1.1" >> /etc/network/interfaces
4.2 静态路由配置
添加静态路由:
# 访问10.0.0.0/8网络通过192.168.1.254网关
route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.254
# 使用ip命令
ip route add 10.0.0.0/8 via 192.168.1.254
# 指定出口接口
ip route add 10.0.0.0/8 via 192.168.1.254 dev eth0
永久静态路由配置:
RedHat/CentOS创建路由文件:
# /etc/sysconfig/network-scripts/route-eth0
10.0.0.0/8 via 192.168.1.254
172.16.0.0/16 via 192.168.1.253
Debian/Ubuntu在interfaces文件中添加:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.254
down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.254
4.3 路由表管理
查看路由表:
# 传统命令
route -n
netstat -rn
# 现代命令
ip route show
ip route show table main
路由表输出解析:
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
标志含义:
第五章:网络诊断与故障排除
5.1 网络连通性测试
基本连通性测试:
# 测试本地网络
ping 192.168.1.1
# 测试外网连通性
ping 8.8.8.8
ping www.google.com
# 测试特定端口
telnet 192.168.1.1 80
nc -zv 192.168.1.1 80
5.2 路由追踪
# 追踪数据包路径
traceroute 8.8.8.8
tracepath 8.8.8.8
# 使用mtr进行持续监控
mtr 8.8.8.8
5.3 网络配置检查
检查网络接口状态:
# 查看接口信息
ifconfig
ip addr show
# 查看接口统计
ip -s link show
# 检查网络服务状态
systemctl status networking # Debian/Ubuntu
systemctl status network # RedHat/CentOS
5.4 常见故障排除
网络无法连接故障排除流程:
# 检查网线连接状态
ethtool eth0
# 验证IP配置
ip addr show eth0
# 检查路由表
ip route show
# 测试DNS解析
nslookup www.google.com
dig www.google.com
# 查看防火墙状态
iptables -L
systemctl status firewalld
第六章:高级网络配置
6.1 网络绑定(Bonding)
配置网络绑定:
# 创建绑定接口配置
# /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BONDING_OPTS="mode=1 miimon=100"
# 配置从属接口
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
6.2 VLAN配置
配置VLAN接口:
# 创建VLAN接口
# /etc/sysconfig/network-scripts/ifcfg-eth0.100
DEVICE=eth0.100
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0
VLAN=yes
6.3 桥接配置
配置网络桥接:
# 创建桥接接口
# /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
DELAY=0
# 配置桥接成员
# /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
第七章:网络安全配置
7.1 防火墙配置
iptables基本配置:
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 默认拒绝
iptables -P INPUT DROP
7.2 网络访问控制
使用TCP Wrappers:
# /etc/hosts.allow
sshd: 192.168.1.0/24
httpd: ALL
# /etc/hosts.deny
ALL: ALL
第八章:性能优化与监控
8.1 网络性能调优
内核参数优化:
# /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_congestion_control = bbr
net.core.netdev_max_backlog = 5000
8.2 网络监控
实时监控网络流量:
# 使用iftop监控
iftop -i eth0
# 使用nethogs监控进程流量
nethogs eth0
# 使用ss查看连接状态
ss -tuln
第九章:自动化网络配置
9.1 脚本化网络配置
网络配置脚本示例:
#!/bin/bash
# network-config.sh
INTERFACE="eth0"
IP_ADDRESS="192.168.1.100"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="8.8.4.4"
# 检查系统类型
if [ -f /etc/redhat-release ]; then
# RedHat/CentOS配置
cat > /etc/sysconfig/network-scripts/ifcfg-$INTERFACE << EOF
DEVICE=$INTERFACE
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=$IP_ADDRESS
NETMASK=$NETMASK
GATEWAY=$GATEWAY
DNS1=$DNS1
DNS2=$DNS2
EOF
systemctl restart network
elif [ -f /etc/debian_version ]; then
# Debian/Ubuntu配置
cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback
auto $INTERFACE
iface $INTERFACE inet static
address $IP_ADDRESS
netmask $NETMASK
gateway $GATEWAY
dns-nameservers $DNS1 $DNS2
EOF
systemctl restart networking
fi
9.2 Ansible网络配置
Ansible playbook示例:
---
-name:Configurenetworkinterface
hosts:servers
become:yes
vars:
interface:eth0
ip_address:192.168.1.100
netmask:255.255.255.0
gateway:192.168.1.1
tasks:
-name:Configurenetworkinterface(RedHat/CentOS)
template:
src:ifcfg-interface.j2
dest:"/etc/sysconfig/network-scripts/ifcfg-{{ interface }}"
when:ansible_os_family=="RedHat"
notify:restartnetwork
-name:Configurenetworkinterface(Debian/Ubuntu)
template:
src:interfaces.j2
dest:/etc/network/interfaces
when:ansible_os_family=="Debian"
notify:restartnetworking
handlers:
-name:restartnetwork
service:
name:network
state:restarted
-name:restartnetworking
service:
name:networking
state:restarted
第十章:云环境网络配置
10.1 AWS网络配置
AWS实例网络配置:
# 配置弹性IP
aws ec2 associate-address --instance-id i-1234567890abcdef0 --public-ip 203.0.113.12
# 配置安全组
aws ec2 authorize-security-group-ingress \
--group-id sg-12345678 \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
10.2 Docker网络配置
Docker容器网络:
# 创建自定义网络
docker network create --driver bridge \
--subnet=192.168.100.0/24 \
--gateway=192.168.100.1 \
mynetwork
# 启动容器并指定网络
docker run -d --name web \
--network mynetwork \
--ip 192.168.100.10 \
nginx
结语
Linux网络配置是运维工程师必须掌握的核心技能。通过深入理解子网掩码、网关的工作原理和配置方法,结合实际的故障排除经验,能够确保网络的稳定性和高效性。随着云计算和容器技术的发展,网络配置的复杂性不断增加,运维工程师需要持续学习和实践,才能应对各种网络挑战。
本文涵盖了从基础理论到高级配置的全面内容,希望能够为运维工程师提供有价值的参考。在实际工作中,建议结合具体的网络环境和业务需求,灵活运用这些知识和技能。