Linux路由配置

Linux路由配置

路由配置是 Linux 系统网络管理的核心技能之一,决定了数据包在网络中的传输路径。无论是搭建家庭网络、配置企业级服务器,还是实现复杂的多网段通信,掌握 Linux 路由配置都至关重要。

1. Linux 路由基础

1.1 什么是路由?

路由是指数据包从源地址到目标地址的传输路径选择过程。Linux 系统通过内核的路由表(Routing Table)决定数据包的转发方向。路由表包含目标网络、下一跳(Next Hop)、网关和接口等信息。

  • 静态路由:手动配置的固定路由规则,适合简单网络。
  • 动态路由:通过路由协议(如 OSPF、RIP)自动更新路由表,适合复杂网络。
  • 策略路由:基于源地址、协议等条件选择路由路径。

1.2 路由表结构

Linux 路由表由内核维护,可通过 ip route 查看:

ip route

输出示例:

default via 192.168.1.1 dev eth0 proto static metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
10.0.0.0/24 via 192.168.1.2 dev eth0
  • default via 192.168.1.1:默认网关,所有未知目标的数据包发送到此网关。
  • 192.168.1.0/24:本地网络,直接通过 eth0 转发。
  • 10.0.0.0/24 via 192.168.1.2:静态路由,目标网络通过指定网关。

1.3 路由相关概念

  • 网关(Gateway):数据包离开本地网络的下一跳地址。
  • 网络接口:如 eth0(有线)、wlan0(无线),用于发送和接收数据。
  • 子网掩码:定义网络范围,如 /24 表示 255.255.255.0
  • Metric:路由优先级,值越小优先级越高。
  • 协议(Proto):如 static(静态路由)、kernel(内核自动添加)。

1.4 常用路由工具

  • ip route:现代路由管理工具,替换 route 命令。
  • nmcli:NetworkManager 的命令行工具,适合动态配置。
  • systemd-networkd:轻量级网络管理服务,适合服务器。
  • routed/ripdospfd:动态路由协议守护进程。
  • iptablesnftables:用于策略路由和 NAT。

2. 查看和理解路由表

2.1 查看路由表

使用 ip route 查看当前路由表:

ip route show

输出示例:

default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
172.16.0.0/16 via 192.168.1.2 dev eth1

2.2 查看特定路由

过滤目标网络:

ip route show to 10.0.0.0/24

2.3 查看路由缓存(旧内核)

在较旧的 Linux 版本中,可查看路由缓存:

ip route show cache

注:新内核(如 CentOS 8、Ubuntu 20.04)已移除路由缓存。

2.4 其他工具

  • netstat -r:显示路由表(需安装 net-tools):

    sudo dnf install net-tools  # CentOS
    sudo apt install net-tools  # Ubuntu/Debian
    netstat -rn
    
  • route:传统工具,功能与 ip route 类似:

    route -n
    

3. 静态路由配置

静态路由适合小型网络或固定路径的场景。以下以 CentOS 8、Ubuntu 20.04 和 Debian 11 为例。

3.1 CentOS 8 静态路由

3.1.1 使用 ip route

添加临时静态路由:

sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev eth0

删除路由:

sudo ip route del 10.0.0.0/24

注:ip route 添加的路由重启后失效。

3.1.2 持久化路由
  1. 使用 NetworkManager

    sudo nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 192.168.1.2"
    sudo nmcli connection up eth0
    
  2. 使用配置文件
    编辑 /etc/sysconfig/network-scripts/route-eth0

    10.0.0.0/24 via 192.168.1.2 dev eth0
    

    应用:

    sudo nmcli connection reload
    sudo nmcli connection up eth0
    
  3. 使用 systemd-networkd
    编辑 /etc/systemd/network/20-wired.network

    [Match]
    Name=eth0
    
    [Network]
    Address=192.168.1.100/24
    Gateway=192.168.1.1
    
    [Route]
    Destination=10.0.0.0/24
    Gateway=192.168.1.2
    

    重启服务:

    sudo systemctl restart systemd-networkd
    

3.2 Ubuntu 20.04 静态路由

Ubuntu 20.04 使用 Netplan 管理网络。

3.2.1 使用 Netplan

编辑 /etc/netplan/01-netcfg.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      routes:
        - to: 10.0.0.0/24
          via: 192.168.1.2
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]

应用:

sudo netplan apply
3.2.2 使用 nmcli
sudo nmcli connection modify enp0s3 +ipv4.routes "10.0.0.0/24 192.168.1.2"
sudo nmcli connection up enp0s3

3.3 Debian 11 静态路由

Debian 11 支持 /etc/network/interfaces 和 NetworkManager。

3.3.1 使用 /etc/network/interfaces

编辑 /etc/network/interfaces

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
    up ip route add 10.0.0.0/24 via 192.168.1.2

重启网络:

sudo systemctl restart networking
3.3.2 使用 nmcli
sudo nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 192.168.1.2"
sudo nmcli connection up eth0

3.4 验证静态路由

测试路由是否生效:

ip route show to 10.0.0.0/24
ping -c 4 10.0.0.1

