IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    iproute 基础

    Kumu\'s Blog发表于 2013-06-04 00:00:00
    love 0

    一、iproute基本介绍

    iproute是用于linux下网络配置工具,该工具包包含以下组件:

    # rpm -ql  iproute | grep bin
    /sbin/cbq           # 流量控制
    /sbin/ifcfg         # 网络地址配置管理
    /sbin/ip            # 网络配置命令
    /sbin/rtmon         # rtmon listens on netlink socket and monitors routing table changes.
    /sbin/tc            # 进行流量控制的命令
    /usr/sbin/arpd      # 收集arp信息保存到本地cache daemon
    /usr/sbin/lnstat    # 网络统计信息
    /usr/sbin/nstat     # 显示网络统计信息
    /usr/sbin/rtacct    # 查看数据包流量状态
    【nstat and rtacct are simple tools to monitor kernel snmp counters and network interface statistics.】
    /usr/sbin/ss        # 类似netstat命令,显示活动连接
    

    iproute 的中心是ip这个命令,类似 arp、ifconfig、route 命令虽然这些工具能够工作,但是在Linux2.2和更高版本的内核上就有点out了。

    二、ip基本使用方法

    # ip --help
    Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
           ip [ -force ] -batch filename
    where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                       tunnel | maddr | mroute | mrule | monitor | xfrm }
           OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
                        -f[amily] { inet | inet6 | ipx | dnet | link } |
                        -o[neline] | -t[imestamp] | -b[atch] [filename] |
                        -rc[vbuf] [size]}
    

    OBJECT:

    • link: 指网络设备,通过此对象命令,我们可以查看及更改网络设备的属性。
    • addr: 地址管理
    • neigh: arp表管理
    • route: 路由管理
    • rule: 路由策略
    • maddr: 多址广播地址
    • mroute: 多播路由缓存管理
    • tunnel: 通道管理
    # ip -V         # 打印iproute信息
    ip utility, iproute2-ss091226
    

    显示链路信息:

    # ip link
    1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
        link/ether 00:0c:29:3b:9c:6f brd ff:ff:ff:ff:ff:ff 
    # ip link show dev eth0
    2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
        link/ether 00:0c:29:3b:9c:6f brd ff:ff:ff:ff:ff:ff
    

    显示IP地址:

    # ip addr
    1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
        link/ether 00:0c:29:3b:9c:6f brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
    

    显示路由ip route [类似route -n]

    # ip route | column -t
    192.168.0.0/24  dev  eth1          scope  link
    10.2.0.0/16     dev  eth2          proto  kernel  scope  link  src  10.2.0.111
    default         via  10.2.255.254  dev    eth2
    # ip route del 192.168.0.0/24 dev eth1
    # ip route add 192.168.0.0/24 dev eth1
    # ip route del via 10.2.255.254  # 删除默认路由
    # ip route add via 10.2.255.254  # 增加默认路由
    # ip route add 192.168.1.0/24 via 192.168.0.1  # 增加静态路由,192.168.0.1为下一跳地址
    # ip route del 192.168.1.0/24 via 192.168.0.1  # 删除静态路由
    

    显示arp信息ip neigh [可以取代arp -n],删除则是ip neigh del IP地址 dev 设备名

    三、路由策略数据库

    如果你有一个大规模的路由器,需要同时满足不同用户对于路由的不通需求,路由策略数据库可以帮你通过多路由表技术来实现。当内核需要做出路由选择时,它会找出应该参考哪一张路由表。除了ip外,route也可以修改main和local表。

    默认规则:

    # ip rule
    0:  from all lookup local 
    32766:  from all lookup main 
    32767:  from all lookup default
    

    上面列出了规则的优先顺序。ip route 命令默认显示的就是main表。ip route show table all 显示所有规则中的表

    # ip route list table local
    broadcast 192.168.0.255 dev eth0  proto kernel  scope link  src 192.168.0.10 
    broadcast 10.2.0.0 dev eth1  proto kernel  scope link  src 10.2.0.217 
    broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1
    ... ...
    

    default表为空

    四、例: 简单策略路由添加

    • [引用自Linux高级路由中文HOWTO]

    让我们再来一个真实的例子。我有两个 Cable Modem , 连接到了一个 Linux 的 NAT (“伪装”) 路由器上。这里的室友们向我付费使用Internet。假如我其中的一个室友因为只想访问 hotmail 而希望少付一些钱。对我来说这没有问题,他们肯定只能使用那个比较次的 Cable Modem 。

    那个比较快的 cable modem 的 IP 地址是 212.64.94.251,PPP 链路,对端 IP 是212.64.94.1。而那个比较慢的 cable modem 的 IP 地址是 212.64.78.148,对端是 195.96.98.253。

    local 表:

    [ahu@home ahu]$ ip route list table local
    broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
    local 10.0.0.1 dev eth0 proto kernel scope host src 10.0.0.1
    broadcast 10.0.0.0 dev eth0 proto kernel scope link src 10.0.0.1
    local 212.64.94.251 dev ppp0 proto kernel scope host src 212.64.94.251
    broadcast 10.255.255.255 dev eth0 proto kernel scope link src 10.0.0.1
    broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
    local 212.64.78.148 dev ppp2 proto kernel scope host src 212.64.78.148
    local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
    local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
    

    让我们看看 “main” 路由表:

    [ahu@home ahu]$ ip route list table main
    195.96.98.253 dev ppp2 proto kernel scope link src 212.64.78.148
    212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251
    10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1
    127.0.0.0/8 dev lo scope link
    default via 212.64.94.1 dev ppp0
    

    我们现在为我们的朋友创建了一个叫做 “John” 的规则。其实我们完全可以使用纯数字表示规则,但是不方便。我们可以向 /etc/iproute2/rt_tables 文件中添加数字与名字的关联:

    # echo 200 John >> /etc/iproute2/rt_tables
    # ip rule add from 10.0.0.10 table John
    # ip rule
    0:  from all lookup local 
    32765:  from 10.0.0.10 lookup John
    32766:  from all lookup main 
    32767:  from all lookup default
    

    现在,剩下的事情就是为 John 的路由表创建路由项了。别忘了刷新路由缓存:

    # ip route add default via 195.96.98.253 dev ppp2 table John
    # ip route flush cache
    

    总结主要是以下几步:

    • echo 200 John >> /etc/iproute2/rt_tables
      • # 方便表示,把规则名字和数字对应加入到 /etc/iproute2/rt_tables 文件
    • ip rule add from 10.0.0.10 table John
      • # 新增规则
    • ip route add default via 195.96.98.253 dev ppp2 table John
      • # 规则中添加路由表
    • ip route flush cache
      • # 刷新路由表

    --EOF--



沪ICP备19023445号-2号
友情链接