Skip to main content

Linux网络管理

网络基础概念

Linux系统提供了强大的网络功能,支持各种网络协议和服务。理解Linux网络管理对于系统管理员和开发人员至关重要。

网络接口

网络接口是系统与网络通信的通道,可以是有线网卡、无线网卡、虚拟网卡等。

IP地址

IP地址是网络设备的唯一标识符,分为IPv4和IPv6两种格式。

网络服务

Linux系统可以运行各种网络服务,如Web服务器、FTP服务器、SSH服务器等。

网络接口配置

查看网络接口

# 查看所有网络接口
ip addr show
# 或简写为
ip a

# 查看特定网络接口
ip addr show eth0

# 使用传统命令查看网络接口
ifconfig

配置网络接口

# 启用网络接口
sudo ip link set eth0 up

# 禁用网络接口
sudo ip link set eth0 down

# 为接口分配IP地址
sudo ip addr add 192.168.1.100/24 dev eth0

# 删除接口的IP地址
sudo ip addr del 192.168.1.100/24 dev eth0

# 查看网络接口统计信息
ip -s link show eth0

使用传统ifconfig命令

# 查看网络接口
ifconfig

# 启用网络接口
sudo ifconfig eth0 up

# 禁用网络接口
sudo ifconfig eth0 down

# 为接口分配IP地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0

# 设置接口MTU
sudo ifconfig eth0 mtu 1500

网络连接测试

ping命令

ping命令用于测试网络连通性。

# 测试到目标主机的连通性
ping google.com

# 发送指定数量的数据包
ping -c 4 google.com

# 设置数据包大小
ping -s 1024 google.com

# 设置超时时间
ping -W 5 google.com

# 持续ping直到手动停止
ping google.com
# Ctrl+C 停止

traceroute命令

traceroute命令用于跟踪数据包到达目标主机的路径。

# 跟踪到目标主机的路由
traceroute google.com

# 使用IPv6跟踪路由
traceroute6 google.com

# 设置最大跳数
traceroute -m 20 google.com

# 使用TCP跟踪路由
tcptraceroute google.com

telnet和nc命令

# 测试TCP端口连通性
telnet host port

# 使用nc测试端口
nc -zv host port

# 使用nc测试端口范围
nc -zv host 80-90

网络统计和监控

netstat命令

netstat命令用于显示网络连接、路由表、接口统计等信息。

# 查看所有网络连接
netstat -a

# 查看TCP连接
netstat -t

# 查看UDP连接
netstat -u

# 查看监听端口
netstat -tuln

# 查看网络统计信息
netstat -i

# 查看路由表
netstat -r

ss命令

ss是netstat的现代替代品,性能更好。

# 查看所有连接
ss -a

# 查看TCP连接
ss -t

# 查看UDP连接
ss -u

# 查看监听端口
ss -tuln

# 查看进程信息
ss -p

# 查看内存使用情况
ss -m

网络流量监控

# 实时监控网络流量
iftop

# 查看网络接口流量统计
iftop -i eth0

# 查看进程网络使用情况
nethogs

# 监控特定主机的流量
iftop -f "host 192.168.1.100"

路由配置

查看路由表

# 查看路由表
ip route show
# 或简写为
ip route

# 查看特定目标的路由
ip route get 8.8.8.8

# 使用传统命令查看路由
route -n

添加和删除路由

# 添加默认路由
sudo ip route add default via 192.168.1.1

# 添加特定网络路由
sudo ip route add 10.0.0.0/8 via 192.168.1.1

# 删除默认路由
sudo ip route del default

# 删除特定路由
sudo ip route del 10.0.0.0/8

# 添加路由并指定接口
sudo ip route add 172.16.0.0/16 dev eth1

使用传统route命令

# 添加默认路由
sudo route add default gw 192.168.1.1

# 添加特定网络路由
sudo route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.1

# 删除路由
sudo route del default

DNS配置

配置DNS服务器

# 查看DNS配置
cat /etc/resolv.conf

# 临时修改DNS服务器
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

# 永久修改DNS服务器(Ubuntu/Debian)
# 编辑 /etc/netplan/*.yaml 文件

# 永久修改DNS服务器(CentOS/RHEL 7)
# 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 文件

DNS查询工具

# 查询域名IP地址
nslookup google.com

# 使用dig查询DNS信息
dig google.com

# 查询MX记录
dig mx google.com

# 反向DNS查询
dig -x 8.8.8.8

# 查询特定DNS服务器
dig @8.8.8.8 google.com

防火墙配置

iptables(传统防火墙)

# 查看当前iptables规则
sudo iptables -L

# 允许特定端口
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许特定IP访问
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 拒绝特定IP访问
sudo iptables -A INPUT -s 192.168.1.200 -j DROP

# 删除规则
sudo iptables -D INPUT -s 192.168.1.200 -j DROP

# 保存iptables规则
sudo iptables-save > /etc/iptables/rules.v4

firewalld(现代防火墙)

# 启动firewalld
sudo systemctl start firewalld

# 查看防火墙状态
sudo firewall-cmd --state

# 查看当前区域
sudo firewall-cmd --get-active-zones

# 查看默认区域
sudo firewall-cmd --get-default-zone

# 查看所有服务
sudo firewall-cmd --get-services

# 允许服务
sudo firewall-cmd --permanent --add-service=ssh

# 允许端口
sudo firewall-cmd --permanent --add-port=80/tcp

# 重新加载配置
sudo firewall-cmd --reload

# 查看规则
sudo firewall-cmd --list-all

UFW(Ubuntu防火墙)

# 启用UFW
sudo ufw enable