4. 动态路由配置

动态路由通过协议(如 RIP、OSPF)自动更新路由表,适合大型网络。

4.1 安装 Quagga/FRR

Quagga 和 FRR(Free Range Routing)是常用的动态路由软件。FRR 是 Quagga 的现代替代。

  • CentOS 8:

    sudo dnf install frr
    
  • Ubuntu/Debian:

    sudo apt install frr
    

4.2 配置 OSPF

OSPF(Open Shortest Path First)适用于大型网络。

  1. 启用 OSPF 守护进程:
    编辑 /etc/frr/daemons

    ospfd=yes
    
  2. 配置 OSPF:
    编辑 /etc/frr/frr.conf

    router ospf
       network 192.168.1.0/24 area 0
       network 10.0.0.0/24 area 0
    interface eth0
       ip ospf cost 10
    
  3. 启动 FRR:

    sudo systemctl enable --now frr
    
  4. 验证:

    vtysh -c "show ip ospf neighbor"
    

4.3 配置 RIP

RIP(Routing Information Protocol)适合小型网络。

  1. 启用 RIP:
    编辑 /etc/frr/daemons

    ripd=yes
    
  2. 配置 RIP:
    编辑 /etc/frr/frr.conf

    router rip
       network 192.168.1.0/24
       network 10.0.0.0/24
    
  3. 启动服务:

    sudo systemctl restart frr
    

4.4 验证动态路由

查看路由表:

ip route

检查 OSPF/RIP 状态:

vtysh -c "show ip ospf route"
vtysh -c "show ip rip"

5. 策略路由配置

策略路由根据源地址、协议等条件选择路由路径。

5.1 使用 ip rule

  1. 创建新路由表:
    编辑 /etc/iproute2/rt_tables

    100 custom
    
  2. 添加策略路由:

    sudo ip rule add from 192.168.1.100 table 100
    sudo ip route add default via 192.168.1.3 dev eth0 table 100
    
  3. 持久化:

    • CentOS:添加到 /etc/sysconfig/network-scripts/rule-eth0

      from 192.168.1.100 table 100
      
    • Ubuntu:添加到 Netplan 的 routes 字段。

    • Debian:添加到 /etc/network/interfacesup 命令。

5.2 使用 nftables

配置基于协议的路由:

sudo nft add table ip custom
sudo nft add chain ip custom prerouting { type filter hook prerouting priority 0 \; }
sudo nft add rule ip custom prerouting ip saddr 192.168.1.100 ip daddr 10.0.0.0/24 meta mark set 1
sudo ip route add 10.0.0.0/24 via 192.168.1.3 table 100
sudo ip rule add fwmark 1 table 100

6. 高级路由配置

6.1 配置 NAT

网络地址转换(NAT)用于内网访问外网。

  • iptables

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    sudo iptables-save > /etc/iptables/rules.v4
    
  • nftables

    sudo nft add table nat
    sudo nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
    sudo nft add rule nat postrouting oifname "eth0" masquerade
    

6.2 配置网桥路由

网桥用于虚拟化环境:

sudo ip link add name br0 type bridge
sudo ip link set eth0 master br0
sudo ip link set br0 up
sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev br0

6.3 配置多网关

支持多个网关的负载均衡:

sudo ip route add default scope global nexthop via 192.168.1.1 dev eth0 weight 1 nexthop via 192.168.2.1 dev eth1 weight 2

7. 故障排查

7.1 路由不可达

  • 检查路由表:

    ip route show
    
  • 测试目标网络:

    ping -c 4 10.0.0.1
    traceroute 10.0.0.1
    

7.2 网关配置错误

  • 验证网关可达:

    ping 192.168.1.2
    
  • 检查接口状态:

    ip link show
    

7.3 动态路由未更新

  • 检查 FRR 日志:

    sudo journalctl -u frr
    
  • 验证邻居状态:

    vtysh -c "show ip ospf neighbor"
    

7.4 防火墙阻断

  • 检查防火墙规则:

    sudo firewall-cmd --list-all  # CentOS
    sudo ufw status  # Ubuntu/Debian
    

8. 优化与维护

8.1 优化路由性能

  • 降低 Metric:优先选择低延迟路径:

    sudo ip route add 10.0.0.0/24 via 192.168.1.2 dev eth0 metric 50
    
  • 启用 BBR

    echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

8.2 监控路由

  • 使用 mtr 监控路径:

    sudo dnf install mtr  # CentOS
    sudo apt install mtr  # Ubuntu/Debian
    mtr 10.0.0.1
    

8.3 备份路由配置

备份路由表:

ip route save > /etc/routes.backup

恢复:

sudo ip route restore < /etc/routes.backup

9. 总结

Linux 路由配置是网络管理的核心,从静态路由的简单设置到动态路由的自动化管理,再到策略路由的灵活控制,涵盖了多种场景。无论是家庭网络、企业服务器还是复杂的数据中心,掌握 Linux 路由配置都能显著提升网络效率和安全性。

更多技术分享,关注公众号:halugin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值