zoukankan      html  css  js  c++  java
  • IP-route管理路由

     摘自:https://blog.csdn.net/chengxuyuanyonghu/article/details/39558643

    一、高级路由的基础IP ROUTE2
    基本命令:
    ip link list 显示ip链路状态信息
    ip address show 除显示所有网络地址
    ip route show 显示主路由表信息
    ip neigh show 显示邻居表


    linux系统路由表
    linux可以自定义从1-252个路由表,
    linux系统维护了4个路由表:
    0#表 系统保留表
    253#表 defulte table 没特别指定的默认路由都放在改表
    254#表 main table 没指明路由表的所有路由放在该表
    255#表 locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改


    路由表的查看可有以下二种方法:
          ip route list table table_number


          ip route list table table_name


    路由表序号和表名的对应关系在/etc/iproute2/rt_tables中,可手动编辑


    路由表添加完毕即时生效,下面为实例
    ip route add default via 192.168.1.1 table 1 在一号表中添加默认路由为192.168.1.1
    ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2


    注:各路由表中应当指明默认路由,尽量不回查路由表.路由添加完毕,即可在路由规则中应用..


    二、高级路由重点之一路由规则 ip rule
    进行路由时,根据路由规则来进行匹配,按优先级(pref)从低到高匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的.. 

        
    ip rule show 显示路由规则


    路由规则的添加
    ip rule add from 192.168.1.10/32 table 1 pref 100


    如果pref值不指定,则将在已有规则最小序号前插入


    注:创建完路由规则若需立即生效须执行#ip route flush cache;刷新路由缓冲
        可参数解析如下:   &n
            From -- 源地址
            To -- 目的地址(这里是选择规则时使用,查找路由表时也使用)
          Tos -- IP包头的TOS(type of sevice)域Linux高级路由-
          Dev -- 物理接口
          Fwmark -- iptables标签


        采取的动作除了指定路由表外,还可以指定下面的动作:


            Table 指明所使用的表


           Nat 透明网关

          Prohibit 丢弃该包,并发送 COMM.ADM.PROHIITED的ICMP信息 
          Reject 单纯丢弃该包
          Unreachable丢弃该包, 并发送 NET UNREACHABLE的ICMP信息


        具体格式如下:更强大,使用更灵活,它使网络管理员不仅能
            Usage: ip rule [ list | add | del ] SELECTOR ACTION


            SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ][ dev STRING ] [ pref NUMBER ]


            ACTION := [ table TABLE_ID ] [ nat ADDRESS ][ prohibit | reject | unreachable ]
                      [ flowid CLASSID ]


            TABLE_ID := [ local | main | default | new | NUMBER ]

    1. 策略路由 
          基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小、应用或IP源地址来选择转发路径...         
          #/etc/iproute2/rt_tables 此文件存有linux 系统路由表默认表有255 254 253三张表 
            255  local 本地路由表存有本地接口地址,广播地址,已及NAT地址. 
                 local表由系统自动维护..管理员不能操作此表... 
            254  main 主路由表 传统路由表,ip route若没指定表亦操作表254.一般存所有的路由.. 
                 注:平时用ip ro sh查看的亦是此表设置的路由. 


    2.       253  default  默认路由表一般存放默认路由... 


    3.            注:rt_tables文件中表以数字来区分表0保留最多支持255张表 


    4.     路由表的查看可有以下二种方法: 
            #ip route list table table_number

          #ip route list table table_name

        路由表添加完毕,即可在策略路由表内添加路由例:

          #ip route add 192.168.1.0/24 dev eth0 via 192.168.1.66 realm 4

            注:发往子网192.168.1.0/24的数据包通过分类4转发配合tc使用,后文有介绍讲解...

          #ip route add default via 192.168.1.1 table int1

          #ip route add 192.168.1.0/24 via 192.168.1.1 table int2

          #ip route add 172.16.0.2/16 via 172.16.0.1 table int3

            注:各路由表中应当指明默认路由,尽量不回查路由表.路由添加完毕,即可在路由规则中应用.. 
        #ip rule show 显示路由规则 
          0:      from all lookup local 
          32766:  from all lookup main 
          32767:  from all lookup default 
        进行路由时,正是根据路由规则来进行匹配,按优先级(pref后数值)从高到低匹配,直到找到合适的规则.所以在应用中配置默认路由是必要的..     
        策略路由一般手工添加路由表,路由表的添加只需编辑rt_tables文件,规定表序号,表名即可.. 
        ip rule规则添加示例: 
          #ip rule add from 192.168.1.112/32 [tos 0x10] table test2 pref 999 prohibit 
          #ip rule add to 192.168.1.2 pref 1000 table test1 
          #ip rule add from 192.168.1.0/24 pref 1001 table test1 
          #ip rule add [from 0/0] table test1 pref 1003 
          #ip rule add fwmark 1 pref 1002 table test2  此句型配合iptables -t mangle应用.如先对数据

      包作标记:

          #iptables -t mangle -A PREROUTING -p tcp -m multiport

                                 --dports 80,8080,20,21 -s 192.168.1.0/24 -j MARK --set-mark 

      2.网卡捆绑(网关linux+多网卡)

        #modprobe bonding mod=1 miimon=200 primary=eth1 创建bond0,模式为1,主网卡eth1..

        #ip addr add dev bond$ 10.0.0.1/24 设置bond0的IP

        #ifenslave bond0 eth1 eth2 添加绑定的dev

          注:mode=0 轮转均衡(默认模式),此模式MAC频繁切换导致交换机负载大..

             mode=1 主备模式 用primary指定网卡

             mode=4 常用 802.3ad模式,动态链路采集模式.此模式要求SWITCH捆绑..

             miimon=ms 每隔多少毫秒查询链路是否有效.

          其它参数如:

             arp_interval=ms

             arp_ip_target=*.*.*.*

        另一种网卡捆绑固化方式:

          #vi /etc/modules.conf 加入以下行

          alias bond0 bonding

            系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0..

          #cd /etc/sysconfig/network-scripts

          #vi ifcfg-bond0

            DEVICE=bond0 
            IPADDR=11.0.0.1 
            NETMASK=255.0.0.0 
            NETWORK=192.168.1.0 
            BROADCAST=192.168.1.255 
            ONBOOT=yes 
            BOOTPROTO=none 
            USERCTL=no

          #vi ifcfg-eth0  
            DEVICE=eth0 
            USERCTL=no 
            ONBOOT=yes 
            MASTER=bond0 
            SLAVE=yes 
            BOOTPROTO=none

          #vi ifcfg-eth1 
            DEVICE=eth0 
            USERCTL=no 
            ONBOOT=yes 
            MASTER=bond0 
            SLAVE=yes 
            BOOTPROTO=none

         #/etc/init.d/network restart 重启网络服务验证网卡的配置信息备份网卡被加上了NOARP标记

         #cat /proc/net/bond0/info 查看bond信息

      3.网桥(Linux+多网卡)

        配置工具 brctl http://bridge.sourceforge.net/  源码包名:bridge-utils-*形式

        安装第一步:autoconf 后类同于源码包安装..

        例.linu+二网卡eth0 eth1 配置成网桥

          配置前去除加入网桥的eth0 eth1的IP

          #ifconfig eth0/eth1 down

          #ifconfig eth0/eth1 0.0.0.0 up

          #brctl addbr br0

          #brctl addif br0 eth0 eth1

          #ip li set dev br0 up

          #brctl showmacs br0 显示网桥MAC 
        撤网桥:

          #ip li set dev br0 down

          #brctl delif br0 eth0 eth1

          #brctl delbr br0

        网桥接口处亦可进行流量控制,无Ip的linux网桥可有效防御外界的功击,对linux网桥机的总控安全性高...

        贴上一篇网桥应用实例,此实例是网桥的一种扩张应用...

          脚本名:start_bridge.sh

          #!/bin/sh

          brctl addbr net1 
          brctl addif net1 eth0 
          ifconfig eth0 down 
          ifconfig eth0 0.0.0.0 up 
          ifconfig net1 192.168.5.1 up 
          #ip ro del 192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.28

          ip ro del 192.168.1.0/24 
          #route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.5.2

          ip route add default via 192.168.5.2 
          echo "1" > /proc/sys/net/ipv4/ip_forward

      Linux高级路由需结合iptables才能充分体现其功能

    查看路由表内容在查看路由表之前,首先使用ip rule show命令来查看目前使用了哪些路由表,接着,再使用ip route show [table id | name]命令来查看路由表的内容。例如,可以使用ip route show table main来查看路由表main的内容,如果省略路由表名称(如ip route show),会默认地查看路由表main的内容。

    1. [root@localhost /]# ip rule show 
    2. 0: from all lookup local 
    3. 32766: from all lookup main 
    4. 32767: from all lookup default 
    5. [root@localhost /]# 
    6. [root@localhost /]# ip route show table main 
    7. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
    8. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
    9. default via 10.10.15.1 dev eth0 
    10. [root@localhost /]#

    在默认情况下,系统有三个路由表,这三个路由表的功能如下:

    local:路由表local包含本机路由及广播信息。例如,在本机上执行ssh 127.0.0.1时,就会参考这份路由表的内容,在正常情况下,只要配置好网卡的网络设置,就会自动生成local路由表的内容,我们应该也不必修改其内容。

    main:使用传统命令route -n所看到的路由表就是main的内容。Linux系统在默认情况下使用这份路由表的内容来传输数据包,因此,其内容极为重要,在正常情况下,只要配置好网卡的网络设置,就会自动生成main路由表的内容。

    default:最后是default路由表,这个路由表在默认情况下内容为空;除非有特别的要求,否则保持其内容为空即可。

    在此使用路由表main的内容进行解释,以下是图10-10路由表main的内容,因为在主机上有eth0及eth1两块网卡,且为其设置的IP分别是10.10.15.46/25及192.168.1.10/24,因此,路由表内的第.行即是告诉系统,如果有数据包要送到10.10.15.0/25这个网段,就直接将数据包由eth0接口送出即可,而本机临近这个网段的IP是10.10.15.46,第.行则是设置到192.168.1.0/24的路由,其含义与第.行完全相同;以上这两行是只要将计算机网卡上的IP设置好,并在网络服务重启之后,默认就会生成的路由,无需特别的设置。最后一行.则指:如果数据包不是送往10.10.15.0/25及192.168.1.0/24网段,那么数据包将统一转发给10.10.15.1主机去处理,而10.10.15.1就是我们在网络配置中所设置的“默认网关”。
    1. [root@localhost /]# ip route show table main 
    2. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46
    3. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10  
    4. default via 10.10.15.1 dev eth0 
    5. [root@localhost /]#

    2. 添加路由

    添加路由在此还是一样采用ip命令而不是route命令,下例首先使用ip route show.命令显示路由表main的内容,接着再使用ip route add命令将所需的路由添加到路由表main中.,最后再次使用ip route show命令将路由表main的内容打印出来,此时就可以在路由表main之中看到刚才添加的路由了。

    1. [root@localhost /]# ip route show table main 
    2. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
    3. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
    4. default via 10.10.15.1 dev eth0 
    5. [root@localhost /]# 
    6. [root@localhost /]# ip route add 192.168.2.0/24 via 10.10.15.50 table main 
    7. [root@localhost /]# 
    8. [root@localhost /]# ip route show table main  
    9. 10.10.15.0/25 dev eth0 proto kernel scope link src 10.10.15.46 
    10. 192.168.2.0/24 via 10.10.15.50 dev eth0 
    11. 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10 
    12. default via 10.10.15.1 dev eth0 
    13. [root@localhost /]#

    如果要添加的路由并未出现在现有的路由表中,又该如何处理呢?在此请先有一个概念,单纯添加路由表并无意义,因为新增出来的路由表,系统默认是不会去使用的,如果要将路由添加到main以外的路由表,只有先添加“规则”才能确定新的路由表名称(Table ID),有了新的路由表之后,才会把路由添加到新的路由表中。

    我们使用下列示例来说明这个过程。首先使用ip rule show.来查询RPDB的当前状态,可以看到目前只有三条默认规则,接着,再使用ip rule add命令来添加一条规则.,此时系统内就多了一个有用的路由表,其路由表ID为10,我们可以立即使用ip route show命令来查看这个新的路由表.,其内容默认为空,接着可以在这个新路由表中添加路由,在此使用iproute add命令来添加路由,我们决定凡是来自于192.168.2.0/24网段的数据包,都从eth1接口将数据包送离本机,因此,必须完整编写eth1接口的路由。首先将临近eth1接口的路由填入.,告诉系统本机与192.168.1.0/24网段的通信都通过eth1接口来处理,接着填入这个路由表的默认路由.,最后使用ip route show命令显示路由表10的内容。

    1. [root@localhost ~]# ip rule show  
    2. 0: from all lookup local 
    3. 32766: from all lookup main 
    4. 32767: from all lookup default 
    5. [root@localhost ~]# 
    6. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 10  
    7. [root@localhost ~]# 
    8. [root@localhost ~]# ip route show table 10  
    9. [root@localhost ~]# 
    10. [root@localhost ~]# ip route add 192.168.1.0/24 dev eth1 table 10  


    11. [root@localhost ~]# ip route add default via 192.168.1.254 table 10  
    12. [root@localhost ~]# 
    13. [root@localhost ~]# ip route show table 10  
    14. 192.168.1.0/24 dev eth1 scope link 
    15. default via 192.168.1.254 dev eth1 
    16. [root@localhost ~]#

    3. 删除路由

    可以使用ip命令来方便地删除路由,我们使用以下示例来说明如何删除路由。首先将路由表10的内容显示出来.,可以看到路由表10中当前有两条路由,接着使用ip route del命令删除默认路由.,在此别忘了指定我们所要删除的是路由表10,否则默认会删除路由表main的默认路由,接着再使用ip route show 命令查看路由表10.,此时路由表10的默认路由已经不存在了,再次使用ip route del命令删除192.168.122.0/24的路由.,最后可以看到路由表10中已经没有任何路由了。

    1. [root@localhost ~]# ip route show table 10  
    2. 192.168.1.0/24 dev virbr0 scope link 
    3. default via 192.168.1.254 dev eth1 
    4. [root@localhost ~]# 
    5. [root@localhost ~]# ip route del default table 10  
    6. [root@localhost ~]# 
    7. [root@localhost ~]# ip route show table 10  
    8. 192.168.1.0/24 dev virbr0 scope link 
    9. [root@localhost ~]# 
    10. [root@localhost ~]# ip route del 192.168.1.0/24 table 10  
    11. [root@localhost ~]# 
    12. [root@localhost ~]# ip route show table 10  
    13. [root@localhost ~]#

    1. 查看策略数据库
    要查看策略数据库的内容,可以使用ip rule show命令,或者可以使用ip rule ls。如下是命令执行后所得到的输出结果,在这些数据中,可以看到系统的三条默认规则,而这三条规则默认分别对应于local、mail及default三个路由表。

    1. [root@localhost /]# ip rule show 
    2. 0: from all lookup local 
    3. 32766: from all lookup main 
    4. 32767: from all lookup default
    2. 添加规则
    在添加规则时,必须先确定好“条件”、“优先级别”及“路由表ID”,此后才可以执行添加规则的操作。关于这三个参数的含义,我们根据图10-5再说明一次:
    条件
    条件是用来决定哪类数据包可以符合这项规则,而可用来匹配的字段为Source IP、Destination IP、Type of Service、fwmark及dev等,这些字段的使用方式如下:
    Source IP:
    根据来源端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的来源端IP是192.168.1.10,就参考路由表10;如果来源端IP为192.168.2.0/24网段的IP,就参考路由表20。
    1. ip rule add from 192.168.1.10 table 10 
    2. ip rule add from 192.168.2.0/24 table 20
    Destination IP:
    根据目的端IP来决定数据包参考哪个路由表发送出去。以下两个示例分别指出,如果数据包的目的端IP是168.95.1.1,就参考路由表10;如果目的端IP是168.95.0.0/24网段的IP,就参考路由表20。

    1. ip rule add to 168.95.1.1 table 10 
    2. ip rule add to 168.96.0.0/24 table 20
    fwmark:
    fwmark指第3章所提到过的nfmark,如果你已忘了nfmark的含义,不妨参考第2.2.6节。将fwmark作为匹配条件时,必须搭配Netfilter一起使用, 这看起来很麻烦, 却是最灵活的匹配条件。如图10-8所示,某公司对外有三条ADSL,我们希望所有HT T P 协议经由第一条ADS L ,SMTP及POP3经由第二条ADSL,其余流量则经由第三条ADSL。可以使用如下的命令组合来达到这样的目的:
     20120902032029655.jpg
     

    图10-8 fwmark示例
    1. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 80 -j MARK --set-mark 1 
    2. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 25 -j MARK --set-mark 2 
    3. iptables -t mangle -A FORWARD -i eth3 -p tcp --dport 110 -j MARK --set-mark 2 
    4. iptables -t mangle -A FORWARD -i eth3 -j MARK --set-mark 3 
    5. ip rule add fwmark 1 table 1 
    6. ip rule add fwmark 2 table 2 
    7. ip rule add fwmark 3 table 3
     

    首先使用Netfilter的managle机制针对特定的数据包设置MARK值,在此将HTTP数据包的MARK值设置为1,SMTP及POP3数据包的MARK值设置为2,其余数据包则设置MARK值为3。接着,再根据fwmark条件来判断数据包的MARK值,如果MARK值为1,则参考路由表1将数据包送出;MAKR值为2时,则参考路由表2将数据包送出;最后,MARK值为3的数据包则参考路由表3送出。

    以上示例只是一个概念而已,如果真要完整体现出这个示例的所有功能,还需要注意许多细节,稍后将使用详细的示例讲解这部分内容,在此只要首先了解fwmark与Netfilter结合使用的概念即可。
    dev:

    最后,还可以使用数据包输入的接口来作为判断依据,如图10-9所示,我们希望凡是由eth2接口送入的数据包都由eth0接口转发出去,由eth3接口送入的数据包都由eth1接口转发出去。以下命令组合将能满足我们的要求:
    1. ip rule add dev eth2 table 1 
    2. ip rule add dev eth3 table 3
     20120902032155785.jpg
     

    图10-9 接口示例
    3. 优先级别
    前面介绍了规则中“条件”的使用方式,接下来要讨论的是优先级别。优先级别用数字来表示,其范围可由0~4亿多,堪称天文数字,我们实际上不可能在一台PC上设置如此庞大的路由机制。

    1. [root@localhost ~]# ip rule show 
    2. 0: from all lookup local 
    3. 32766: from all lookup main 
    4. 32767: from all lookup default 
    5. [root@localhost ~]# 
    6. [root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 
    7. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 
    8. [root@localhost ~]# 
    9. [root@localhost ~]# ip rule show 
    10. 0: from all lookup local 
    11. 32764: from 192.168.2.0/24 lookup 2 
    12. 32765: from 192.168.1.0/24 lookup 1 
    13. 32766: from all lookup main 
    14. 32767: from all lookup default
    如以上示例,我们执行ip rule show命令所显示内容的第一个字段就是优先级别,数字越小,代表优先级别越高,也代表这条规则可以排得越靠前,如此数据包在进行条件匹配时,就会越早匹配到这条规则,从输出的数据中,默认优先级别0、32766及32767已被占用,因此,在添加规则时,如果没有特别设置优先级别,那么,优先级别默认会从32766开始递减,如32765、32764……,如果我们需要特别设置优先级别,可以在ip rule add命令的最后加上prio XXX参数。如下例所示:
    1. [root@localhost ~]# ip rule show 
    2. 0: from all lookup local 
    3. 32766: from all lookup main 
    4. 32767: from all lookup default 
    5. [root@localhost ~]# 
    6. [root@localhost ~]# ip rule add from 192.168.1.0/24 table 1 prio 10 
    7. [root@localhost ~]# ip rule add from 192.168.2.0/24 table 2 prio 20 
    8. [root@localhost ~]# 
    9. [root@localhost ~]# ip rule show 
    10. 0: from all lookup local 
    11. 10: from 192.168.1.0/24 lookup 1 
    12. 20: from 192.168.2.0/24 lookup 2 
    13. 32766: from all lookup main 
    14. 32767: from all lookup default
    路由表ID
    Linux的基于策略的路由中,路由表用ID来表示,但如有必要,还可以用ID与名称对照表将ID转换成名称,关于这部分请参考第10.2.1节。
    4. 删除规则
    ip命令提供的删除规则的方式十分灵活,例如,要删除下列第2条规则,可以分别使用“优先级别”、“条件”及“路由表”当中任何一个唯一的值来设置所需删除的规则,如下:
    ip rule del prio 10
    ip rule del from 192.168.1.0/24
    ip rule del table 1
    ip rule del from 192.168.1.0/24 table 1 prio 10
    1. [root@localhost ~]# ip rule show 
    2. 0: from all lookup local 
    3. 10: from 192.168.1.0/24 lookup 1 
    4. 20: from 192.168.2.0/24 lookup 2 
    5. 32766: from all lookup main 
    6. 32767: from all lookup default 
    7. [root@localhost ~]#

  • 相关阅读:
    cacti气象图调整(批量位置调整、更改生成图大小等)
    windows下安装,配置gcc编译器
    AOP技术应用和研究--OOP
    background-position 使用方法具体介绍
    iOS安全攻防(三):使用Reveal分析他人app
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    Cocos2d-X开发中国象棋《八》走棋
    div:给div加滚动栏 div的滚动栏设置
    GridView编辑删除操作
    AngularJS:实例
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/12368421.html
Copyright © 2011-2022 走看看