# 禁用UFW
sudo ufw disable

# 查看状态
sudo ufw status

# 允许服务
sudo ufw allow ssh

# 允许端口
sudo ufw allow 80/tcp

# 拒绝连接
sudo ufw deny 23

# 删除规则
sudo ufw delete allow 80/tcp

# 重置规则
sudo ufw reset

网络服务管理

SSH服务

# 启动SSH服务
sudo systemctl start ssh

# 停止SSH服务
sudo systemctl stop ssh

# 重启SSH服务
sudo systemctl restart ssh

# 查看SSH服务状态
sudo systemctl status ssh

# 配置SSH服务
sudo nano /etc/ssh/sshd_config

Web服务器

# Apache服务管理
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
sudo systemctl status apache2

# Nginx服务管理
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx

FTP服务

# vsftpd服务管理
sudo systemctl start vsftpd
sudo systemctl stop vsftpd
sudo systemctl restart vsftpd
sudo systemctl status vsftpd

网络故障排除

常见网络问题

  1. 网络连接问题

    # 检查网络接口状态
    ip addr show

    # 测试本地回环
    ping 127.0.0.1

    # 测试网关连通性
    ping gateway_ip

    # 测试DNS解析
    nslookup google.com
  2. DNS解析问题

    # 检查DNS配置
    cat /etc/resolv.conf

    # 直接使用IP地址测试
    ping 8.8.8.8

    # 使用不同的DNS服务器
    nslookup google.com 8.8.4.4
  3. 防火墙问题

    # 检查防火墙状态
    sudo ufw status
    sudo firewall-cmd --list-all

    # 临时禁用防火墙测试
    sudo ufw disable
  4. 路由问题

    # 查看路由表
    ip route show

    # 跟踪路由
    traceroute google.com

    # 检查默认路由
    ip route | grep default

网络诊断工具

# 网络连接测试
mtr google.com

# 端口扫描
nmap -p 1-1000 host

# 网络带宽测试
iperf3 -s # 服务器端
iperf3 -c server_ip # 客户端

# 网络延迟测试
ping -c 10 google.com

# 网络吞吐量测试
dd if=/dev/zero bs=1M count=100 | nc -q 5 host port

网络配置文件

主要配置文件

# 网络接口配置(Ubuntu/Debian)
/etc/netplan/*.yaml

# 网络接口配置(CentOS/RHEL)
/etc/sysconfig/network-scripts/ifcfg-eth0

# DNS配置
/etc/resolv.conf

# 主机名配置
/etc/hostname

# 主机映射
/etc/hosts

# 网络服务配置
/etc/services

网络管理工具

# NetworkManager命令行工具
nmcli connection show
nmcli device status
nmcli connection up connection_name
nmcli connection down connection_name

# 重启网络服务
sudo systemctl restart networking
sudo systemctl restart NetworkManager

实践练习

练习1:网络接口配置

# 1. 查看网络接口信息
ip addr show

# 2. 查看路由表
ip route show

# 3. 测试网络连通性
ping -c 4 google.com

# 4. 查看DNS配置
cat /etc/resolv.conf

# 5. 测试DNS解析
nslookup github.com

练习2:防火墙配置

# 1. 查看防火墙状态(选择适用的命令)
sudo ufw status
# 或
sudo firewall-cmd --state

# 2. 允许SSH服务
sudo ufw allow ssh
# 或
sudo firewall-cmd --permanent --add-service=ssh

# 3. 允许Web服务
sudo ufw allow 80/tcp
# 或
sudo firewall-cmd --permanent --add-port=80/tcp

# 4. 重新加载防火墙配置(firewalld)
sudo firewall-cmd --reload

# 5. 查看当前规则
sudo ufw status verbose
# 或
sudo firewall-cmd --list-all

练习3:网络监控

# 1. 查看网络连接
ss -tuln

# 2. 实时监控网络流量(需要安装iftop)
sudo iftop -i eth0

# 3. 查看进程网络使用情况(需要安装nethogs)
sudo nethogs eth0

# 4. 跟踪路由
traceroute google.com

# 5. DNS查询
dig google.com

练习4:网络服务管理

# 1. 查看SSH服务状态
sudo systemctl status ssh

# 2. 重启网络服务
sudo systemctl restart networking

# 3. 查看所有网络服务
sudo systemctl list-units --type=service | grep -E "(ssh|network|apache|nginx)"

# 4. 查看网络服务日志
sudo journalctl -u ssh

# 5. 测试SSH连接
ssh localhost

安全最佳实践

网络安全建议

  1. 限制网络访问

    # 只允许特定IP访问SSH
    sudo ufw allow from 192.168.1.100 to any port 22
  2. 使用非标准端口

    # 修改SSH端口(编辑/etc/ssh/sshd_config)
    Port 2222
  3. 启用防火墙

    # 启用UFW并设置默认策略
    sudo ufw enable
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
  4. 定期更新系统

    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade

    # CentOS/RHEL
    sudo yum update
  5. 监控网络活动

    # 查看异常连接
    netstat -an | grep ESTABLISHED

    # 查看监听端口
    ss -tuln

总结

Linux网络管理涉及网络接口配置、连接测试、路由管理、防火墙配置、服务管理等多个方面。掌握这些技能对于维护Linux系统的网络功能和安全性至关重要。

关键要点:

  1. 理解网络基础概念和网络接口管理
  2. 掌握网络连接测试和故障排除方法
  3. 熟练使用现代网络工具(ip、ss)和传统工具(ifconfig、netstat)
  4. 学会配置防火墙和网络安全策略
  5. 能够管理和监控网络服务
  6. 遵循网络安全最佳实践